AWS CDK ブートストラップをカスタマイズする - AWS Cloud Development Kit (AWS CDK) v2

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

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

AWS CDK ブートストラップをカスタマイズする

コマンド AWS CDK ラインインターフェイス (AWS CDK CLI) を使用するか、 AWS Cloud Development Kit (AWS CDK) ブートストラップテンプレートを変更してデプロイすることで、 AWS CloudFormation ブートストラップをカスタマイズできます。

ブートストラップの概要については、「」を参照してくださいAWS CDK ブートストラップ

を使用してブートストラップCDKCLIをカスタマイズする

以下は、 を使用してブートストラップをカスタマイズする方法の例ですCDKCLI。すべての cdk bootstrap オプションのリストについては、「cdk bootstrap」を参照してください。

Amazon S3 バケットの名前を上書きする

--bootstrap-bucket-name オプションを使用して、デフォルトの Amazon S3 バケット名を上書きします。これには、テンプレート合成の変更が必要になる場合があります。詳細については、「CDK スタック合成をカスタマイズする」を参照してください。

Amazon S3 バケットのサーバー側の暗号化キーを変更する

デフォルトでは、ブートストラップスタックの Amazon S3 バケットは、サーバー側の暗号化に AWS マネージドキーを使用するように設定されています。既存のカスタマーマネージドキーを使用するには、 --bootstrap-kms-key-idオプションを使用し、使用する AWS Key Management Service (AWS KMS) キーの値を指定します。暗号化キーをより詳細に制御したい場合は、カスタマーマネージドキーを使用する--bootstrap-customer-keyように を指定します。

が引き受けるデプロイロールに マネージドポリシーをアタッチする AWS CloudFormation

デフォルトでは、スタックは AdministratorAccessポリシーを使用して完全な管理者アクセス許可でデプロイされます。独自の管理ポリシーを使用するには、 --cloudformation-execution-policiesオプションを使用し、デプロイロールにアタッチする管理ポリシーARNsの を指定します。

複数のポリシーを指定するには、カンマで区切られた単一の文字列を渡します。

$ cdk bootstrap --cloudformation-execution-policies "arn:aws:iam::aws:policy/AWSLambda_FullAccess,arn:aws:iam::aws:policy/AWSCodeDeployFullAccess"

デプロイの失敗を回避するには、指定したポリシーが、ブートストラップされる環境に実行するデプロイに十分であることを確認してください。

ブートストラップスタック内のリソースの名前に追加される修飾子を変更する

デフォルトでは、 hnb659fds 修飾子はブートストラップスタック内のリソースの物理 ID に追加されます。この値を変更するには、 --qualifierオプションを使用します。

この変更は、名前の競合を避けるために、同じ環境で複数のブートストラップスタックをプロビジョニングする場合に便利です。

修飾子の変更は、それCDK自体の自動テスト間の名前分離を目的としています。 CloudFormation 実行ロールに付与されたIAMアクセス許可を非常に正確に絞り込むことができない限り、1 つのアカウントに 2 つの異なるブートストラップスタックを配置しても、アクセス許可分離のメリットはありません。したがって、通常、この値を変更する必要はありません。

修飾子を変更する場合、CDKアプリケーションは変更された値をスタックシンセサイザーに渡す必要があります。詳細については、「CDK スタック合成をカスタマイズする」を参照してください。

ブートストラップスタックにタグを追加する

の形式の --tagsオプションKEY=VALUEを使用して、ブートストラップスタックに CloudFormation タグを追加します。

ブートストラップされる環境にデプロイ AWS アカウント できる追加の を指定する

--trust オプションを使用して、ブートストラップされる環境にデプロイ AWS アカウント できる追加の を指定します。デフォルトでは、ブートストラップを実行しているアカウントは常に信頼されます。

このオプションは、別の環境CDKPipelineからデプロイする環境をブートストラップする場合に便利です。

このオプションを使用する場合は、 も指定する必要があります--cloudformation-execution-policies

既存のブートストラップスタックに信頼されたアカウントを追加するには、以前に指定したアカウントを含め、信頼するすべてのアカウントを指定する必要があります。信頼する新しいアカウントのみを指定すると、以前に信頼されたアカウントは削除されます。

以下は、2 つのアカウントを信頼する例です。

$ cdk bootstrap aws://123456789012/us-west-2 --trust 234567890123 --trust 987654321098 --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess ⏳ Bootstrapping environment aws://123456789012/us-west-2... Trusted accounts for deployment: 234567890123, 987654321098 Trusted accounts for lookup: (none) Execution policies: arn:aws:iam::aws:policy/AdministratorAccess CDKToolkit: creating CloudFormation changeset... ✅ Environment aws://123456789012/us-west-2 bootstrapped.
ブートストラップされる環境内の情報を検索 AWS アカウント できる追加の を指定する

--trust-for-lookup オプションを使用して、ブートストラップする環境からコンテキスト情報を検索 AWS アカウント できる を指定します。このオプションは、実際にはそれらのスタックを直接デプロイするアクセス許可を付与せずに、環境にデプロイされるスタックを合成するアクセス許可をアカウントに付与する場合に便利です。

ブートストラップスタックの終了保護を有効にする

ブートストラップスタックが削除されると、環境内で最初にプロビジョニングされた AWS リソースも削除されます。環境がブートストラップされたら、意図的にブートストラップスタックを削除して再作成しないことをお勧めします。代わりに、 cdk bootstrap コマンドを再度実行して、ブートストラップスタックを新しいバージョンに更新してみてください。

--termination-protection オプションを使用して、ブートストラップスタックの終了保護設定を管理します。終了保護を有効にすると、ブートストラップスタックとそのリソースが誤って削除されるのを防ぐことができます。これは、ブートストラップスタックを誤って削除した場合CDKPipelines、一般的な復旧オプションがないため、 を使用する場合に特に重要です。

終了保護を有効にした後、 AWS CLI または AWS CloudFormation コンソールを使用して検証できます。

終了保護を有効にするには
  1. 次のコマンドを実行して、新規または既存のブートストラップスタックで終了保護を有効にします。

    $ cdk bootstrap --termination-protection
  2. AWS CLI または CloudFormation コンソールを使用して確認します。以下に示しているのは、 AWS CLIを使用した例です。ブートストラップスタック名を変更した場合は、 をスタック名CDKToolkitに置き換えます。

    $ aws cloudformation describe-stacks --stack-name CDKToolkit --query "Stacks[0].EnableTerminationProtection" true

デフォルトのブートストラップテンプレートを変更する

CDK CLI が提供するよりも多くのカスタマイズが必要な場合は、必要に応じてブートストラップテンプレートを変更できます。次に、テンプレートをデプロイして環境をブートストラップします。

デフォルトのブートストラップテンプレートを変更してデプロイするには
  1. --show-template オプションを使用してデフォルトのブートストラップテンプレートを取得します。デフォルトでは、 CDKCLIはターミナルウィンドウにテンプレートを出力します。CDK CLI コマンドを変更して、テンプレートをローカルマシンに保存できます。以下に例を示します。

    $ cdk bootstrap --show-template > my-bootstrap-template.yaml
  2. 必要に応じてブートストラップテンプレートを変更します。変更を加える場合は、ブートストラップテンプレート契約に従う必要があります。ブートストラップテンプレート契約の詳細については、「」を参照してくださいブートストラップ契約に従う

    カスタマイズが、後でデフォルトテンプレートcdk bootstrapを使用して実行されているユーザーによって誤って上書きされないようにするには、BootstrapVariantテンプレートパラメータのデフォルト値を変更します。CDK CLI では、現在デプロイされているテンプレートと同じかそれ以上のバージョンBootstrapVariantを持つテンプレートでのみ、ブートストラップスタックの上書きが許可されます。

  3. 任意のデプロイ方法を使用して、変更されたテンプレートを AWS CloudFormation デプロイします。以下は、 CDK を使用する例ですCLI。

    $ cdk bootstrap --template my-bootstrap-template.yaml

ブートストラップ契約に従う

CDK アプリを適切にデプロイするには、合成中に生成された CloudFormation テンプレートで、ブートストラップ中に作成されたリソースを正しく指定する必要があります。これらのリソースは、一般的にブートストラップリソース と呼ばれます。ブートストラップは、デプロイの実行とアプリケーションアセットの管理 AWS CDK に が使用するリソースを AWS 環境に作成します。合成は、アプリケーション内の各CDKスタックから CloudFormation テンプレートを生成します。これらのテンプレートは、アプリケーションからプロビジョニングされる AWS リソースを定義するだけではありません。また、デプロイ中に使用するブートストラップリソースも指定します。

合成中、 は AWS 環境がどのようにブートストラップされたかを明確には認識CDKCLIしません。代わりに、 は設定したシンセサイザーに基づいて CloudFormation テンプレートCDKCLIを生成します。したがって、ブートストラップをカスタマイズするときは、合成をカスタマイズする必要がある場合があります。合成をカスタマイズする手順については、「」を参照してくださいCDK スタック合成をカスタマイズする。目的は、合成された CloudFormation テンプレートがブートストラップされた環境と互換性があることを確認することです。この互換性はブートストラップ契約 と呼ばれます。

スタック合成をカスタマイズする最も簡単な方法は、Stackインスタンスの DefaultStackSynthesizer クラスを変更することです。このクラスで提供できるもの以外のカスタマイズが必要な場合は、 を実装するクラスとして独自のシンセサイザーを記述できます IStackSynthesizer (おそらく から取得)DefaultStackSynthesizer

ブートストラップをカスタマイズするときは、ブートストラップテンプレート契約に従って との互換性を維持しますDefaultStackSynthesizer。ブートストラップテンプレート契約を超えてブートストラップを変更する場合は、独自のシンセサイザーを作成する必要があります。

バージョニング

ブートストラップテンプレートには、よく知られている名前とテンプレートのバージョンを反映する出力を持つ Amazon EC2 Systems Manager (SSM) パラメータを作成するためのリソースが含まれている必要があります。

Resources: CdkBootstrapVersion: Type: AWS::SSM::Parameter Properties: Type: String Name: Fn::Sub: '/cdk-bootstrap/${Qualifier}/version' Value: 4 Outputs: BootstrapVersion: Value: Fn::GetAtt: [CdkBootstrapVersion, Value]

ロール

DefaultStackSynthesizer には、5 つの異なる目的で 5 つのIAMロールが必要です。デフォルトのロールを使用していない場合は、 DefaultStackSynthesizer オブジェクトARNs内でIAMロールを指定する必要があります。ロールは次のとおりです。

  • デプロイロールは、 CDKCLIおよび によって引き受け AWS CodePipeline られ、環境にデプロイされます。そのAssumeRolePolicyコントロールは、環境にデプロイできるユーザーを制御します。テンプレートには、このロールに必要なアクセス許可が表示されます。

  • ルックアップロールは、環境でコンテキストルックアップを実行するCDKCLIために によって引き受けられます。そのAssumeRolePolicyコントロールは、環境にデプロイできるユーザーを制御します。このロールに必要なアクセス許可は、 テンプレートで確認できます。

  • ファイル発行ロールイメージ発行ロールは、 CDKCLIおよび AWS CodeBuild プロジェクトによって引き受けられ、アセットを環境に発行します。これらは、それぞれ Amazon S3 バケットと Amazon ECRリポジトリへの書き込みに使用されます。これらのロールには、これらのリソースへの書き込みアクセスが必要です。

  • AWS CloudFormation 実行ロールは に渡 AWS CloudFormation され、実際のデプロイを実行します。そのアクセス許可は、デプロイが実行されるアクセス許可です。アクセス許可は、管理ポリシー を一覧表示するパラメータとしてスタックに渡されますARNs。

出力

CDK CLI では、ブートストラップスタックに次の CloudFormation 出力が存在する必要があります。

  • BucketName – ファイルアセットバケットの名前。

  • BucketDomainName – ドメイン名形式のファイルアセットバケット。

  • BootstrapVersion – ブートストラップスタックの現在のバージョン。

テンプレート履歴

ブートストラップテンプレートはバージョニングされ、それ AWS CDK 自体とともに時間の経過とともに進化します。独自のブートストラップテンプレートを指定する場合は、正規のデフォルトテンプレートで最新の状態を維持します。テンプレートが引き続きすべてのCDK機能で動作するようにする必要があります。詳細については、「ブートストラップテンプレートのバージョン履歴」を参照してください。