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 クラスを使用してパラメータを定義します。ほとんどのパラメータに少なくとも 1 つの型と説明を指定する必要がありますが、どちらも技術的には任意です。説明は、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
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
JavaScript
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
Python
Property kind of value
value トークン class instance
value_as_list The token represented as a string list
value_as_number The token represented as a number
value_as_string The token represented as a string
Java
Property kind of value
GetValue トークン class instance
getValueAsList() The token represented as a string list
getValueAsNumber() The token represented as a number
getValueAsString() The token represented as a string
C#
Property kind of 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 の定義にパラメータを使用するには、以下のように行います。

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 アプリケーションに 1 つのスタックが含まれている場合、--parameters オプションにスタックの論理 ID 引数または stack-name の値を指定する必要はありません。CDK CLI がこれらの値を自動的に検出して指定します。以下は、CDK アプリケーションの 1 つのスタックの uploadBucketName パラメータに uploadbucket の値を指定する場合の例です。

$ cdk deploy --parameters uploadBucketName=uploadbucket

マルチスタックアプリケーションの CDK デプロイでパラメータ値を指定する

以下は、2 つの 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 アプリケーションでは、以下を実行できます。

  • パラメータを使用して 1 つのスタックをデプロイする – マルチスタックアプリケーションから 1 つのスタックをデプロイするには、スタック論理 ID を引数として指定します。

    以下は、bucketNameParam のパラメータ値 mynewbucketname として MySecondStack をデプロイする場合の例です。

    $ cdk deploy MySecondStack --parameters bucketNameParam='mynewbucketname'
  • すべてのスタックをデプロイし、各スタックのパラメータ値を指定する'*' のワイルドカードまたは --all のオプションを指定して、すべてのスタックをデプロイします。--parameters オプションを 1 つのコマンドで複数回指定して、各スタックのパラメータ値を指定します。以下に例を示します。

    $ cdk deploy '*' --parameters MyFirstDeployedStack:bucketNameParam='mynewfirststackbucketname' --parameters MySecondDeployedStack:bucketNameParam='mynewsecondstackbucketname'
  • すべてのスタックをデプロイし、1 つのスタックのパラメータ値を指定する'*' のワイルドカードまたは --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」を参照してください。