wut*_*tch 11 parameters aws-cloudformation aws-cdk
我一直在尝试使用 AWS CDK 以编程方式构建 CloudFormation 堆栈模板,但在使用CfnParameters 参数化模板时遇到问题。
当我在 json/yaml 中手动编写模板时,我ParameterGroups使用嵌套Parameters列表进行声明,并定义各个参数,包括类型、描述、AllowedPattern 等。然后在资源的定义中,我可以通过Ref值引用这些参数,例如
"CidrBlock": {
"Ref": "MyVpcCidr"
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何通过 CDK 使用此功能、定义参数并稍后在模板中引用它?
我尝试使用以下方法software.amazon.awscdk.core.CfnParameter,但收到错误
final CfnParameter myVpcCidrParameter =
CfnParameter.Builder.create(this, "MyVpcCidr")
.type("String")
.description("The CIDR block for the VPC")
.build();
final Vpc vpc =
Vpc.Builder.create(this, "vpc")
.cidr(myVpcCidrParameter.getValueAsString()) // <-- error on this line
.enableDnsSupport(true)
.enableDnsHostnames(true)
.build();
...
Run Code Online (Sandbox Code Playgroud)
错误指出
JsiiException:“cidr”属性必须是具体的 CIDR 字符串,已获得令牌
这似乎很合理,因为myVpcCidrParameter.getValueAsString()返回"${Token[TOKEN.10]}".
但是,我没有看到任何其他方法CfnParameter或Vpc.Builder允许我使用参数引用来指定属性值作为对我的参数的引用。
使用 CDK 构建包含参数和使用这些参数定义的资源的模板的正确方法是什么?
您的使用CfnParameters看起来正确,但是与资源一起使用时存在已知问题,例如:
更好的选择是使用CDK 上下文
这是使用上下文更新的示例:
final String myVpcCidr = (String)this.getNode().tryGetContext("myVpcCidr");
final Vpc vpc =
Vpc.Builder.create(this, "vpc")
.cidr(myVpcCidr) // <-- Use context value
.enableDnsSupport(true)
.enableDnsHostnames(true)
.build();
Run Code Online (Sandbox Code Playgroud)
与参数类似,您可以通过 CLI 提供上下文键/值:
cdk synth --context myVpcCidr=value MyStack
Run Code Online (Sandbox Code Playgroud)
还可以通过其他 5 种方式向您的 AWS CDK 应用程序提供上下文值:
有关更多信息,请参阅CDK 上下文文档。
| 归档时间: |
|
| 查看次数: |
3952 次 |
| 最近记录: |