首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在StepFunctions中使用Params的AWS替代方案

在StepFunctions中使用Params的AWS替代方案
EN

Stack Overflow用户
提问于 2021-08-06 13:43:54
回答 1查看 153关注 0票数 1

我正在研究js/ts中的AWS (ver2,因为我们都讨厌ver1中的版本控制),而且出于一些明显的原因,我试图用CDK替换我们当前的CloudFormatation堆栈/实现。

目前的Cfn回购具有如下结构:

代码语言:javascript
复制
.
├── 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):

代码语言:javascript
复制
ZendeskWorkerLambdaArn:
          Fn::ImportValue: !Sub "${ZendeskWorkerInfrastructureStackName}-ZendeskWorkerLambdaArn"
ZendeskDomain: !Ref ZendeskDomain
FooBarGroupId: !Ref FooBarGroupId

这个堆栈所做的是:

一旦从后端接收到调用信号,

  1. 就会启动,并且;
  2. 随后会调用lambda工作器以及存储在S3桶中的模板名(密钥),而
  3. 也会将params传递给状态机,在状态机中,工作人员获取所有参数并执行一些业务逻辑操作(超出Cfn问题的范围)。

注意,所有这些工具栏模板文件都是通过在shell脚本(在s3下)中运行aws而上传到一个./ops/桶中的。

由于我试图使用CDK来替换这个配置量很大的Cfn项目和shell重的Cfn项目,我遇到了一个问题,这就是我应该为不同的env处理所有这些参数的问题。我在CDK堆栈定义中使用了cdk.CfnParameter来定义环境变量。我想我可以再做一次,但问题是:

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

确实不鼓励这样做。

我想不出如何解决这个问题了。非常感谢,如果有人能给我一点想法,同时也为超长的职位感到抱歉。因此,我确实希望我提供了足够的上下文(说到上下文,CDK上下文是否是我应该查看的内容?)

干杯,亚当

EN

回答 1

Stack Overflow用户

发布于 2021-08-10 20:37:05

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

示例cdk上下文json,

代码语言:javascript
复制
{
  "shared": {
    "application": "application name",
  },
  "dev": {
    "environment": "dev",
    }
}

在部署cdk时,从管道中设置环境。

在python中获取下面的环境,

代码语言:javascript
复制
ENVIRONMENT = os.environ.get('ENVIRONMENT', 'dev')

并在创建下面的Python时阅读该上下文,

代码语言:javascript
复制
   self.context = self.node.try_get_context(ENVIRONMENT)

有关其他示例,请参阅这里- https://docs.aws.amazon.com/cdk/latest/guide/get_context_var.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68682629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档