これは AWS CDK v2 デベロッパーガイドです。古い CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
で使用する環境をブートストラップする AWS CDK
AWS 環境をブートストラップして、 AWS Cloud Development Kit (AWS CDK) スタックデプロイの準備をします。
-
環境の概要については、「」を参照してください環境。
-
ブートストラップの概要については、「」を参照してくださいブートストラッピング。
トピック
環境をブートストラップする方法
AWS CDK コマンドラインインターフェイス (AWS CDK CLI) または任意の AWS CloudFormation デプロイツールを使用して、環境をブートストラップできます。
CDK を使用するCLI
CDK CLI cdk bootstrap
コマンドを使用して環境をブートストラップできます。これは、ブートストラップに大幅な変更が必要ない場合は推奨される方法です。
- 任意の作業ディレクトリからのブートストラップ
-
作業ディレクトリからブートストラップするには、ブートストラップする環境をコマンドライン引数として指定します。以下に例を示します。
$
cdk bootstrap
aws://123456789012/us-east-1
引数を指定する場合、
aws://
プレフィックスはオプションです。以下は有効です。$
cdk bootstrap
123456789012/us-east-1
複数の環境を同時にブートストラップするには、複数の引数を指定します。
$
cdk bootstrap
aws://123456789012/us-east-1 aws://123456789012/us-east-2
- CDK プロジェクトの親ディレクトリからのブートストラップ
-
cdk.json
ファイルを含む CDK プロジェクトの親ディレクトリcdk bootstrap
から を実行できます。引数として環境を指定しない場合、CDK CLIはconfig
およびcredentials
ファイルなどのデフォルトのソースから環境情報、または CDK スタックに指定された環境情報を取得します。CDK プロジェクトの親ディレクトリからブートストラップする場合、コマンドライン引数から提供される環境が他のソースよりも優先されます。
config
およびcredentials
ファイルで指定されている環境をブートストラップするには、--profile
オプションを使用します。$
cdk bootstrap --profile
prod
cdk bootstrap
コマンドとサポートされているオプションの詳細については、「」を参照してくださいcdk bootstrap。
任意の AWS CloudFormation ツールを使用する
ブートストラップテンプレートcdk bootstrap --show-template
コマンドを使用してテンプレートを取得することもできます。次に、任意の AWS CloudFormation ツールを使用してテンプレートを環境にデプロイします。
この方法では、 AWS CloudFormation StackSets または を使用できます AWS Control Tower。 AWS CloudFormation コンソールまたは AWS Command Line Interface () を使用することもできますAWS CLI。テンプレートは、デプロイする前に変更できます。この方法は、より柔軟で大規模なデプロイに適しています。
--show-template
オプションを使用してブートストラップテンプレートを取得してローカルマシンに保存する例を次に示します。
CDK を使用してこのテンプレートをデプロイするにはCLI、以下を実行します。
$
cdk bootstrap --template
bootstrap-template.yaml
を使用してテンプレート AWS CLI をデプロイする例を次に示します。
を使用して複数の環境 CloudFormation StackSets をブートストラップする方法については、AWS クラウドオペレーションと移行ブログのAWS CDK 「 AWS アカウント を使用するための複数のブートストラップ CloudFormation StackSets
環境をブートストラップするタイミング
環境にデプロイする前に、各環境をブートストラップする必要があります。ブートストラップされていない環境に CDK スタックをデプロイしようとすると、次のようなエラーが表示されます。
$
cdk deploy
✨ Synthesis time: 2.02s ❌ Deployment failed: Error: BootstrapExampleStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)
環境を複数回ブートストラップしても問題ありません。環境がすでにブートストラップされている場合、必要に応じてブートストラップスタックがアップグレードされます。そうしないと、何も起こりません。
ブートストラップスタックを更新する
CDK チームは定期的にブートストラップテンプレートを新しいバージョンに更新します。この場合、ブートストラップスタックを更新することをお勧めします。ブートストラッププロセスをカスタマイズしていない場合は、最初に環境をブートストラップするために実行したのと同じ手順に従って、ブートストラップスタックを更新できます。詳細については、「ブートストラップテンプレートのバージョン履歴」を参照してください。
ブートストラップをカスタマイズする
デフォルトのブートストラップテンプレートがニーズに合わない場合は、次の方法で環境へのリソースのブートストラップをカスタマイズできます。
-
cdk bootstrap
コマンドでコマンドラインオプションを使用する – この方法は、コマンドラインオプションでサポートされる小さな特定の変更を行うのに最適です。 -
デフォルトのブートストラップテンプレートを変更してデプロイする – この方法は、複雑な変更を行う場合や、ブートストラップ中にプロビジョニングされたリソースの設定を完全に制御したい場合に最適です。
ブートストラップのカスタマイズの詳細については、「」を参照してくださいAWS CDK ブートストラップをカスタマイズする。
CDK パイプラインによるブートストラップ
CDK Pipelines を使用して別のアカウントの環境にデプロイしている場合、次のようなメッセージが表示されます。
Policy contains a statement with one or more invalid principals
このエラーメッセージは、適切な IAM ロールが他の環境に存在しないことを意味します。最も可能性の高い原因は、環境がブートストラップされていないことです。環境をブートストラップして、もう一度試してください。
ブートストラップスタックの削除からの保護
ブートストラップスタックが削除されると、CDK デプロイをサポートするために環境に最初にプロビジョニングされた AWS リソースも削除されます。これにより、パイプラインは動作しなくなります。この場合、復旧のための一般的な解決策はありません。
環境がブートストラップされたら、環境のブートストラップスタックを削除して再作成しないでください。代わりに、 cdk bootstrap
コマンドを再度実行して、ブートストラップスタックを新しいバージョンに更新してみてください。
ブートストラップスタックが誤って削除されないように、終了保護を有効にするには、 cdk bootstrap
コマンドで --termination-protection
オプションを指定することをお勧めします。新規または既存のブートストラップスタックで終了保護を有効にできます。終了保護を有効にする手順については、「ブートストラップスタック の終了保護を有効にする」を参照してください。
ブートストラップテンプレートのバージョン履歴
ブートストラップテンプレートはバージョニングされ、それ AWS CDK 自体とともに時間の経過とともに進化します。独自のブートストラップテンプレートを指定する場合は、正規のデフォルトテンプレートで最新の状態を維持します。テンプレートが引き続きすべての CDK 機能で動作するようにしたい。
注記
以前のバージョンのブートストラップテンプレートでは、デフォルトでブートストラップされた AWS KMS key 各環境に が作成されていました。KMS キーの料金が発生しないようにするには、 を使用してこれらの環境を再起動します--no-bootstrap-customer-key
。現在のデフォルトは KMS キーではないため、これらの料金を回避できます。
このセクションには、各バージョンで行われた変更のリストが含まれています。
[テンプレートのバージョン] | AWS CDK バージョン | 変更 |
---|---|---|
1 | 1.40.0 | バケット、キー、リポジトリ、ロールを含むテンプレートの初期バージョン。 |
2 | 1.45.0 | アセット発行ロールを個別のファイル発行ロールとイメージ発行ロールに分割します。 |
3 | 1.46.0 | アセットコンシューマーに復号化アクセス許可を追加できるようにFileAssetKeyArn エクスポートを追加します。 |
4 | 1.61.0 | AWS KMS アクセス許可が Amazon S3 経由で暗黙的に使用され、 が不要になりましたFileAsetKeyArn 。SSM CdkBootstrapVersion パラメータを追加して、スタック名を知らずにブートストラップスタックバージョンを検証できるようにします。 |
5 | 1.87.0 | デプロイロールは SSM パラメータを読み取ることができます。 |
6 | 1.108.0 | デプロイロールとは別にルックアップロールを追加します。 |
6 | 1.109.0 | デプロイ、ファイル発行、およびイメージ発行ロールにaws-cdk:bootstrap-role タグをアタッチします。 |
7 | 1.110.0 | デプロイロールは、ターゲットアカウントのバケットを直接読み取ることができなくなります。(ただし、このロールは実質的に管理者であり、バケットを読み取り可能にするために常にその AWS CloudFormation アクセス許可を使用できます)。 |
8 | 1.114.0 | ルックアップロールには、ターゲット環境への完全な読み取り専用アクセス許可があり、aws-cdk:bootstrap-role タグもあります。 |
9 | 2.1.0 | Amazon S3 アセットのアップロードが、一般的に参照される暗号化 SCP によって拒否されないように修正しました。 |
10 | 2.4.0 | Amazon ECR ScanOnPush がデフォルトで有効になりました。 |
11 | 2.18.0 | Lambda が Amazon ECR リポジトリからプルして、再起動後も存続できるようにするポリシーを追加しました。 |
12 | 2.20.0 | 実験的な のサポートを追加しましたcdk import。 |
13 | 2.25.0 | ブートストラップで作成された Amazon ECR リポジトリのコンテナイメージをイミュータブルにします。 |
14 | 2.34.0 | デフォルトでリポジトリレベルで Amazon ECR イメージスキャンをオフにして、イメージスキャンをサポートしていないブートストラップリージョンを許可します。 |
15 | 2.60.0 | KMS キーにタグを付けることはできません。 |
16 | 2.69.0 | Security Hub の検出結果 KMS.2 に対処します。 |
17 | 2.72.0 | Security Hub の検出結果 ECR.3 に対処します。 |
18 | 2.80.0 | バージョン 16 に対して行われた変更は、すべてのパーティションで機能しないため、推奨されません。 |
19 | 2.106.1 | AccessControl プロパティがテンプレートから削除されたバージョン 18 に加えられた変更を元に戻しました。(#27964 |
20 | 2.119.0 | AWS CloudFormation デプロイ IAM ロールに ssm:GetParameters アクションを追加します。詳細については、「#28336 |
レガシーから最新のブートストラップテンプレートへのアップグレード
AWS CDK v1 は、レガシーとモダンの 2 つのブートストラップテンプレートをサポートしました。CDK v2 は最新の テンプレートのみをサポートしています。参考までに、これら 2 つのテンプレートの大まかな違いを次に示します。
機能 | レガシー (v1 のみ) | Modern (v1 および v2) |
---|---|---|
クロスアカウントデプロイ | 許可されていません | 許可 |
AWS CloudFormation アクセス許可 | 現在のユーザーのアクセス許可 ( AWS プロファイル、環境変数などによって決定される) を使用してデプロイします。 | ブートストラップスタックがプロビジョニングされたときに指定されたアクセス許可を使用してデプロイします (例えば、 を使用--trust ) |
バージョニング | 使用可能なブートストラップスタックのバージョンは 1 つだけです | ブートストラップスタックはバージョニングされています。将来のバージョンでは新しいリソースを追加でき、 AWS CDK アプリケーションには最小バージョンが必要になる場合があります。 |
リソース * | Amazon S3 バケット | Amazon S3 バケット |
AWS KMS key | ||
IAM ロール | ||
Amazon ECR リポジトリ | ||
バージョニング用の SSM パラメータ | ||
リソースの命名 | 自動生成 | 確定的 |
バケット暗号化 | デフォルトキー | AWS デフォルトでは マネージドキー。カスタマーマネージドキーを使用するようにカスタマイズできます。 |
* 必要に応じて、ブートストラップテンプレートにリソースを追加します。
レガシーテンプレートを使用してブートストラップされた環境は、再起動によって CDK v2 の最新のテンプレートを使用するようにアップグレードする必要があります。レガシーバケットを削除する前に、環境内のすべての AWS CDK アプリケーションを少なくとも 1 回再デプロイします。
Security Hub の検出結果に対処する
を使用している場合は AWS Security Hub、ブートストラッププロセスによって AWS CDK 作成された一部のリソースで結果が報告される場合があります。Security Hub の検出結果は、精度と安全性を再確認する必要があるリソース設定を見つけるのに役立ちます。これらの特定のリソース設定は AWS Security で確認済みであり、セキュリティ上の問題にはならないと確信しています。
[KMS.2] IAM プリンシパルは、すべての KMS キーで復号アクションを許可する IAM インラインポリシーを使用しないでください
デプロイロール (DeploymentActionRole
) は、暗号化されたデータを読み取るアクセス許可を付与します。これは、CDK Pipelines によるクロスアカウントデプロイに必要です。このロールのポリシーは、すべてのデータにアクセス許可を付与するわけではありません。Amazon S3 および から暗号化されたデータを読み取るアクセス許可を付与するのは AWS KMS、それらのリソースがバケットまたはキーポリシーを通じて許可する場合のみです。
以下は、ブートストラップテンプレートからのデプロイロール内のこれら 2 つのステートメントのスニペットです。
DeploymentActionRole: Type: AWS::IAM::Role Properties: ... Policies: - PolicyDocument: Statement: ... - Sid: PipelineCrossAccountArtifactsBucket Effect: Allow Action: - s3:GetObject* - s3:GetBucket* - s3:List* - s3:Abort* - s3:DeleteObject* - s3:PutObject* Resource: "*" Condition: StringNotEquals: s3:ResourceAccount: Ref: AWS::AccountId - Sid: PipelineCrossAccountArtifactsKey Effect: Allow Action: - kms:Decrypt - kms:DescribeKey - kms:Encrypt - kms:ReEncrypt* - kms:GenerateDataKey* Resource: "*" Condition: StringEquals: kms:ViaService: Fn::Sub: s3.${AWS::Region}.amazonaws.com ...
Security Hub がこれにフラグを付けるのはなぜですか?
ポリシーには、 Condition
句とResource: *
組み合わせた が含まれます。Security Hub はワイルドカードにフラグ*
を付けます。このワイルドカードは、アカウントがブートストラップされた時点で、アー CodePipeline ティファクトバケットの CDK Pipelines によって作成された AWS KMS キーがまだ存在しないため、ARN によってブートストラップテンプレートで参照できないために使用されます。さらに、Security Hub は、このフラグを立てるときに Condition
句を考慮しません。これは、 AWS KMS キー AWS アカウント と同じ からのResource: *
リクエストCondition
に制限されます。これらのリクエストは、 AWS KMS キー AWS リージョン と同じ の Amazon S3 から送信する必要があります。
この検出結果を修正する必要がありますか?
ブートストラップテンプレートの AWS KMS キーを過度に許容するように変更していない限り、デプロイロールは必要以上のアクセスを許可しません。したがって、この検出結果を修正する必要はありません。
この検出結果を修正するにはどうすればよいですか?
この検出結果の修正方法は、クロスアカウントデプロイに CDK Pipelines を使用するかどうかによって異なります。
Security Hub の検出結果を修正し、クロスアカウントデプロイに CDK Pipelines を使用するには
-
まだデプロイしていない場合は、
cdk bootstrap
コマンドを使用して CDK ブートストラップスタックをデプロイします。 -
まだ作成していない場合は、CDK を作成してデプロイしますPipeline。手順については、「CDK Pipelines を使用した継続的インテグレーションとデリバリー (CI/CD)」を参照してください。
-
CodePipeline アーティファクトバケットの AWS KMS キー ARN を取得します。このリソースはパイプラインの作成時に作成されます。
-
CDK ブートストラップテンプレートのコピーを取得して変更します。以下は、 を使用した例です AWS CDK CLI。
$
cdk bootstrap --show-template > bootstrap-template.yaml
-
PipelineCrossAccountArtifactsKey
ステートメントを ARN 値に置き換えてResource: *
、テンプレートを変更します。 -
テンプレートをデプロイしてブートストラップスタックを更新します。CDK を使用した例を次に示しますCLI。
$
cdk bootstrap aws://
account-id
/region
--template bootstrap-template.yaml
クロスアカウントデプロイに CDK Pipelines を使用していない場合に Security Hub の検出結果を修正するには
-
CDK ブートストラップテンプレートのコピーを取得して変更します。CDK を使用した例を次に示しますCLI。
$
cdk bootstrap --show-template > bootstrap-template.yaml
-
テンプレートから
PipelineCrossAccountArtifactsBucket
およびPipelineCrossAccountArtifactsKey
ステートメントを削除します。 -
テンプレートをデプロイしてブートストラップスタックを更新します。CDK を使用した例を次に示しますCLI。
$
cdk bootstrap aws://
account-id
/region
--template bootstrap-template.yaml
考慮事項
ブートストラップは環境内のリソースをプロビジョニングするため、これらのリソースを で使用すると AWS 料金が発生する可能性があります AWS CDK。