これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CDK スタック合成をカスタマイズする
Cloud AWS Development Kit (AWS CDK) スタック合成をカスタマイズするには、デフォルトのシンセサイザーを変更するか、使用可能な他の組み込みシンセサイザーを使用するか、独自のシンセサイザーを作成します。
AWS CDK には、合成動作をカスタマイズするために使用できる以下の組み込みシンセサイザーが含まれています。
-
DefaultStackSynthesizer– シンセサイザーを指定しない場合、このシンセサイザーは自動的に使用されます。これは、クロスアカウントデプロイと、CDK Pipelines コンストラクトを使用するデプロイをサポートします。そのブートストラップ契約には、既知の名前を持つ既存の Amazon S3 バケット、既知の名前を持つ既存の Amazon ECR リポジトリ、および既知の名前を持つ既存の 5 つの IAM ロールが必要です。デフォルトのブートストラップテンプレートは、これらの要件を満たしています。 -
CliCredentialsStackSynthesizer– このシンセサイザーのブートストラップ契約には、既存の Amazon S3 バケットと既存の Amazon ECR リポジトリが必要です。IAM ロールは必要ありません。デプロイを実行するために、このシンセサイザーは CDK CLI ユーザーのアクセス許可に依存するため、IAM デプロイ認証情報を制限する組織にはお勧めします。このシンセサイザーは、クロスアカウントデプロイや CDK Pipelines をサポートしていません。 -
LegacyStackSynthesizer– このシンセサイザーは、CDK v1 の合成動作をエミュレートします。そのブートストラップ契約には、任意の名前の既存の Amazon S3 バケットが必要であり、アセットの場所は CloudFormation スタックのパラメータとして渡されることが想定されています。このシンセサイザーを使用する場合は、CDK CLI を使用してデプロイを実行する必要があります。
これらの組み込みシンセサイザーのいずれもユースケースに適していない場合は、Construct Hub からシンセサイザーを実装IStackSynthesizerまたは参照するクラスとして独自のシンセサイザー
DefaultStackSynthesizer のカスタマイズ
DefaultStackSynthesizer は AWS CDK のデフォルトのシンセサイザーです。CDK アプリケーションのクロスアカウントデプロイと、CDK を明示的にサポートしていない CI/CD システムからの AWS CDK アプリケーションのデプロイを許可するように設計されていますが、 AWS CodePipeline などの通常の CloudFormation デプロイをサポートしています。このシンセサイザーは、ほとんどのユースケースに最適なオプションです。
DefaultStackSynthesizer のブートストラップ契約
DefaultStackSynthesizer には、以下のブートストラップ契約が必要です。ブートストラップ時に作成する必要があるリソースは以下のとおりです。
| ブートストラップのリソース | 説明 | デフォルトの想定リソース名 | 目的 |
|---|---|---|---|
|
Amazon S3 バケット |
ステージングバケット |
cdk-hnb659fds-assets-<ACCOUNT>-<REGION> |
ファイルアセットを保存します。 |
|
Amazon ECR リポジトリ |
ステージングリポジトリ |
cdk-hnb659fds-container-assets-<ACCOUNT>-<REGION> |
Docker イメージアセットを保存および管理します。 |
|
IAM ロール |
デプロイロール |
cdk-hnb659fds-deploy-role-<ACCOUNT>-<REGION> |
CDK CLI と CodePipeline が他のロールを引き受け、 AWS CloudFormation デプロイを開始することを前提としています。 このロールの信頼ポリシーは、この AWS 環境で AWS CDK を使用してデプロイできるユーザーを制御します。 |
|
IAM ロール |
AWS CloudFormation 実行ロール |
cdk-hnb659fds-cfn-exec-role-<ACCOUNT>-<REGION> |
このロールは、 AWS CloudFormation がデプロイを実行するために使用されます。 このロールのポリシーは、CDK デプロイが実行できるオペレーションを制御します。 |
|
IAM ロール |
ルックアップロール |
cdk-hnb659fds-lookup-role-<ACCOUNT>-<REGION> |
このロールは、CDK CLI が環境コンテキストルックアップを実行する必要がある場合に使用されます。 このロールの信頼ポリシーは、環境内の情報を参照できるユーザーを制御します。 |
|
IAM ロール |
ファイル発行ロール |
cdk-hnb659fds-file-publishing-role-<ACCOUNT>-<REGION> |
このロールは、Amazon S3 ステージングバケットにアセットをアップロードするために使用されます。これはデプロイロールから引き受けられます。 |
|
IAM ロール |
イメージ発行ロール |
cdk-hnb659fds-image-publishing-role-<ACCOUNT>-<REGION> |
このロールは、Docker イメージを Amazon ECR ステージングリポジトリにアップロードするために使用されます。これはデプロイロールから引き受けられます。 |
|
SSM パラメータ |
ブートストラップバージョンのパラメータ |
/cdk-bootstrap/hnb659fds/<version> |
ブートストラップテンプレートのバージョンです。これは、要件を検証するためにブートストラップテンプレートと CDK CLI で使用されます。 |
CDK スタック合成をカスタマイズする 1 つの方法は、DefaultStackSynthesizer を変更することです。Stack インスタンスの synthesizer プロパティを使用して、単一の CDK スタック用にこのシンセサイザーをカスタマイズできます。また、App インスタンスの defaultStackSynthesizer プロパティを使用して、CDK アプリ内のすべてのスタックに対して DefaultStackSynthesizer を変更することもできます。
修飾子の変更
ブートストラップ時に作成されたリソースの名前には修飾子が追加されます。デフォルトでは、この値は hnb659fds です。ブートストラップ時に修飾子を変更する場合は、同じ修飾子を使用するように CDK スタック合成をカスタマイズする必要があります。
修飾子を変更するには、DefaultStackSynthesizer の qualifier プロパティを設定するか、CDK プロジェクトの cdk.json ファイルで修飾子をコンテキストキーとして設定します。
以下は、DefaultStackSynthesizer の qualifier プロパティを設定する場合の例です。
以下は、cdk.json で修飾子をコンテキストキーとして設定する場合の例です。
{ "app": "...", "context": { "@aws-cdk/core:bootstrapQualifier": "MYQUALIFIER" } }
リソース名の変更
DefaultStackSynthesizer の他のすべてのプロパティは、ブートストラップテンプレート内のリソースの名前に関連しています。これらのプロパティについて指定が必要になるのは、ブートストラップテンプレートを変更してリソース名または命名スキームを変更したときのみです。
すべてのプロパティは、特殊なプレースホルダー ${Qualifier}、${AWS::Partition}、${AWS::AccountId}、${AWS::Region} を受け入れます。これらのプレースホルダーは、 qualifierパラメータの値と、スタックの環境の AWS パーティション、アカウント ID、 AWS リージョンの値でそれぞれ置き換えられます。
以下の例は、シンセサイザーをインスタンス化する場合と同じ形で、DefaultStackSynthesizer で最もよく使用されるプロパティとそのデフォルト値を示しています。詳細なリストについては、「」を参照してくださいDefaultStackSynthesizerProps。
CliCredentialsStackSynthesizer の使用
CDK のデプロイ時にアクセス許可を付与するために使用されるセキュリティ認証情報を変更するには、CliCredentialsStackSynthesizer を使用して合成をカスタマイズします。このシンセサイザーは、ブートストラップ中に作成されるデフォルトの AWS リソースと連携して、Amazon S3 バケットや Amazon ECR リポジトリなどのアセットを保存します。ブートストラップ時に CDK によって作成されたデフォルトの IAM ロールを使用する代わりに、デプロイを開始するアクターのセキュリティ認証情報を使用します。したがって、アクターのセキュリティ認証情報には、すべてのデプロイアクションを実行するための有効なアクセス許可が必要です。以下の図は、このシンセサイザーを使用した場合のデプロイプロセスを示したものです。
CliCredentialsStackSynthesizer を使用する場合:
-
デフォルトでは、CloudFormation はアクターのアクセス許可を使用して、ご利用のアカウントで API コールを実行します。したがって、現在の ID には、CloudFormation スタックの AWS リソースに必要な変更を加えるためのアクセス許可と、
CreateStackや などの必要な CloudFormation オペレーションを実行するためのアクセス許可が必要ですUpdateStack。デプロイ機能は、アクターのアクセス許可に制限されます。 -
アセットの発行と CloudFormation のデプロイは、現在の IAM ID を使用して行われます。この ID には、アセットバケットとリポジトリに対する読み取りと書き込みの両方の十分なアクセス許可が必要です。
-
ルックアップは現在の IAM ID を使用して実行され、ルックアップはポリシーの対象となります。
このシンセサイザーを使用する場合、任意の CDK CLI コマンドで --role-arnオプションを使用して指定することで、別の CloudFormation 実行ロールを使用できます。
CliCredentialsStackSynthesizer のブートストラップ契約
CliCredentialsStackSynthesizer には、以下のブートストラップ契約が必要です。ブートストラップ時に作成する必要があるリソースは以下のとおりです。
| ブートストラップのリソース | 説明 | デフォルトの想定リソース名 | 目的 |
|---|---|---|---|
|
Amazon S3 バケット |
ステージングバケット |
cdk-hnb659fds-assets-<ACCOUNT>-<REGION> |
ファイルアセットを保存します。 |
|
Amazon ECR リポジトリ |
ステージングリポジトリ |
cdk-hnb659fds-container-assets-<ACCOUNT>-<REGION> |
Docker イメージアセットを保存および管理します。 |
リソース名の中の文字列 hnb659fds は、修飾子と呼ばれます。デフォルト値に特別な意味はありません。修飾子が異なってさえいれば、1 つの環境内にブートストラップリソースの複数のコピーを持つことができます。複数のコピーを持つことで、同一環境内の異なるアプリケーションのアセットを分離して管理できます。
デフォルトのブートストラップテンプレートをデプロイすることで、CliCredentialsStackSynthesizer のブートストラップ契約を満たすことができます。デフォルトのブートストラップテンプレートは IAM ロールを作成しますが、このシンセサイザーはそれらを使用しません。ブートストラップテンプレートをカスタマイズして IAM ロールを削除することもできます。
CliCredentialsStackSynthesizer の変更
ブートストラップ時に修飾子またはデフォルトのブートストラップリソース名を変更する場合は、同じ名前を使用するようにシンセサイザーを変更する必要があります。シンセサイザーは、1 つのスタックまたはアプリ内のすべてのスタックに対して変更できます。以下に例を示します。
以下の例は、CliCredentialsStackSynthesizer で最もよく使用されるプロパティとそのデフォルト値を示しています。詳細なリストについては、「」を参照してくださいCliCredentialsStackSynthesizerProps。
LegacyStackSynthesizer の使用
LegacyStackSynthesizer は、CDK v1 デプロイの動作をエミュレートします。アクセス許可の確立には、デプロイを実行するアクターのセキュリティ認証情報が使用されます。ファイルアセットは、 という名前の AWS CloudFormation スタックを使用して作成する必要があるバケットにアップロードされますCDKToolkit。CDK CLI は、Docker イメージアセットを保存する aws-cdk/assets という名前のアンマネージド Amazon ECR リポジトリを作成します。このリポジトリのクリーンアップおよび管理はユーザーの責任です。を使用して合成されたスタックは、CDK CLI を使用してのみデプロイLegacyStackSynthesizerできます。
CDK v1 から CDK v2 に移行する際に、環境の再ブートストラップができない場合は、LegacyStackSynthesizer を使用できます。新しいプロジェクトでは、 を使用しないことをお勧めしますLegacyStackSynthesizer。
LegacyStackSynthesizer のブートストラップ契約
LegacyStackSynthesizer には、以下のブートストラップ契約が必要です。ブートストラップ時に作成する必要があるリソースは以下のとおりです。
| ブートストラップのリソース | 説明 | デフォルトの想定リソース名 | 目的 |
|---|---|---|---|
|
Amazon S3 バケット |
ステージングバケット |
cdk-hnb659fds-assets-<ACCOUNT>-<REGION> |
ファイルアセットを保存します。 |
|
CloudFormation 出力 |
バケット名出力 |
スタック – 出力名 – |
ステージングバケットの名前を記述する CloudFormation 出力 |
LegacyStackSynthesizer は、固定名を持つ Amazon S3 バケットが存在することを想定していません。代わりに、合成された CloudFormation テンプレートには、ファイルアセットごとに 3 つの CloudFormation パラメータが含まれます。これらのパラメータは、各ファイルアセットの Amazon S3 バケット名、Amazon S3 オブジェクトキー、アーティファクトハッシュを保存します。
Docker イメージのアセットは、aws-cdk/assets という名前の Amazon ECR リポジトリに公開されます。この名前はアセットごとに変更できます。リポジトリが存在しない場合、リポジトリが作成されます。
CloudFormation スタックは、デフォルト名の CDKToolkit で存在している必要があります。このスタックには、ステージングバケットを参照する BucketName という名前の CloudFormation エクスポートが必要です。
デフォルトのブートストラップテンプレートは、LegacyStackSynthesizer のブートストラップ契約を満たします。ただし、Amazon S3 バケットは、ブートストラップテンプレートのブートストラップリソースからのみ使用されます。ブートストラップテンプレートをカスタマイズすると、Amazon ECR、IAM、および SSM のブートストラップリソースを削除できます。
LegacyStackSynthesizer のデプロイの手順
このシンセサイザーを使用すると、デプロイ時に以下のプロセスが実行されます。
-
CDK CLI は、環境内で
CDKToolkitという名前の CloudFormation スタックを検索します。このスタックから、CDK CLI はBucketNameという名前の CloudFormation 出力を読み取ります。cdk deployで--toolkit-stack-nameオプションを使用することで、別のスタック名を指定できます。 -
デプロイのアクセス許可の確立には、デプロイを開始するアクターのセキュリティ認証情報が使用されます。したがって、アクターはすべてのデプロイアクションを実行するために十分なアクセス許可が必要です。これには、Amazon S3 ステージングバケットへの読み取りと書き込み、Amazon ECR リポジトリへの作成と書き込み、 AWS CloudFormation デプロイの開始とモニタリング、デプロイに必要な API コールの実行が含まれます。
-
必要に応じて、アクセス許可が有効であれば、Amazon S3 ステージングバケットにファイルアセットが発行されます。
-
必要に応じて、かつアクセス許可が有効である場合、Docker イメージアセットは、アセットの
repositoryNameプロパティで指定されたリポジトリに発行されます。リポジトリ名を指定'aws-cdk/assets'しない場合、デフォルト値は です。 -
アクセス許可が有効な場合、 AWS CloudFormation デプロイが実行されます。Amazon S3 ステージングバケットとキーの場所は、CloudFormation パラメータとして渡されます。