如何在同一 AWS 账户和区域中部署同一堆栈集的多个实例?
Posted
技术标签:
【中文标题】如何在同一 AWS 账户和区域中部署同一堆栈集的多个实例?【英文标题】:How to deploy multiple instances of the same stackset in the same AWS account and region? 【发布时间】:2021-12-19 03:38:43 【问题描述】:我正在创建一个多租户架构。每当新租户注册我的平台时,我都需要复制我的资源。
我在我的 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 个子模式中只有 1 个匹配 #/StackInstancesGroup: 数组项不是唯一的
所以我似乎无法在同一个 AWS 账户和区域中部署超过 1 个实例,有没有办法在同一个 AWS 账户和区域中完成多个实例?或者有没有其他更好的方法来为我的新租户复制我的资源?
【问题讨论】:
【参考方案1】:如果您想将所有资源保存在单个账户/区域中,CloudFormation StackSets 目前无法满足您的需求。 如果您的资源未在模板中命名,您可以只创建多个 CloudFormation 堆栈。但是,这可能会导致维护变得混乱,而且如果您大规模运行应用程序,您更有可能达到服务配额。
就个人而言,我建议使用 AWS Organizations 为每个租户创建一个账户。然后可以使用 CloudFormation StackSets 将您的资源自动复制到新帐户。
此解决方案还具有为每个租户更精确地分配成本的额外好处。
【讨论】:
以上是关于如何在同一 AWS 账户和区域中部署同一堆栈集的多个实例?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用分析窗口 SQL 函数在同一数据集的多组行中查找 id 值
AWS CDK 将 API Gateway URL 传递到同一堆栈中的静态站点