创建cloudformation资源的乘数

时间:2019-07-11 17:03:15

标签: amazon-cloudformation

我刚刚开始着手云的形成,我开始为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"

一切正常, 但是,当我运行堆栈时,它会问我要提供的存储库名称,并创建了一个存储库。 然后我可以使用不同的名称拥有尽可能多的堆栈,但这不是我的目的。

如何将所有内容集成到一个堆栈中,该堆栈可以创建所需的任意数量的存储库?

1 个答案:

答案 0 :(得分:1)

听起来像您想要遍历给定参数列表的声音。 CloudFormation模板中无法进行循环。您可以尝试的几件事

  1. 您可以以编程方式生成模板。 troposphere Python库提供了一个很好的抽象来生成模板。

  2. Write custom resource backed by AWS lambda。您可以在AWS lambda函数中处理自定义逻辑。

  3. AWS云开发套件(AWS CDK)是一个开源软件开发框架,用于在代码中定义云基础架构并通过AWS CloudFormation对其进行配置。使用AWS CDK为您的用例编写自定义脚本。