我刚刚开始着手云的形成,我开始为docker创建ECR存储库, 我需要所有存储库具有相同的属性,但存储库名称除外。
由于这是微服务,因此我至少需要40个存储库,因此我想创建一个堆栈,该存储库将为我循环创建存储库,并更改名称。
我开始研究嵌套堆栈,这就是我到目前为止得到的:
ecr-root.yaml:
---
AWSTemplateFormatVersion: '2010-09-09'
Description: ECR docekr repository
Parameters:
ECRRepositoryName:
Description: ECR repository name
Type: AWS::ECR::Repository::RepositoryName
Resources:
ECRStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://cloudformation.s3.amazonaws.com/ecr-stack.yaml
TimeoutInMinutes: '20'
Parameters:
ECRRepositoryName: !GetAtt 'ECRStack.Outputs.ECRRepositoryName'
和ecr-stack.yaml:
---
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
ECRRepositoryName:
Description: ECR repository name
Default: panpwr-mysql-base
Type: String
Resources:
MyRepository:
Type: AWS::ECR::Repository
Properties:
RepositoryName:
ref: ECRRepositoryName
RepositoryPolicyText:
Version: "2012-10-17"
Statement:
-
Sid: AllowPushPull
Effect: Allow
Principal:
AWS:
- "arn:aws:iam::123456789012:user/Bob"
- "arn:aws:iam::123456789012:user/Alice"
Action:
- "ecr:GetDownloadUrlForLayer"
- "ecr:BatchGetImage"
- "ecr:BatchCheckLayerAvailability"
- "ecr:PutImage"
- "ecr:InitiateLayerUpload"
- "ecr:UploadLayerPart"
- "ecr:CompleteLayerUpload"
RepositoryNameExport:
Description: RepositoryName for export
Value:
Ref: ECRRepositoryName
Export:
Name:
Fn::Sub: "ECRRepositoryName"
一切正常, 但是,当我运行堆栈时,它会问我要提供的存储库名称,并创建了一个存储库。 然后我可以使用不同的名称拥有尽可能多的堆栈,但这不是我的目的。
如何将所有内容集成到一个堆栈中,该堆栈可以创建所需的任意数量的存储库?
答案 0 :(得分:1)
听起来像您想要遍历给定参数列表的声音。 CloudFormation模板中无法进行循环。您可以尝试的几件事
您可以以编程方式生成模板。 troposphere Python库提供了一个很好的抽象来生成模板。
Write custom resource backed by AWS lambda。您可以在AWS lambda函数中处理自定义逻辑。
AWS云开发套件(AWS CDK)是一个开源软件开发框架,用于在代码中定义云基础架构并通过AWS CloudFormation对其进行配置。使用AWS CDK为您的用例编写自定义脚本。