gpt4 book ai didi

aws-cloudformation - 多次创建cloudformation资源

转载 作者:行者123 更新时间:2023-12-03 07:36:00 26 4
gpt4 key购买 nike

我刚刚转向云形成,我开始为 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"

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

如何将所有内容集中到一个堆栈中,以创建我想要的尽可能多的存储库?

最佳答案

听起来您想循环遍历给定的参数列表。 CloudFormation 模板中无法进行循环。您可以尝试一些事情

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

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

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

关于aws-cloudformation - 多次创建cloudformation资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56994164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com