これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CDK アプリケーションのデプロイ
AWS Cloud Development Kit (AWS CDK) のデプロイは、AWS でインフラストラクチャをプロビジョニングするプロセスです。
AWS CDK のデプロイの仕組み
AWS CDK は、AWS CloudFormation サービスを使用してデプロイを実行します。デプロイする前に、CDK スタックを合成します。これにより、アプリケーション内の各 CDK スタックの CloudFormation テンプレートとデプロイアーティファクトが作成されます。デプロイは、ローカル開発マシンまたは継続的統合と継続的配信 (CI/CD) 環境から開始されます。デプロイ中、アセットはブートストラップされたリソースにアップロードされ、CloudFormation テンプレートが CloudFormation に送信されて AWS リソースをプロビジョニングします。
デプロイを成功させるには、以下が必要です。
-
AWS CDK コマンドラインインターフェイス (AWS CDK CLI) には有効なアクセス許可が必要です。
-
AWS 環境はブートストラップする必要があります。
-
AWS CDK は、アセットをアップロードするブートストラップされたリソースを把握している必要があります。
CDK デプロイの前提条件
AWS CDK アプリケーションをデプロイする前に、以下を完了する必要があります。
-
CDK CLI のセキュリティ認証情報を設定する。
-
AWS 環境のブートストラップ。
-
CDK スタックごとに AWS 環境を設定する。
-
CDK アプリを開発する。
- セキュリティ認証情報を設定する
-
CDK CLI を使用して AWS を操作するには、ローカルマシンでセキュリティ認証情報を設定する必要があります。手順については、「AWS CDK CLI のセキュリティ認証情報を設定する」を参照してください。
- AWS 環境のブートストラップ
-
デプロイは常に 1 つ以上の AWS 環境に関連付けられます。デプロイする前に、まず環境をブートストラップする必要があります。ブートストラップは、CDK がデプロイの実行と管理に使用するリソースを環境内にプロビジョニングします。これらのリソースには、アセットを保存および管理するための Amazon Simple Storage Service (Amazon S3) バケットと Amazon Elastic Container Registry (Amazon ECR) リポジトリなどがあります。また、これらのリソースには、開発とデプロイ中にアクセス許可を付与するために使用される AWS Identity and Access Management (IAM) ロールも含まれます。
環境をブートストラップする際は、AWS CDK コマンドラインインターフェイス (AWS CLI) の
cdk bootstrapコマンドを使用することをお勧めします。必要に応じて、ブートストラップをカスタマイズすることや、環境内に手動でリソースを作成することができます。手順については、「AWS CDK で使用する環境のブートストラップ」を参照してください。
- AWS 環境を設定する
-
各 CDK スタックは、スタックのデプロイ先を決定するために環境に関連付ける必要があります。手順については、「AWS CDK で使用する環境を設定する」を参照してください。
CDK アプリケーションの合成
合成を実行する際は、CDK CLI の cdk synth コマンドを使用することをお勧めします。cdk deploy コマンドも、デプロイを開始する前に合成を実行はします。しかし、cdk synth を使用すると、デプロイを開始する前に CDK アプリを検証してエラーを検出してくれます。
合成の動作は、CDK スタック用に設定したスタックシンセサイザーによって決まります。シンセサイザーを特に設定しない場合は、
DefaultStackSynthesizer
が使用されます。合成をニーズに合わせて設定およびカスタマイズすることもできます。手順については、「CDK スタック合成を設定して実行する」を参照してください。
合成された CloudFormation テンプレートを環境に正常にデプロイするには、環境のブートストラップ方法と互換性がある必要があります。たとえば、CloudFormation テンプレートは、アセットをデプロイする正しい Amazon S3 バケットを指定する必要があります。環境のブートストラップにデフォルトのメソッドを使用すると、デフォルトのスタックシンセサイザーが機能します。ブートストラップや合成のカスタマイズなど、CDK の動作をカスタマイズすると、CDK デプロイの動作が変化する場合があります。
- アプリケーションのライフサイクル
-
合成を実行すると、CDK アプリケーションは、アプリケーションのライフサイクルと呼ばれる以下のフェーズを順に実行します。
- コンストラクト (または初期化)
-
コードは、定義されたすべてのコンストラクトをインスタンス化し、それらをリンクします。このステージでは、すべてのコンストラクト (アプリケーション、スタック、およびそれらの子コンストラクト) がインスタンス化され、コンストラクターチェーンが実行されます。ほとんどのアプリケーションコードはこの段階で実行されます。
- 準備
-
prepareメソッドを実装したすべてのコンストラクトは、最終状態を設定するための最終変更ラウンドに参加します。準備フェーズは自動的に行われます。このフェーズからのフィードバックは、ユーザーには表示されません。「準備」フックを使用する必要はまれであり、一般的には推奨されません。オペレーションの順序が動作に影響する可能性があるため、このフェーズでコンストラクトツリーをミューテーションするときは細心の注意を払ってください。このフェーズでは、コンストラクトツリーが構築されると、設定したすべてのアスペクトも適用されます。
- 検証
-
validateメソッドを実装したすべてのコンストラクトは、正しくデプロイされる状態であることを確認するための自己検証を行うことができます。このフェーズ中に発生した検証失敗は通知されます。通常、できるだけ早く (通常、入力が得られたらすぐに) 検証を実行し、できるだけ早く例外をスローすることをおすすめします。検証を早期に実行すると、スタックトレースの精度が向上し、コードを安全に実行し続けることができるため、信頼性が向上します。 - 合成
-
これは、CDK アプリを実行する最後の段階です。
app.synth()への呼び出しによってトリガーされ、コンストラクトツリーを横断し、すべてのコンストラクトでsynthesizeメソッドを呼び出します。synthesizeを実装するコンストラクトは、合成に参加して、結果のクラウドアセンブリにデプロイアーティファクトを生成できます。これらのアーティファクトには、CloudFormation テンプレート、AWS Lambda アプリケーションバンドル、ファイルおよび Docker イメージアセット、その他のデプロイアーティファクトが含まれます。ほとんどの場合、synthesizeメソッドを実装する必要はありません。
- アプリの実行
-
CDK CLI は、CDK アプリの実行方法を知る必要があります。
cdk initコマンドを使用してテンプレートからプロジェクトを作成した場合、アプリのcdk.jsonファイルにはappキーが含まれます。このキーは、アプリケーションが書き込まれる言語に必要なコマンドを指定します。言語にコンパイルが必要な場合、コマンドラインはアプリを自動的に実行する前にこのステップを実行します。CDK CLI を使用してプロジェクトを作成しなかった場合、または
cdk.jsonで指定されたコマンドラインを上書きしたい場合は、cdkコマンドの実行時に--appオプションを指定します。
$ cdk --app '<executable>' <cdk-command> ...
コマンドの <executable> の部分は、CDK アプリケーションを実行するために実行する必要があるコマンドを示します。このようなコマンドにはスペースが含まれているため、図のように引用符を使用します。<cdk-command> は、synth や deploy のようなサブコマンドで、アプリケーションで実行したい内容を CDK CLI に指示します。これに続けて、そのサブコマンドに必要な追加オプションを指定します。
CDK CLI は、既に合成されたクラウドアセンブリを直接操作することもできます。これを行うには、クラウドアセンブリが保存されているディレクトリを --app で渡します。以下の例では、./my-cloud-assembly に格納されているクラウドアセンブリで定義されているスタックが一覧表示されます。
$ cdk --app <./my-cloud-assembly> ls
- クラウドアセンブリ
-
app.synth()への呼び出しは、アプリケーションからクラウドアセンブリを合成するよう AWS CDK に指示するものです。通常、クラウドアセンブリを直接操作することはありません。これらは、アプリケーションをクラウド環境にデプロイするために必要なすべてを含むファイルです。例えば、これにはアプリケーション内の各スタックの AWS CloudFormation テンプレートが含まれます。また、アプリで参照するファイルアセットまたは Docker イメージのコピーも含まれます。クラウドアセンブリのフォーマットの詳細については、「クラウドアセンブリ仕様
」を参照してください。 AWS CDK アプリが作成するクラウドアセンブリを操作するには、通常 AWS CDK CLI を使用します。もっとも、クラウドアセンブリ形式を読み取ることができるツールであれば、どれでもアプリケーションのデプロイに使用できます。
アプリケーションをデプロイします
アプリケーションをデプロイするには、CDK CLI の cdk deploy コマンドを使用してデプロイを開始するか、自動デプロイを設定することをお勧めします。
cdk deploy を実行すると、CDK CLI はデプロイの準備として cdk synth を起動します。以下の図は、デプロイの文脈におけるアプリケーションのライフサイクルを示しています。
デプロイ中、CDK CLI は合成によって生成されたクラウドアセンブリを受け取り、AWS 環境にデプロイします。アセットは Amazon S3 と Amazon ECR にアップロードされ、CloudFormation テンプレートはデプロイのために AWS CloudFormation に送信されます。
AWS CloudFormation のデプロイフェーズが開始されるまでに、CDK アプリの実行と終了は既に完了しています。これには、以下のような影響があります。
-
CDK アプリは、作成中のリソースやデプロイ全体の終了など、デプロイ中に発生するイベントには応答できません。デプロイ段階でコードを実行するには、カスタムリソースとして AWS CloudFormation テンプレートにコードを挿入する必要があります。アプリケーションにカスタムリソースを追加する方法の詳細については、「AWS CloudFormation モジュール」、またはカスタムリソース
の例を参照してください。デプロイ中にコードを実行するようにトリガーモジュールを設定することもできます。 -
CDK アプリは、実行時にはわからない値を操作する必要がある場合があります。例えば、AWS CDK アプリが自動生成された名前で Amazon S3 バケットを定義し、
bucket.bucketName(Python:bucket_name) 属性を取得した場合、その値はデプロイされたバケットの名前ではありません。代わりに、Tokenの値が返されます。特定の値が使用可能かどうかを判断するには、cdk.isUnresolved(value)(Python:is_unresolved) を呼び出します。詳細については、「トークンと AWS CDK」を参照してください。
- デプロイのアクセス許可
-
デプロイを実行する前には、アクセス許可を確立する必要があります。以下の図は、デフォルトのブートストラッププロセスとスタックシンセサイザーを使用する場合に、デフォルトのデプロイ中に使用されるアクセス許可を示しています。
- アクターがデプロイを開始する
-
デプロイは、アクターにより、CDK CLI を使用して開始されます。アクターは人物、または AWS CodePipeline などのサービスのいずれかです。
必要に応じて、
cdk deployの実行時に CDK CLI がcdk synthを実行します。合成中、AWS アイデンティティはLookupRoleを引き受け、AWS 環境でコンテキストルックアップを実行します。 - アクセス許可が確立される
-
まず、アクターのセキュリティ認証情報を使用して AWS に認証を行い、その過程で最初の IAM アイデンティティを取得します。アクターが人間である場合、セキュリティ認証情報の設定と取得方法は、ユーザーまたは組織がユーザーを管理する方法によって異なります。詳細については、「AWS CDK CLI のセキュリティ認証情報を設定する」を参照してください。アクターが CodePipeline などのサービスである場合、IAM 実行ロールが引き受けられ、使用されます。
次に、ブートストラップ中に AWS 環境で作成された IAM ロールを使用して、デプロイに必要なアクションを実行するためのアクセス許可を確立します。これらのロールおよびロールが付与するアクセス許可の詳細については、「ブートストラップ中に作成された IAM ロール」を参照してください。このプロセスには以下が含まれます。
-
AWS ID は
DeploymentActionRoleロールを引き受け、CloudFormationExecutionRoleロールを CloudFormation に渡すことで、CloudFormation が AWS 環境で何らかのアクションを実行する際に、ロールを確実に引き受けるようにします。DeploymentActionRoleは、環境へのデプロイを実行するアクセス許可を付与し、CloudFormationExecutionRoleは、CloudFormation が実行できるアクションを決定します。 -
AWS ID は
FilePublishingRoleを引き受け、ブートストラップ中に作成された Amazon S3 バケットに対して実行できるアクションを決定します。 -
AWS ID は
ImagePublishingRoleを引き受け、ブートストラップ中に作成された Amazon ECR リポジトリで実行できるアクションを決定します。 -
必要に応じて、AWS ID は
LookupRoleを引き受け、AWS 環境でコンテキスト検索を実行します。このアクションは、テンプレートの合成中に実行することもできます。
-
- デプロイが実行される
-
デプロイ中、CDK CLI はブートストラップバージョンパラメータを読み取り、ブートストラップバージョン番号を確認します。AWSCloudFormation は、デプロイ時にこのパラメータを読み取り、確認を行います。デプロイワークフロー全体のアクセス許可が有効である場合、デプロイが実行されます。アセットはブートストラップされたリソースにアップロードされ、合成時に生成された CloudFormation テンプレートは CloudFormation サービスを CloudFormation スタックとして使用してデプロイされ、リソースがプロビジョニングされます。