我正在 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文件中。 ,在堆栈定义中被引用/反射(reflect),如下所示(有很多 !Sub
和 !Ref
):
ZendeskWorkerLambdaArn:
Fn::ImportValue: !Sub "${ZendeskWorkerInfrastructureStackName}-ZendeskWorkerLambdaArn"
ZendeskDomain: !Ref ZendeskDomain
FooBarGroupId: !Ref FooBarGroupId
这个堆栈的作用是:
- 一旦收到来自后端的调用信号,它就会启动;
- 它随后调用 lambda Worker 以及存储在 S3 存储桶中的模板名称( key ),并且;
- 它还将参数传递给状态机,工作人员在状态机中获取所有参数并执行一些业务逻辑操作(超出了此 Cfn 问题的范围)。
请注意,所有这些 Handlebars 模板文件都是通过在 shell 脚本中运行 aws-cli(在 ./ops/
下)上传到 s3 存储桶的。
由于我尝试使用 CDK 来替换这个配置繁重且 shell 繁重的 Cfn 项目,因此我遇到了一个问题,即我应该如何处理不同环境的所有这些参数。我用过 cdk.CfnParameter
在CDK堆栈定义中定义环境变量。我想我可以再做一次,但问题是:
- 如何区分相同的变量(名称)但在不同的环境下?
- 我必须附加到
cdk deploy
末尾的 env 数量命令很大,这使得整个命令看起来很乏味。 (目前每个环境的 json 文件中定义了大约 40 个参数) - AWS 确实不鼓励在部署时使用参数。
我已经没有办法解决这个问题了。如果有人能给我一点点想法,我将不胜感激,并对这篇超长的帖子表示歉意。不过,我确实希望我已经提供了足够的上下文(说到上下文,CDK 上下文是我应该关注的吗?)
干杯, 亚当
最佳答案
我使用 cdk.context.json 和环境变量来实现此目的。
示例 cdk 上下文 json,
{
"shared": {
"application": "application name",
},
"dev": {
"environment": "dev",
}
}
部署 cdk 时从管道设置环境。
在python中获取如下环境,
ENVIRONMENT = os.environ.get('ENVIRONMENT', 'dev')
并在使用 Python 创建基础设施时读取该上下文,如下所示,
self.context = self.node.try_get_context(ENVIRONMENT)
请参阅此处了解其他示例 - https://docs.aws.amazon.com/cdk/latest/guide/get_context_var.html
关于amazon-web-services - 在 StepFunctions 中使用 Params 的 AWS CDK 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68682629/