首页 > 解决方案 > 创建cloudformation资源倍增

问题描述

我刚刚搬到云形成,我开始为 docker 创建 ECR 存储库,我需要所有存储库都具有相同的属性,但存储库名称除外。

由于这是微服务,我将需要至少 40 个 repo,所以我想创建一个堆栈,它将在循环中为我创建 repo,并且只需更改名称。

我开始查看嵌套堆栈,这就是我目前得到的:

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"

一切正常,但是当我运行堆栈时,它会询问我想要给它的存储库名称,它会创建一个存储库。然后我可以拥有多个我想要的不同名称的堆栈,但这不是我的目的。

我如何在一个堆栈中获取所有内容,创建我想要的尽可能多的存储库?

标签: amazon-cloudformation

解决方案


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

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

  2. 编写由 AWS lambda 支持的自定义资源。您可以在 AWS lambda 函数中处理您的自定义逻辑。

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


推荐阅读