我正在学习 AWS 云开发套件 (CDK)。
作为学习的一部分,我试图了解我应该如何正确处理生产和开发环境。
我知道AWS CDK提供了环境参数来允许将堆栈部署到特定帐户。
但是,如何为开发堆栈和生产堆栈提供特定的选项呢?AWS CDK 似乎没有默认提供它,或者我是否遗漏/误解了某些内容?
一个非常简单的例子是,我想要一个my-s3-bucket-dev为我的开发帐户调用的 S3 存储桶,以及一个my-s3-bucket-prod为我的生产帐户命名的 S3 存储桶。但是如何stage在 AWS CDK 中正确处理变量?
我知道我可以在cdk.json文件中添加参数,但同样,我不知道如何正确使用此文件来依赖于已部署的堆栈,即生产与开发。
感谢您的支持
欢迎使用 AWS CDK。享受车程。;)
实际上,帐户本身没有语义(在您的情况下是阶段)。这与 CDK 或 Cloud Formation 无关。你需要照顾这个。
你是对的,你可以在cdk.json. 除了 CDK 内部使用的一些变量之外,上下文中没有架构强制执行。您可以定义您的对象dev和prod其中的对象。还有其他定义上下文的方法。这是一个示例,它可能看起来像这样:
{
"app": "node app",
// usually there's some internal definition for your CDK project
"context": {
"dev": {
"accountId" : "prod_account",
"accountRegion" : "us-east-1",
"name": "dev",
"resourceConfig":
{
// here you could differentiate the config per AWS resource-type
// e.g. dev has lower hardware specs
}
},
"prod": {
"accountId" : "prod_account",
"accountRegion" : "us-east-1",
"name": "prod",
"resourceConfig":
{
// here you could differentiate the config per AWS resource-type
// prod has higher hardware specs or more cluster nodes
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
定义后,您需要使用标志来运行 CDK 应用程序-c 以指定您想要拥有的配置对象(dev 或 prod)。例如,您可以使用 来运行它cdk synth -c stage=prod。这会stage在您的上下文中设置变量并使其可用。成功后,您可以再次重新访问上下文并获取适当的配置对象。
const app = new cdk.App();
const stage = app.node.tryGetContext('stage');
// the following step is only needed, if you have a different config per account
const stageConfig = app.node.tryGetContext(stage );
// ... do some validation and pass the config to the stacks as constructor argument
Run Code Online (Sandbox Code Playgroud)
正如我所说,上下文是做到这一点的一种方法。然而,它也有缺点。它是 JSON,没有代码。
我更喜欢的是每个资源配置(例如 S3)都有 TypeScript 类型,并将它们作为一个普通对象连接在一起。该对象映射账户/区域信息和对应的资源配置。
| 归档时间: |
|
| 查看次数: |
1664 次 |
| 最近记录: |