amazon-cloudformation - 创建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"
一切正常,但是当我运行堆栈时,它会询问我想要给它的存储库名称,它会创建一个存储库。然后我可以拥有多个我想要的不同名称的堆栈,但这不是我的目的。
我如何在一个堆栈中获取所有内容,创建我想要的尽可能多的存储库?
解决方案
听起来您想遍历给定的参数列表。在 CloudFormation 模板中无法循环。您可以尝试的几件事
您可以以编程方式生成模板。对流层Python 库提供了一个很好的抽象来生成模板。
编写由 AWS lambda 支持的自定义资源。您可以在 AWS lambda 函数中处理您的自定义逻辑。
AWS 云开发工具包 (AWS CDK) 是一个开源软件开发框架,用于在代码中定义云基础设施并通过 AWS CloudFormation 对其进行预置。使用AWS CDK为您的用例编写自定义脚本。
推荐阅读
- android - 片段不会立即被替换
- php - Codeignitor 错误号:1066“不是唯一的表/别名”
- julia - 为什么 trunc() 不将浮点数转换为整数?
- docker - docker v18.09中docker容器的shm挂载到主机有什么用
- objective-c - 如何比较闭包/块?
- jquery - 通过 Controller 方法的 $request 参数获取 $.ajax 发布的数据
- c++ - 我可以访问我的代码中的调用堆栈吗?
- discord.js - Discord.js - 如何使函数仅每 30 秒运行一次
- python - 在 Tkinter 中完成进程后如何再次启用元素
- python - 返回数字表的函数