パラメータ - AWS Cloud Development Kit (AWS CDK) v2

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

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

パラメータ

パラメータは、デプロイ時に提供されるカスタム値です。パラメータは の機能です AWS CloudFormation。は AWS Cloud Development Kit (AWS CDK) AWS CloudFormation テンプレートを合成するため、デプロイ時間パラメータもサポートしています。

パラメータについて

を使用して AWS CDKパラメータを定義し、作成したコンストラクトのプロパティで使用できます。パラメータを含むスタックをデプロイすることもできます。

AWS CDK Toolkit を使用して AWS CloudFormation テンプレートをデプロイする場合は、コマンドラインにパラメータ値を指定します。 AWS CloudFormation コンソールからテンプレートをデプロイすると、パラメータ値の入力を求められます。

一般に、 で AWS CloudFormation パラメータを使用しないことをお勧めします AWS CDK。アプリケーションに AWS CDK 値を渡す通常の方法は、コンテキスト値と環境変数です。合成時に使用できないため、パラメータ値は CDK アプリのフロー制御やその他の目的に簡単に使用することはできません。

注記

パラメータを使用してフローを制御するには、 CfnConditionコンストラクトを使用できますが、これはネイティブifステートメントに比べて扱いにくくなります。

パラメータを使用するには、記述するコードがデプロイ時および合成時にどのように動作するかに注意する必要があります。これにより、多くの場合、ほとんど利点がないので、 AWS CDK アプリケーションを理解し、理由を説明することが難しくなります。

一般的に、CDK アプリは必要な情報を明確に定義された方法で受け入れ、それを CDK アプリでコンストラクトを直接宣言する方がよいでしょう。理想的な AWS CDK生成 AWS CloudFormation テンプレートは具体的であり、デプロイ時に指定される値は残りません。

ただし、 AWS CloudFormation パラメータが一意に適しているユースケースがあります。例えば、インフラストラクチャを定義してデプロイするチームが別々の場合は、パラメータを使用して、生成されたテンプレートをより広く有用にすることができます。また、 は AWS CloudFormation パラメータ AWS CDK をサポートしているため、 AWS CloudFormation テンプレートを使用する AWS サービス (Service Catalog など) AWS CDK で を使用できます。これらの AWS サービスは、パラメータを使用して、デプロイされるテンプレートを設定します。

パラメータの定義

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 インスタンスは、トークン を介してその値を AWS 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 };

パラメータを使用したデプロイ

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に でパラメータ値を提供する

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

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

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

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