hal*_*fer 7 amazon-web-services aws-cdk
我继承了一个小型 CDK 项目,其中包含一个cdk.context.json文件:
{
"vpc-provider:account=9015xxxxxxxx:filter.tag:Name=preprod-eu-west-1:region=eu-west-1:returnAsymmetricSubnets=true": {
"vpcId": "vpc-0d891xxxxxxxxxxxx",
"vpcCidrBlock": "172.35.0.0/16",
"availabilityZones": [],
"subnetGroups": [
{
"name": "Private",
"type": "Private",
"subnets": [
{
"subnetId": "subnet-0ad04xxxxxxxxxxxx",
"cidr": "172.35.a.0/22",
"availabilityZone": "eu-west-1b",
"routeTableId": "rtb-0fee4xxxxxxxxxxxx"
},
{
"subnetId": "subnet-08598xxxxxxxxxxxx",
"cidr": "172.35.z.0/22",
"availabilityZone": "eu-west-1c",
"routeTableId": "rtb-0f477xxxxxxxxxxxx"
}
]
},
{
"name": "Public",
"type": "Public",
"subnets": [
{
"subnetId": "subnet-0fba3xxxxxxxxxxxx",
"cidr": "172.35.y.0/22",
"availabilityZone": "eu-west-1b",
"routeTableId": "rtb-02dfbxxxxxxxxxxxx"
},
{
"subnetId": "subnet-0a3b8xxxxxxxxxxxx",
"cidr": "172.35.x.0/22",
"availabilityZone": "eu-west-1c",
"routeTableId": "rtb-02dfbxxxxxxxxxxxx"
}
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
这对于它连接到的预生产环境来说效果很好,但我现在需要部署到生产环境。我可以手动生成相同的文件,但这感觉像是浪费时间 - 我怀疑这是一个生成的文件。
我已经尝试过cdk context --build,希望它能生成这个文件,但似乎不会——它似乎只是为了回显已经存在的预生成文件。我该怎么做才能避免手动构建(并避免猜测它想要哪些 VPC 和子网)?
gsh*_*hka 15
该文件是为您的 CDK 堆栈部署到的任何环境生成的。
如果您想使用临时环境和生产环境的值填充它,您只需cdk synth在激活生产 AWS 凭证后运行即可(--profile例如,使用 )。这将使用新值(除了已有的值之外)填充上下文,并且您应该将这些更改提交到 VCS。
建议将该文件专门保存在 VCS 中,以避免在每次部署时重新填充该文件。这使得您的 CDK 应用程序具有确定性。
从最佳实践来看:
提交 cdk.context.json 以避免不确定行为
AWS CDK 包含一种称为上下文提供程序的机制,用于记录非确定性值的快照,从而允许未来的综合操作生成完全相同的模板。新模板中的唯一更改是您在代码中所做的更改。当您使用构造的 .fromLookup() 方法时,调用的结果将缓存在 cdk.context.json 中,您应该将其与其余代码一起提交到版本控制,以确保 CDK 应用程序的未来执行使用相同的结果价值。
更好的组织方法是使您的堆栈特定于环境 - 也就是说,为您想要部署到的每个环境实例化您的顶级堆栈或阶段一次,并指定 prop env。部署则变为cdk deploy MyStaginStack和cdk deploy MyProductionStack。尽管这与问题无关。
| 归档时间: |
|
| 查看次数: |
11678 次 |
| 最近记录: |