【发布时间】:2021-10-11 09:50:16
【问题描述】:
我正在使用 js/ts 中的 AWS CDK(ver2,因为我们都讨厌 ver1 中的版本控制),并且出于一些明显的原因,我正在尝试用 CDK 替换我们当前的 Cloudformation 堆栈/实现。
当前的 Cfn 存储库具有如下结构:
.
├── cloudformation
│ ├── params
│ │ └── submit
│ │ ├── e2e.json
│ │ ├── preprod.json
│ │ └── prod.json
│ ├── stack
│ │ └── submit.yml
│ └── tags
│ ├── e2e.json
│ ├── preprod.json
│ └── prod.json
├── deploy.sh
├── ops
│ ├── add-state.sh
│ ├── create-or-update-stack.sh
│ └── upload-zendesk-templates.sh
├── state-machine
│ ├── Submit.json
│ └── SubmitSubStateMachine.json
└── zendesk-template
├── some_handlebars_zendesk_template_1.hbs
└── some_handlebars_zendesk_template_2.hbs
Cloudformation 堆栈在 ./cloudformation/stack/ 下的 yaml 文件中定义。在不同环境中使用的所有 thw 参数都定义在 ./cloudformation/params/{stackname}/{env}/ 目录下的 json 文件中,这些参数在堆栈定义中被引用/反映,看起来像这样(有很多 !Sub 和 !Ref):
ZendeskWorkerLambdaArn:
Fn::ImportValue: !Sub "${ZendeskWorkerInfrastructureStackName}-ZendeskWorkerLambdaArn"
ZendeskDomain: !Ref ZendeskDomain
FooBarGroupId: !Ref FooBarGroupId
这个堆栈的作用是:
- 一旦收到来自后端的调用信号,它就会启动,并且;
- 它随后调用一个 lambda 工作程序以及存储在 S3 存储桶中的模板名称(键),并且;
- 它还将参数传递给状态机,工作人员在该状态机中获取所有参数并执行一些业务逻辑工作(超出此 Cfn 问题的范围)。
请注意,所有这些车把模板文件都通过在 shell 脚本(./ops/ 下)中运行 aws-cli 上传到 s3 存储桶。
由于我试图使用 CDK 来替换这个非常重配置和重外壳的 Cfn 项目,我遇到了一个问题,我应该为不同的环境处理所有这些参数。我使用cdk.CfnParameter 在CDK 堆栈定义中定义环境变量。我想我可以再做一次,但问题是:
- 如何区分相同的变量(名称)但在不同的环境下?
- 我必须附加到
cdk deploy命令末尾的环境量很大,这使得整个命令看起来很乏味。 (目前每个环境的 json 文件中定义了大约 40 个参数) - aws 真的不鼓励在部署时使用参数。
我已经没有办法解决这个问题了。如果有人能给我一点想法,非常感谢,也很抱歉这篇超长的帖子。虽然我确实希望我提供了足够的上下文(说到上下文,我应该查看 CDK 上下文吗?)
干杯, 亚当
【问题讨论】:
-
SSM 参数可行吗?
-
对我来说听起来像是 SSM 的工作
标签: amazon-web-services amazon-cloudformation aws-cdk aws-step-functions infrastructure-as-code