在StepFunctions中使用参数的AWS CDK替代方案



我正在使用js/ts开发AWS CDK(版本2,因为我们都讨厌版本1中的版本控制),并且由于一些明显的原因,我正在尝试用CDK取代我们当前的Cloudformation堆栈/实现。

当前的Cfn repo的结构是这样的:

.
├── 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文件中定义。在不同环境中使用的所有参数都在./cloudformation/params/{stackname}/{env}/目录下的json文件中定义,这些参数在堆栈定义中被引用/反映,看起来像这样(有很多!Sub!Ref):

ZendeskWorkerLambdaArn:
Fn::ImportValue: !Sub "${ZendeskWorkerInfrastructureStackName}-ZendeskWorkerLambdaArn"
ZendeskDomain: !Ref ZendeskDomain
FooBarGroupId: !Ref FooBarGroupId

这个堆栈的作用是:

  1. 一旦从后端接收到调用信号,它就会启动,并且;
  2. 它随后调用lambda worker以及存储在S3 bucket中的模板名称(key),并且;
  3. 它还将参数传递给状态机,在状态机中,工作线程获得所有参数并执行一些业务逻辑操作(超出了本问题的范围)。

请注意,所有这些句柄模板文件都是通过在shell脚本中运行aws-cli(在./ops/下)上传到s3 bucket的。

因为我试图使用CDK来取代这个非常重配置和重shell的Cfn项目,我遇到了一个问题,那就是我应该对不同环境的所有这些参数做什么。我使用cdk.CfnParameter来定义CDK堆栈定义中的环境变量。我想我可以再做一次,但问题是:

  1. 如何区分相同的变量(名称),但在不同的环境下?
  2. 我必须附加到cdk deploy命令末尾的env数量很大,这使得整个命令看起来很乏味。(目前在json文件中为每个环境定义了大约40个参数)
  3. 在部署时使用参数是法律不鼓励的。

我已经想不出如何解决这个问题了。非常感谢如果有人能给我一点想法,也很抱歉超长的帖子。虽然我希望我已经提供了足够的上下文(说到上下文,CDK上下文是我应该看的东西吗?)

欢呼,亚当

为此我使用了cdk.context.json和环境变量。

示例cdk context 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

最新更新