這是 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 主控台中輸入參數的值時,即會顯示描述。如需可用類型的詳細資訊,請參閱類型。
注意
您可以在任何範圍內定義參數。不過,我們建議在堆疊層級定義參數,以便在重構程式碼時不會變更其邏輯 ID。
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
類別的執行個體,或在字串、字串清單或數字編碼中擷取。您的選擇取決於您要使用 參數的類別或方法所需的值類型。
Property | kind of value |
---|---|
value |
權杖 class instance |
valueAsList |
The token represented as a string list |
valueAsNumber |
The token represented as a number |
valueAsString |
The token represented as a string |
例如,若要在Bucket
定義中使用 參數:
const bucket = new Bucket(this, "amzn-s3-demo-bucket",
{ bucketName: uploadBucketName.valueAsString});
部署包含參數的 CDK 應用程式
當您透過 AWS CloudFormation 主控台部署產生的 AWS CloudFormation 範本時,系統會提示您提供每個參數的值。
您也可以使用 CDK CLIcdk deploy
命令提供參數值,或在 CDK 專案的堆疊檔案中指定參數值。
使用 提供參數值 cdk deploy
當您使用 CDK CLIcdk deploy
命令部署 時,您可以在部署時提供 參數值與 --parameters
選項。
以下是 cdk deploy
命令結構的範例:
$
cdk deploy
stack-logical-id
--parametersstack-name
:parameter-name
=parameter-value
如果您的 CDK 應用程式包含單一堆疊,您不需要在 --parameters
選項中提供堆疊邏輯 ID 引數或
值。CDK CLI會自動尋找並提供這些值。以下是在我們的 CDK 應用程式中指定單一堆疊stack-name
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
--parametersbucketNameParam
='mynewbucketname'
-
部署所有堆疊並為每個堆疊指定參數值 – 提供
'*'
萬用字元或部署所有堆疊--all
的選項。在單一命令中多次提供--parameters
選項,以指定每個堆疊的參數值。以下是範例:$
cdk deploy
'*'
--parametersMyFirstDeployedStack
:bucketNameParam
='mynewfirststackbucketname'
--parametersMySecondDeployedStack
:bucketNameParam
='mynewsecondstackbucketname'
-
部署所有堆疊並指定單一堆疊的參數值 – 提供
'*'
萬用字元或部署所有堆疊--all
的選項。然後,在--parameters
選項中指定要定義 參數的堆疊。以下是在 CDK 應用程式中部署所有堆疊並指定MySecondDeployedStack
AWS CloudFormation 堆疊參數值的範例。所有其他堆疊將部署並使用預設參數值:$
cdk deploy
'*'
--parametersMySecondDeployedStack
:bucketNameParam
='mynewbucketname'
$
cdk deploy
--all
--parametersMySecondDeployedStack
:bucketNameParam
='mynewbucketname'
cdk deploy 為具有巢狀堆疊的應用程式提供參數值
使用包含巢狀堆疊的應用程式時的 CDK CLI行為類似於多堆疊應用程式。主要差別是,如果您想要部署所有巢狀堆疊,請使用'**'
萬用字元。'*'
萬用字元會部署所有堆疊,但不會部署巢狀堆疊。'**'
萬用字元會部署所有堆疊,包括巢狀堆疊。
以下是部署巢狀堆疊,同時指定一個巢狀堆疊的參數值的範例:
$
cdk deploy
'**'
--parametersMultiStackCdkApp/SecondStack
:bucketNameParam
='mysecondstackbucketname'
如需cdk deploy
命令選項的詳細資訊,請參閱 cdk deploy。