AWS CDK アプリケーションをデプロイする - AWS Cloud Development Kit (AWS CDK) v2

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

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

AWS CDK アプリケーションをデプロイする

AWS Cloud Development Kit (AWS CDK) デプロイとは、 でインフラストラクチャをプロビジョニングするプロセスです AWS。

AWS CDK デプロイの仕組み

は AWS CloudFormation サービス AWS CDK を利用してデプロイを実行します。デプロイする前に、CDKスタックを合成します。これにより、アプリケーション内のCDKスタックごとに CloudFormation テンプレートとデプロイアーティファクトが作成されます。デプロイは、ローカルの開発マシンまたは継続的インテグレーションと継続的デリバリー (CI/CD) 環境から開始されます。デプロイ中、アセットはブートストラップされたリソースにアップロードされ、CloudFormation テンプレートは に送信されて AWS リソース CloudFormation をプロビジョニングします。

デプロイを成功させるには、以下が必要です。

  • AWS CDK コマンドラインインターフェイス (AWS CDK CLI) には、有効なアクセス許可が必要です。

  • AWS 環境はブートストラップする必要があります。

  • は、アセットをアップロードするブートストラップされたリソースを認識している AWS CDK 必要があります。

CDK デプロイの前提条件

AWS CDK アプリケーションをデプロイする前に、以下を完了する必要があります。

  • のセキュリティ認証情報を設定しますCDKCLI。

  • AWS 環境をブートストラップします。

  • スタックごとに AWS 環境を設定しますCDK。

  • CDK アプリを開発します。

セキュリティ認証情報を設定する

を使用して CDKCLIを操作するには AWS、ローカルマシンでセキュリティ認証情報を設定する必要があります。手順については、のセキュリティ認証情報を設定する AWS CDKCLI を参照してください。

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 CDK CLI) cdk bootstrap コマンドを使用して環境をブートストラップすることをお勧めします。必要に応じて、ブートストラップをカスタマイズしたり、環境でこれらのリソースを手動で作成したりできます。手順については、で使用する環境をブートストラップする AWS CDK を参照してください。

AWS 環境を設定する

各CDKスタックをデプロイする場所を決定するには、各スタックを環境に関連付ける必要があります。手順については、で使用する環境を設定する AWS CDK を参照してください。

CDK アプリの開発

CDK プロジェクト 内では、CDKアプリケーションを作成して開発します。アプリ内で、1 つ以上のCDKスタック を作成します。 AWS CDK スタックスタック内では、コンストラクトライブラリから AWS コンストラクトをインポートして使用してインフラストラクチャを定義します。デプロイする前に、CDKアプリケーションに少なくとも 1 つのスタックが含まれている必要があります。

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アプリケーションの実行方法を知るCDKCLI必要があります。cdk init コマンドを使用してテンプレートからプロジェクトを作成した場合、アプリケーションの cdk.json ファイルには appキーが含まれます。このキーは、アプリケーションが書き込まれる言語に必要なコマンドを指定します。言語にコンパイルが必要な場合、コマンドラインは、アプリを自動的に実行する前にこのステップを実行します。

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }
Go
{ "app": "go mod download && go run my-app.go" }

を使用してプロジェクトを作成しなかった場合CLI、または CDK で指定されたコマンドラインを上書きする場合はcdk.jsoncdkコマンドの実行時に --appオプションを指定できます。

$ cdk --app 'executable' cdk-command ...

- executable コマンドの一部は、CDKアプリケーションを実行するために実行する必要があるコマンドを示します。これらのコマンドにはスペースが含まれているため、図のように引用符を使用します。- cdk-command は、 synthや のようなサブコマンドdeployで、アプリケーションでCDKCLI何をするかを に指示します。これに従い、そのサブコマンドに必要な追加オプションを指定します。

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 synthの準備CDKCLIを開始します。次の図は、デプロイのコンテキストにおけるアプリケーションのライフサイクルを示しています。

AWS CDK アプリケーションライフサイクルのフローチャート。

デプロイ中、 CDKCLIは合成によって生成されたクラウドアセンブリを受け取り、 AWS 環境にデプロイします。アセットは Amazon S3 と Amazon にアップロードECRされ、 CloudFormation テンプレートはデプロイ AWS CloudFormation のために に送信されます。

AWS CloudFormation デプロイフェーズが開始されるまでに、CDKアプリの実行と終了が既に完了しています。これにより、以下の影響があります。

  • CDK アプリケーションは、作成中のリソースやデプロイ全体の終了など、デプロイ中に発生するイベントに応答できません。デプロイフェーズでコードを実行するには、カスタムリソース として AWS CloudFormation テンプレートにコードを挿入する必要があります。アプリケーションへのカスタムリソースの追加の詳細については、AWS CloudFormation モジュール またはカスタムリソースの例を参照してください。デプロイ中にコードを実行するように Triggers モジュールを設定することもできます。

  • CDK アプリケーションは、実行時に認識できない値を操作する必要がある場合があります。例えば、 AWS CDK アプリケーションが自動的に生成された名前で Amazon S3 バケットを定義し、 bucket.bucketName (Python: bucket_name) 属性を取得した場合、その値はデプロイされたバケットの名前ではありません。代わりに、Token値を取得します。特定の値が使用可能かどうかを判断するには、 cdk.isUnresolved(value) (Python: ) を呼び出しますis_unresolved。詳細については、「トークンと AWS CDK」を参照してください。

デプロイ許可

デプロイを実行する前に、アクセス許可を確立する必要があります。次の図は、デフォルトのブートストラッププロセスとスタックシンセサイザーを使用する場合に、デフォルトのデプロイ中に使用されるアクセス許可を示しています。

デフォルトの AWS CDK デプロイプロセスのフローチャート。
アクターがデプロイを開始する

デプロイは、 を使用してアクター によって開始されますCDKCLI。アクターは、人物でも、 などのサービスでもかまいません AWS CodePipeline。

必要に応じて、 CDK CLI を実行すると cdk synthが実行されますcdk deploy。合成中、 AWS ID は を前提LookupRoleとして、環境でコンテキスト検索 AWS を実行します。

アクセス許可が確立されている

まず、アクターのセキュリティ認証情報を使用して、プロセスの最初の IAM ID を認証 AWS し、取得します。人間のアクターの場合、セキュリティ認証情報の設定と取得方法は、ユーザーまたは組織がユーザーを管理する方法によって異なります。詳細については、「のセキュリティ認証情報を設定する AWS CDKCLI」を参照してください。などのサービスアクターの場合 CodePipeline、IAM実行ロールが引き受けられ、使用されます。

次に、ブートストラップ中に AWS 環境で作成されたIAMロールを使用して、デプロイに必要なアクションを実行するためのアクセス許可を確立します。これらのロールとそのロールがアクセス許可を付与する対象の詳細については、「」を参照してくださいIAM ブートストラップ中に作成されたロール。このプロセスには以下が含まれます。

  • AWS ID はDeploymentActionRoleロールを引き受け、CloudFormationExecutionRoleロールを に渡します。これにより CloudFormation、 は AWS 環境でアクションを実行するときにロールを CloudFormation 引き受けます。 CloudFormation は、環境へのデプロイを実行するアクセス許可DeploymentActionRoleを付与し、実行できるアクションCloudFormationExecutionRoleを決定します。

  • AWS ID はFilePublishingRole、ブートストラップ中に作成された Amazon S3 バケットで実行できるアクションを決定する を引き受けます。

  • AWS ID はImagePublishingRole、ブートストラップ中に作成された Amazon ECRリポジトリで実行できるアクションを決定する を引き受けます。

  • 必要に応じて、 AWS ID は を前提LookupRoleとして、 AWS 環境でコンテキスト検索を実行します。このアクションは、テンプレート合成中に実行することもできます。

デプロイが実行される

デプロイ中、 はブートストラップバージョンパラメータをCDKCLI読み取り、ブートストラップバージョン番号を確認します。 AWS CloudFormation また、 はデプロイ時にこのパラメータを読み取り、確認します。デプロイワークフロー全体のアクセス許可が有効な場合、デプロイが実行されます。アセットはブートストラップされたリソースにアップロードされ、合成時に生成された CloudFormation テンプレートは、リソースをプロビジョニングするための CloudFormation スタックとして CloudFormation サービスを使用してデプロイされます。