如何在CDK堆栈中指定参数定义?

时间:2019-09-27 16:42:31

标签: aws-cdk

AWS CDK的

Use an AWS CloudFormation Parameter部分提到了如何自定义AWS CloudFormation模板。它指的是云形成模板。我想在CDK堆栈中添加参数,并获取合成CF模板的参数部分。

我是否正确理解文档建议在合成模板中添加参数部分?如果是,则每次运行cdk synth都会覆盖它。

还有其他定义参数部分的方式吗?

1 个答案:

答案 0 :(得分:3)

编辑:以下是一个打字稿示例,该示例从上下文中读取存储桶名称:https://github.com/cloudshiftstrategies/aws-cdk-examples/tree/master/context-example-typescript-app

您可以使用CfnParameter类型将参数添加到CDK,如下所示:

new cdk.CfnParameter(this, 'MyParameter', {
    type: 'String',
    default: 'Blah',
    noEcho: true,
});

但是CDK通常不鼓励这样做。设计应具有完全可部署的堆栈,并使用代码/配置作为应为给定帐户创建内容的条件。这来自他们的documentation

  

当您为具有多个堆栈的应用程序运行cdk synth命令时,云程序集将为每个堆栈实例包含一个单独的模板。即使两个堆栈是同一类的实例,AWS CDK也会将它们作为两个单独的模板发出。

     

您可以通过在cdk synth命令中指定堆栈名称来合成每个模板。以下示例综合了stack1的模板。

     

此方法在概念上与通常使用AWS CloudFormation模板的方式不同,后者可以多次部署模板并通过AWS CloudFormation参数进行参数设置。尽管可以在AWS CDK中定义AWS CloudFormation参数,但通常不建议使用它们,因为AWS CloudFormation参数仅在部署期间解决。这意味着您无法在代码中确定它们的值。例如,要基于参数的值有条件地在应用程序中包含资源,您必须设置一个AWS CloudFormation条件并使用此条件标记资源。由于AWS CDK采用的方法是在综合时解析具体模板,因此您可以使用if语句检查该值,以确定是否应该定义资源或应采取某些行为。

cdk中的参数将通过上下文值从命令行或通过cdk.json完成,如此处记录:https://docs.aws.amazon.com/cdk/latest/guide/get_context_var.html