這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 CloudFormation 參數取得 CloudFormation 值
在 AWS Cloud Development Kit (CDK) 應用程式中使用 CloudFormation 參數,在部署時將自訂值輸入合成的 CloudFormation 範本。 AWS AWS
如需簡介,請參閱參數和 AWS CDK。
在 CDK 應用程式中定義參數
使用 CfnParameter
類別來定義參數。您至少要指定一個類型和大多數參數的描述,雖然兩者在技術上都是選用的。當系統提示使用者在 AWS CloudFormation 主控台中輸入參數的值時,就會顯示描述。如需可用類型的詳細資訊,請參閱類型。
注意
您可以在任何範圍內定義參數。不過,我們建議在堆疊層級定義參數,以便在重構程式碼時不會變更其邏輯 ID。
使用參數
CfnParameter
執行個體會透過權杖向 CDK 應用程式公開其值。如同所有字符,參數的字符會在合成時解析。但是,它會解析為 AWS CloudFormation 範本中定義的參數參考 (將在部署時間解析),而不是具體值。
您可以將字符擷取為 Token
類別的執行個體,或在字串、字串清單或數字編碼中擷取。您的選擇取決於您要使用 參數的類別或方法所需的值類型。
例如,若要在Bucket
定義中使用參數:
部署包含參數的 CDK 應用程式
當您透過 AWS CloudFormation 主控台部署 generated 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 部署的參數值
以下是 TypeScript 中包含兩個 CDK 堆疊的範例 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 部署。