选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

使用 CloudFormation 参数获取 CloudFormation 值

聚焦模式
使用 CloudFormation 参数获取 CloudFormation 值 - AWS Cloud Development Kit (AWS CDK) v2

这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在部署时,使用 AWS Cloud Development Kit (AWS CDK) 应用程序中的 AWS CloudFormation 参数将自定义值输入到您的合成 CloudFormation模板中。

有关简介,请参阅参数和 AWS CDK

在 CDK 应用程序中定义参数

使用 CfnParameter 类定义参数。您至少需要为大多数参数指定至少一个类型和描述,尽管两者在技术上都是可选的。当提示用户在 AWS CloudFormation 控制台中输入参数值时,就会显示描述。有关可用类型的更多信息,请参阅 Types

注意

您可以在任何作用域内定义参数。但是,我们建议在堆栈级别定义参数,以便在重构代码时它们的逻辑 ID 不会发生变化。

TypeScript
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
JavaScript
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
Python
upload_bucket_name = CfnParameter(self, "uploadBucketName", type="String", description="The name of the Amazon S3 bucket where uploaded files will be stored.")
Java
CfnParameter uploadBucketName = CfnParameter.Builder.create(this, "uploadBucketName") .type("String") .description("The name of the Amazon S3 bucket where uploaded files will be stored") .build();
C#
var uploadBucketName = new CfnParameter(this, "uploadBucketName", new CfnParameterProps { Type = "String", Description = "The name of the Amazon S3 bucket where uploaded files will be stored" });
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});

使用参数

CfnParameter 实例通过令牌将其值公开给 CDK 应用程序。像所有令牌一样,参数的令牌在合成时进行解析。但是它解析为对 AWS CloudFormation 模板中定义的参数的引用(将在部署时解析),而不是对具体值的引用。

您可以将令牌作为 Token 类的实例进行检索,也可以检索为字符串、字符串列表或数字编码。您的选择取决于要与参数一起使用的类或方法所需的值类型。

TypeScript
属性 有点价值
value Token类实例
valueAsList 表示为字符串列表的标记
valueAsNumber 以数字表示的代币
valueAsString 表示为字符串的标记
JavaScript
属性 有点价值
value Token类实例
valueAsList 表示为字符串列表的标记
valueAsNumber 以数字表示的代币
valueAsString 表示为字符串的标记
Python
属性 有点价值
value Token类实例
value_as_list 表示为字符串列表的标记
value_as_number 以数字表示的代币
value_as_string 表示为字符串的标记
Java
属性 有点价值
getValue() Token类实例
getValueAsList() 表示为字符串列表的标记
getValueAsNumber() 以数字表示的代币
getValueAsString() 表示为字符串的标记
C#
属性 有点价值
Value Token类实例
ValueAsList 表示为字符串列表的标记
ValueAsNumber 以数字表示的代币
ValueAsString 表示为字符串的标记
属性 有点价值
value Token类实例
valueAsList 表示为字符串列表的标记
valueAsNumber 以数字表示的代币
valueAsString 表示为字符串的标记

例如,要在 Bucket 定义中使用参数:

TypeScript
const bucket = new Bucket(this, "amzn-s3-demo-bucket", { bucketName: uploadBucketName.valueAsString});
JavaScript
const bucket = new Bucket(this, "amzn-s3-demo-bucket", { bucketName: uploadBucketName.valueAsString});
Python
bucket = Bucket(self, "amzn-s3-demo-bucket", bucket_name=upload_bucket_name.value_as_string)
Java
Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket") .bucketName(uploadBucketName.getValueAsString()) .build();
C#
var bucket = new Bucket(this, "amzn-s3-demo-bucket") { BucketName = uploadBucketName.ValueAsString };
const bucket = new Bucket(this, "amzn-s3-demo-bucket", { bucketName: uploadBucketName.valueAsString});

部署包含参数的 CDK 应用程序

通过 AWS CloudFormation 控制台部署生成的 AWS CloudFormation 模板时,系统将提示您提供每个参数的值。

您也可以使用 CDK 提供参数值 CLI cdk deploy命令,或者通过在 CDK 项目的堆栈文件中指定参数值。

使用提供参数值 cdk deploy

当你使用 CDK 进行部署时 CLI cdk deploy命令,则可以在部署时使用--parameters选项提供参数值。

以下是 cdk deploy 命令结构的示例:

$ cdk deploy stack-logical-id --parameters stack-name:parameter-name=parameter-value

如果 CDK 应用程序包含单个堆栈,则无需在 --parameters 选项中提供堆栈逻辑 ID 参数或 stack-name 值。CDK CLI 将自动查找并提供这些值。以下是为 CDK 应用程序中单个堆栈的 uploadBucketName 参数指定 uploadbucket 值的示例:

$ cdk deploy --parameters uploadBucketName=uploadbucket

通过 cdk 部署为多堆栈应用程序提供参数值

以下是中的 CDK 应用程序示例 TypeScript 它包含两个 CDK 堆栈。每个堆栈都包含一个 Amazon S3 存储桶实例和用于设置 Amazon S3 存储桶名称的参数:

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; // Define the CDK app const app = new cdk.App(); // First stack export class MyFirstStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Set a default parameter name const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', { type: 'String', default: 'myfirststackdefaultbucketname' }); // Define an S3 bucket new s3.Bucket(this, 'MyFirstBucket', { bucketName: bucketNameParam.valueAsString }); } } // Second stack export class MySecondStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Set a default parameter name const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', { type: 'String', default: 'mysecondstackdefaultbucketname' }); // Define an S3 bucket new s3.Bucket(this, 'MySecondBucket', { bucketName: bucketNameParam.valueAsString }); } } // Instantiate the stacks new MyFirstStack(app, 'MyFirstStack', { stackName: 'MyFirstDeployedStack', }); new MySecondStack(app, 'MySecondStack', { stackName: 'MySecondDeployedStack', });

对于包含多个堆栈的 CDK 应用程序,您可以执行以下操作:

  • 使用参数部署一个堆栈:要从多堆栈应用程序部署单个堆栈,请提供堆栈逻辑 ID 作为参数。

    以下是使用 mynewbucketname 作为 bucketNameParam 的参数值部署 MySecondStack 的示例:

    $ cdk deploy MySecondStack --parameters bucketNameParam='mynewbucketname'
  • 部署所有堆栈并为每个堆栈指定参数值:提供 '*' 通配符或 --all 选项,以部署所有堆栈。在单个命令中多次提供 --parameters 选项,以指定每个堆栈的参数值。以下是示例:

    $ cdk deploy '*' --parameters MyFirstDeployedStack:bucketNameParam='mynewfirststackbucketname' --parameters MySecondDeployedStack:bucketNameParam='mynewsecondstackbucketname'
  • 部署所有堆栈并为单个堆栈指定参数值:提供 '*' 通配符或 --all 选项,以部署所有堆栈。然后,在 --parameters 选项中指定要为其定义参数的堆栈。以下是在 CDK 应用程序中部署所有堆栈并为堆栈指定参数值的示例。MySecondDeployedStack AWS CloudFormation 所有其他堆栈都将部署并使用默认参数值:

    $ cdk deploy '*' --parameters MySecondDeployedStack:bucketNameParam='mynewbucketname' $ cdk deploy --all --parameters MySecondDeployedStack:bucketNameParam='mynewbucketname'

使用提供参数值 cdk deploy 适用于带有嵌套堆栈的应用程序

CDK CLI 使用包含嵌套堆栈的应用程序时的行为与多堆栈应用程序类似。主要区别在于,如果要部署所有嵌套堆栈,请使用 '**' 通配符。'*' 通配符会部署所有堆栈,但不会部署嵌套堆栈。'**' 通配符会部署所有堆栈,包括嵌套堆栈。

以下是在为一个嵌套堆栈指定参数值的同时部署嵌套堆栈的示例:

$ cdk deploy '**' --parameters MultiStackCdkApp/SecondStack:bucketNameParam='mysecondstackbucketname'

有关 cdk deploy 命令选项的更多信息,请参阅 cdk deploy

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。