如何在同一个AWS帐户和地区部署同一堆栈集的多个实例



我正在创建一个多租户体系结构。每当新租户注册我的平台时,我都需要复制我的资源。

我在SAM项目中创建了一个堆叠集,如下所示:

StackSet:
Type: AWS::CloudFormation::StackSet
Properties:
Capabilities:
- "CAPABILITY_IAM"
- "CAPABILITY_NAMED_IAM"
- "CAPABILITY_AUTO_EXPAND"
AdministrationRoleARN: !GetAtt AdministrationRole.Arn
ExecutionRoleName: !Ref ExecutionRole
OperationPreferences:
FailureToleranceCount: 0
MaxConcurrentCount: 1
PermissionModel: 'SELF_MANAGED'
StackInstancesGroup:
- DeploymentTargets:
Accounts: 
- !Ref AWS::AccountId
Regions: 
- !Ref AWS::Region
- DeploymentTargets:
Accounts: 
- !Ref AWS::AccountId
Regions: 
- !Ref AWS::Region
Tags:
- 
Key: 'PROJECT'
Value: 'imaclegal'
StackSetName: 'imaclegal'
TemplateURL: 'https://s3.amazonaws.com/a-child-s3/output.yaml'

当我执行sam deploy时,我得到这个错误:

资源StackSet的属性验证失败,消息为:#:#:2#/StackInstancesGroup中只有1个子模式匹配:数组项不是唯一的

因此,我似乎无法在同一个AWS帐户和区域中部署超过1个实例,有什么方法可以在同一AWS帐户和地区中实现多个实例吗?或者还有其他更好的方法来为我的新租户复制我的资源吗?

如果您想将所有资源保留在一个帐户/区域中,CloudFormation StackSets目前无法满足您的需求。如果您的资源没有在模板中命名,您可以创建多个CloudFormation堆栈。不过,维护起来可能会很麻烦,如果你大规模运行应用程序,你更有可能达到服务配额。

就我个人而言,我建议使用AWS组织为每个租户创建一个帐户。然后可以使用CloudFormation StackSets自动将您的资源复制到新帐户。

该解决方案还具有为每个租户更精确地分配成本的额外好处。

最新更新