CloudFormation パラメータを使用して CloudFormation 値を取得する - AWS Cloud Development Kit (AWS CDK) v2

これは AWS CDK v2 デベロッパーガイドです。古い CDKv1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CloudFormation パラメータを使用して CloudFormation 値を取得する

AWS Cloud Development Kit (AWS CDK) アプリケーション内の AWS CloudFormation パラメータを使用して、デプロイ時に合成された CloudFormationテンプレートにカスタム値を入力します。

概要については、「パラメータと AWS CDK」を参照してください。

CDK アプリでパラメータを定義する

CfnParameter クラスを使用してパラメータを定義します。ほとんどのパラメータには少なくとも 1 つのタイプと説明を指定する必要がありますが、どちらも技術的にはオプションです。説明は、ユーザーが AWS CloudFormation コンソールにパラメータの値を入力するように求められたときに表示されます。使用可能なタイプの詳細については、「タイプhttps://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#parameters-section-structure-properties-type」を参照してください。

注記

パラメータは任意のスコープで定義できます。ただし、コードのリファクタリング時に論理 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, "myBucket", { bucketName: uploadBucketName.valueAsString});
JavaScript
const bucket = new Bucket(this, "myBucket", { bucketName: uploadBucketName.valueAsString});
Python
bucket = Bucket(self, "myBucket", bucket_name=upload_bucket_name.value_as_string)
Java
Bucket bucket = Bucket.Builder.create(this, "myBucket") .bucketName(uploadBucketName.getValueAsString()) .build();
C#
var bucket = new Bucket(this, "myBucket") { 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 つのスタックが含まれている場合は、スタックの論理 ID 引数や --parametersオプションstack-nameの値を指定する必要はありません。CDK CLI はこれらの値を自動的に検索して提供します。以下は、CDKアプリケーション内の単一スタックの 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 を引数として指定します。

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

    $ 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に でパラメータ値を指定する

ネストされたスタックを含むアプリケーションを操作するときCDKCLIの動作は、マルチスタックアプリケーションと似ています。主な違いは、ネストされたすべてのスタックをデプロイする場合は、 '**' ワイルドカードを使用することです。'*' ワイルドカードはすべてのスタックをデプロイしますが、ネストされたスタックはデプロイしません。'**' ワイルドカードは、ネストされたスタックを含むすべてのスタックをデプロイします。

以下は、ネストされたスタックのパラメータ値を指定しながら、ネストされたスタックをデプロイする例です。

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

cdk deploy コマンドオプションの詳細については、「」を参照してくださいcdk deploy