使用 CloudFormation 參數取得 CloudFormation 值 - AWS Cloud Development Kit (AWS CDK) v2

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 CloudFormation 參數取得 CloudFormation 值

使用 AWS Cloud Development Kit (AWS CDK) 應用程式內的 AWS CloudFormation 參數,在部署時將自訂值輸入您的合成 CloudFormation範本。

如需說明,請參閱「參數和 AWS CDK」。

在CDK應用程式中定義參數

使用 CfnParameter類別定義 參數。您至少要指定大多數參數的類型和描述,雖然兩者在技術上都是選用的。當提示使用者在 AWS CloudFormation 主控台中輸入參數的值時,就會顯示描述。如需可用類型的詳細資訊,請參閱類型

注意

您可以在任何範圍內定義參數。不過,我們建議在堆疊層級定義參數,以便在重新建構程式碼時不會變更邏輯 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" });

使用參數

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 表示為字串的權杖

例如,若要在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 };

部署包含參數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 作為引數。

    以下是MySecondStack使用 部署 mynewbucketname作為 參數值的範例bucketNameParam

    $ 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