AWS CDK ツールキット (cdk コマンド) - AWS Cloud Development Kit (AWS CDK) v2

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

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

AWS CDK ツールキット (cdk コマンド)

Toolkit AWS CDK 、CLI コマンド はcdk、 AWS CDK アプリケーションを操作するための主要なツールです。アプリケーションを実行し、定義したアプリケーションモデルを調べ、 によって生成された AWS CloudFormation テンプレートを生成してデプロイします AWS CDK。また、 AWS CDK プロジェクトの作成や操作に役立つ他の機能も提供します。このトピックでは、CDK Toolkit の一般的なユースケースについて説明します。

AWS CDK Toolkit は Node Package Manager と共にインストールされます。ほとんどの場合、グローバルにインストールすることをお勧めします。

npm install -g aws-cdk # install latest version npm install -g aws-cdk@X.YY.Z # install specific version
ヒント

の複数のバージョンを定期的に使用する場合は AWS CDK、個々の CDK プロジェクトに一致するバージョンの AWS CDK Toolkit をインストールすることを検討してください。これを行うには、 npm install コマンド-gから を省略します。次にnpx aws-cdk、 を使用して呼び出します。これにより、ローカルバージョンが存在する場合は実行され、存在しない場合はグローバルバージョンにフォールバックします。

ツールキットのコマンド

すべての CDK Toolkit コマンドは で始まりcdk、その後にサブコマンド (listsynthesizedeployなど) が続きます。一部のサブコマンドにはls、同等の短いバージョン (synth、 など) があります。オプションと引数は、任意の順序でサブコマンドに従います。

すべてのサブコマンド、オプション、引数の説明については、「」を参照してくださいAWS CDK CLI コマンドリファレンス

オプションとその値の指定

コマンドラインオプションは 2 つのハイフン () で始まります--。頻繁に使用されるオプションの中には、1 文字のシノニムが 1 つのハイフンで始まるものもあります (例えば、 --appにはシノニム があります-a)。 AWS CDK Toolkit コマンドのオプション順序は重要ではありません。

すべてのオプションは値を受け入れ、オプション名に従う必要があります。値は、名前から空白または等号 で区切ることができます=。次の 2 つのオプションは同等です。

--toolkit-stack-name MyBootstrapStack --toolkit-stack-name=MyBootstrapStack

一部のオプションはフラグ (ブール値) です。値falseとして trueまたは を指定できます。値を指定しない場合、値は と見なされますtrue。を暗示no-するために、オプション名の前に を付けることもできますfalse

# sets staging flag to true --staging --staging=true --staging true # sets staging flag to false --no-staging --staging=false --staging false

複数の値を指定するには、--context、、--parameters--plugin--tags、 などのいくつかのオプションを複数回指定--trustできます。これらは CDK Toolkit のヘルプで [array] タイプと表記されます。例:

cdk bootstrap --tags costCenter=0123 --tags responsibleParty=jdoe

組み込みヘルプ

AWS CDK ツールキットには統合されたヘルプがあります。ユーティリティに関する一般的なヘルプと、提供されているサブコマンドのリストは、以下を発行することで確認できます。

cdk --help

例えば など、特定のサブコマンドのヘルプを表示するにはdeploy--helpフラグの前に指定します。

cdk deploy --help

AWS CDK Toolkit のバージョンcdk versionを表示する問題。サポートをリクエストするときに、この情報を入力します。

バージョンレポート

AWS CDK の使用方法を把握するために、 AWS CDK アプリケーションで使用されるコンストラクトは、 として識別されるリソースを使用して収集および報告されますAWS::CDK::Metadata。このリソースは AWS CloudFormation テンプレートに追加され、簡単に確認できます。この情報は、セキュリティまたは信頼性の既知の問題があるコンストラクトを使用してスタックを識別 AWS するために でも使用できます。また、重要な情報をユーザーに連絡するためにも使用できます。

注記

バージョン 1.93.0 以前は、 は、スタックで使用されるコンストラクトではなく、合成中にロードされたモジュールの名前とバージョン AWS CDK を報告していました。

デフォルトでは、 はスタックで使用される次の NPM モジュールでの コンストラクトの使用を AWS CDK レポートします。

  • AWS CDK コアモジュール

  • AWS ライブラリモジュールの構築

  • AWS ソリューション構築モジュール

  • AWS Farm Deployment Kit モジュールをレンダリングする

AWS::CDK::Metadata リソースは次のようになります。

CDKMetadata:
  Type: "AWS::CDK::Metadata"
  Properties:
    Analytics: "v2:deflate64:H4sIAND9SGAAAzXKSw5AMBAA0L1b2PdzBYnEAdio3RglglY60zQi7u6TWL/XKmNUlxeQSOKwaPTBqrNhwEWU3hGHiCzK0dWWfAxoL/Fd8mvk+QkS/0X6BdjnCdgmOOQKWz+AqqLDt2Y3YMnLYWwAAAA="

Analytics プロパティは、スタック内のコンストラクトの、gzipped、base64 エンコード、プレフィックスエンコードされたリストです。

バージョンレポートをオプトアウトするには、次のいずれかの方法を使用します。

  • --no-version-reporting数を指定して cdk コマンドを使用して、1 つのコマンドをオプトアウトします。

    cdk --no-version-reporting synth

    Toolkit AWS CDK はデプロイ前に新しいテンプレートを合成するため、 --no-version-reporting cdk deploy コマンドにも を追加する必要があります。

  • ./cdk.json または で false versionReportingに設定します~/.cdk.json。これは、個々のコマンド--version-reportingで を指定してオプトインしない限りオプトアウトします。

    { "app": "...", "versionReporting": false }

による認証 AWS

AWS リソースへのプログラムによるアクセスを設定する方法は、環境と利用可能な AWS アクセスに応じて異なります。

認証方法を選択し、CDK Toolkit 用に設定するには、「 SDK とツールのリファレンスガイド」の「認証とアクセス」を参照してください。 AWS SDKs

雇用主から認証方法が与えられていないローカルで開発している新規ユーザーには、 を設定することをお勧めします AWS IAM Identity Center。この方法には、設定を容易に AWS CLI するために をインストールしたり、 AWS アクセスポータルに定期的にサインインしたりすることが含まれます。この方法を選択した場合、AWS SDK とツールのリファレンスガイドIAM Identity Center 認証の手順を完了したあと、環境には次の要素が含まれるはずです。

  • アプリケーションを実行する前に AWS アクセスポータルセッションを開始 AWS CLIするために使用する 。

  • から参照できる設定値のセットを持つ[default]プロファイルを持つ共有 AWSconfigファイル AWS CDK。このファイルの場所を確認するには、AWS SDK とツールのリファレンスガイドの「共有ファイルの場所」を参照してください。

  • 共有 config ファイルは region 設定を設定します。これにより、 AWS CDK および CDK Toolkit AWS リージョン が AWS リクエストに使用するデフォルトの が設定されます。

  • CDK Toolkit は、 にリクエストを送信する前に、プロファイルの SSO トークンプロバイダー設定を使用して認証情報を取得します AWS。IAM Identity Center アクセス許可セットに接続された IAM ロールである sso_role_name値は、アプリケーションで AWS のサービス 使用されている へのアクセスを許可する必要があります。

    次のサンプル config ファイルは、SSO トークンプロバイダー設定で設定されたデフォルトプロファイルを示しています。プロファイルの sso_session 設定は、指定された sso-session セクションを参照します。sso-session セクションには、 AWS アクセスポータルセッションを開始するための設定が含まれています。

    [default] sso_session = my-sso sso_account_id = 111122223333 sso_role_name = SampleRole region = us-east-1 output = json [sso-session my-sso] sso_region = us-east-1 sso_start_url = https://provided-domain.awsapps.com/start sso_registration_scopes = sso:account:access

AWS アクセスポータルセッションを開始する

にアクセスする前に AWS のサービス、CDK Toolkit が IAM Identity Center 認証を使用して認証情報を解決するためのアクティブな AWS アクセスポータルセッションが必要です。設定したセッションの長さによっては、アクセスが最終的に期限切れになり、CDK Toolkit で認証エラーが発生します。で次のコマンドを実行して AWS CLI 、 AWS アクセスポータルにサインインします。

aws sso login

SSO トークンプロバイダーの設定で、デフォルトプロファイルではなく名前付きプロファイルを使用している場合、コマンドは ですaws sso login --profile NAME--profile オプションまたはAWS_PROFILE環境変数を使用してcdkコマンドを発行する場合は、このプロファイルも指定します。

既にアクティブなセッションがあるかどうかをテストするには、次の AWS CLI コマンドを実行します。

aws sts get-caller-identity

このコマンドへの応答により、共有 config ファイルに設定されている IAM Identity Center アカウントとアクセス許可のセットが報告されます。

注記

既にアクティブな AWS アクセスポータルセッションがあり、 を実行している場合はaws sso login、認証情報を入力する必要はありません。

サインインプロセスにより、データ AWS CLI へのアクセスを許可するように求められる場合があります。 AWS CLI は SDK for Python 上に構築されているため、アクセス許可メッセージにはbotocore名前のバリエーションが含まれている可能性があります。

リージョンおよびその他の設定の指定

CDK Toolkit は、デプロイ先の AWS リージョンと、 で認証する方法を理解している必要があります AWS。これは、デプロイオペレーションと合成中にコンテキスト値を取得するために必要です。アカウントとリージョンが一緒に環境 を構成します。

リージョンは、環境変数または設定ファイルで指定できます。これらは、 やさまざまな SDK などの他の AWS ツールで使用されるのと同じ変数 AWS CLI とファイルです。 AWS SDKs CDK Toolkit は、この情報を次の順序で検索します。

  • AWS_DEFAULT_REGION 環境変数。

  • 標準 AWS configファイルで定義され、 cdk コマンドの --profileオプションを使用して指定された名前付きプロファイル。

  • 標準 AWS configファイルの [default]セクション。

[default] セクションで AWS 認証とリージョンを指定するだけでなく、1 つ以上の[profile NAME]セクションを追加することもできます。NAME はプロファイルの名前です。名前付きプロファイルの詳細については、 SDK およびツールリファレンスガイドの「共有設定ファイルと認証情報ファイル」を参照してください。 AWS SDKs

標準 AWS configファイルは、 ~/.aws/config (macOS /Linux) または %USERPROFILE%\.aws\config (Windows) にあります。詳細と代替の場所については、「 SDK とツールのリファレンスガイド」の「共有設定ファイルと認証情報ファイルの場所」を参照してください。 AWS SDKs

スタックの envプロパティを使用して AWS CDK アプリケーションで指定する環境は、合成中に使用されます。これは環境固有の AWS CloudFormation テンプレートを生成するために使用され、デプロイ中に、前述の方法のいずれかで指定されたアカウントまたはリージョンを上書きします。詳細については、「環境」を参照してください。

注記

AWS CDK は、 を含む他の AWS ツールや SDKsと同じソースファイルからの認証情報を使用しますAWS Command Line Interface。ただし、 AWS CDK の動作は、これらのツールとは多少異なる場合があります。内部 AWS SDK for JavaScript の を使用します。の認証情報の設定の詳細については AWS SDK for JavaScript、「認証情報の設定」を参照してください。

オプションで --role-arn (または -r) オプションを使用して、デプロイに使用する IAM ロールの ARN を指定できます。このロールは、使用する AWS アカウントが引き受けることができる必要があります。

アプリケーションコマンドの指定

CDK Toolkit の多くの機能では、1 つ以上の AWS CloudFormation テンプレートを合成する必要があります。合成するには、アプリケーションの実行が必要です。は、さまざまな言語で記述されたプログラム AWS CDK をサポートしています。したがって、設定オプションを使用して、アプリケーションの実行に必要な正確なコマンドを指定します。このオプションは 2 つの方法で指定できます。

まず、最も一般的には、ファイル 内の appキーを使用して指定できますcdk.json。これは AWS CDK プロジェクトのメインディレクトリにあります。CDK Toolkit は、 で新しいプロジェクトを作成するときに適切なコマンドを提供しますcdk init。例えば、新しい TypeScript プロジェクトの cdk.json を次に示します。

{ "app": "npx ts-node bin/hello-cdk.ts" }

CDK Toolkit は、アプリケーションの実行を試みるときに、現在の作業ディレクトリcdk.jsonで を検索します。このため、CDK Toolkit コマンドを発行するために、プロジェクトのメインディレクトリでシェルを開いたままにしておくことができます。

CDK Toolkit は、 でアプリキーが見つからない場合、 で ~/.cdk.json (つまり、ホームディレクトリで) アプリキーも検索します./cdk.json。アプリコマンドをここに追加すると、通常、同じ言語で CDK コードを操作する場合に便利です。

他のディレクトリにいる場合、または のコマンド以外のコマンドを使用してアプリケーションを実行する場合はcdk.json--app (または -a) オプションを使用して指定します。

cdk --app "npx ts-node bin/hello-cdk.ts" ls

デプロイ時に、 などの合成されたクラウドアセンブリを含むディレクトリを cdk.outの値として指定することもできます--app。指定されたスタックはこのディレクトリからデプロイされます。アプリは合成されません。

スタックの指定

多くの CDK Toolkit コマンド ( などcdk deploy) は、アプリケーションで定義されたスタックで動作します。アプリケーションにスタックが 1 つだけ含まれている場合、スタックを明示的に指定しない場合、CDK Toolkit はスタックを前提としています。

それ以外の場合は、使用するスタックを指定する必要があります。これを行うには、コマンドラインで ID で目的のスタックを個別に指定します。ID は、スタックをインスタンス化するときに 2 番目の引数で指定された値であることを思い出してください。

cdk synth PipelineStack LambdaStack

ワイルドカードを使用して、パターンに一致する IDsを指定することもできます。

  • ? は任意の 1 文字に一致します

  • * は任意の数の文字に一致します (*単独ではすべてのスタックに一致します)

  • ** は階層内のすべてのものと一致します。

--all オプションを使用して、すべてのスタックを指定することもできます。

アプリケーションが CDK Pipelines を使用している場合、CDK Toolkit はスタックとステージを階層として理解します。また、 --allオプションと*ワイルドカードは最上位スタックのみに一致します。すべてのスタックを照合するには、 を使用します**。また**、 を使用して、特定の階層のすべてのスタックを示します。

ワイルドカードを使用する場合は、パターンを引用符で囲むか、ワイルドカードを でエスケープします\。そうしないと、シェルが現在のディレクトリ内のファイルの名前にパターンを拡張しようとする可能性があります。最大で、これは期待どおりには動作しません。最悪の場合は、意図していなかったスタックをデプロイできます。はワイルドカードを拡張cmd.exeしないため、Windows では必須ではありませんが、それでも良い方法です。

cdk synth "*Stack" # PipelineStack, LambdaStack, etc. cdk synth 'Stack?' # StackA, StackB, Stack1, etc. cdk synth \* # All stacks in the app, or all top-level stacks in a CDK Pipelines app cdk synth '**' # All stacks in a CDK Pipelines app cdk synth 'PipelineStack/Prod/**' # All stacks in Prod stage in a CDK Pipelines app
注記

スタックを指定する順序は、必ずしも処理される順序ではありません。Toolkit AWS CDK は、スタックの処理順序を決定する際に、スタック間の依存関係を考慮します。例えば、あるスタックが別のスタックによって生成された値 (2 番目のスタックで定義されたリソースの ARN など) を使用しているとします。この場合、この依存関係のため、2 番目のスタックは最初のスタックの前に合成されます。スタックの addDependency()メソッドを使用して、スタック間に手動で依存関係を追加できます。

AWS 環境のブートストラップ

CDK を使用してスタックをデプロイするには、特別な専用 AWS CDK リソースをプロビジョニングする必要があります。cdk bootstrap コマンドは、必要なリソースを作成します。これらの専用リソースを必要とするスタックをデプロイする場合にのみ、ブートストラップする必要があります。詳細については、「ブートストラッピング」を参照してください。

cdk bootstrap

ここに示すように、引数なしで発行された場合、 cdk bootstrap コマンドは現在のアプリケーションを合成し、スタックがデプロイされる環境をブートストラップします。アプリケーションに環境に依存しないスタックが含まれており、環境を明示的に指定していない場合、デフォルトのアカウントとリージョンはブートストラップされるか、 を使用して指定された環境がブートストラップされます--profile

アプリの外部では、ブートストラップする環境を明示的に指定する必要があります。また、アプリケーションまたはローカル AWS プロファイルで指定されていない環境をブートストラップすることもできます。認証情報は、指定されたアカウントとリージョンに対して設定する必要があります (例: で~/.aws/credentials)。必要な認証情報を含むプロファイルを指定できます。

cdk bootstrap ACCOUNT-NUMBER/REGION # e.g. cdk bootstrap 1111111111/us-east-1 cdk bootstrap --profile test 1111111111/us-east-1
重要

このようなスタックをデプロイする各環境 (アカウント/リージョンの組み合わせ) は、個別にブートストラップする必要があります。

ブートストラップされたリソース内の AWS CDK ストアに対して AWS 料金が発生する場合があります。さらに、 を使用する場合-bootstrap-customer-key、AWS KMS キーが作成され、環境ごとに料金が発生します。

注記

以前のバージョンのブートストラップテンプレートでは、デフォルトで KMS キーが作成されていました。料金が発生しないようにするには、 を使用してブートストラップし直します--no-bootstrap-customer-key

注記

CDK Toolkit v2 は、CDK v1 でデフォルトで使用されているレガシーテンプレートと呼ばれる元のブートストラップテンプレートをサポートしていません。

重要

最新のブートストラップテンプレートは、 が暗示するアクセス許可--cloudformation-execution-policies--trustリスト内の任意の AWS アカウントに効果的に付与します。デフォルトでは、これにより、ブートストラップされたアカウントの任意のリソースに対する読み取りと書き込みのアクセス許可が拡張されます。ブートストラップスタックには、使い慣れたポリシーと信頼できるアカウントを設定してください。

新しいアプリケーションの作成

新しいアプリケーションを作成するには、そのアプリケーション用のディレクトリを作成し、ディレクトリ内で を発行しますcdk init

mkdir my-cdk-app cd my-cdk-app cdk init TEMPLATE --language LANGUAGE

サポートされている言語 (言語 ) は次のとおりです。

Code

[言語]

typescript

TypeScript

javascript

JavaScript

python

Python

java

Java

csharp

C#

TEMPLATE はオプションのテンプレートです。目的のテンプレートがアプリケーション の場合、デフォルトは省略できます。使用可能なテンプレートは次のとおりです。

テンプレート

説明

app(デフォルト)

空の AWS CDK アプリケーションを作成します。

sample-app

Amazon SQS キューと Amazon SNS トピックを含むスタックを使用して AWS CDK アプリケーションを作成します。

テンプレートは、プロジェクトフォルダの名前を使用して、新しいアプリケーション内のファイルとクラスの名前を生成します。

スタックの一覧表示

AWS CDK アプリケーション内のスタックの IDs のリストを表示するには、次のいずれかの同等のコマンドを入力します。

cdk list cdk ls

アプリケーションに CDK Pipelines スタックが含まれている場合、CDK Toolkit はパイプライン階層内の場所に応じてスタック名をパスとして表示します。(例えば、PipelineStackPipelineStack/Prod、および など)PipelineStack/Prod/MyService

アプリケーションに多数のスタックが含まれている場合は、一覧表示するスタックのフルまたは一部のスタック IDs を指定できます。詳細については、「スタックの指定」を参照してください。

--long フラグを追加して、スタック名とその環境 (AWS アカウントとリージョン) など、スタックに関する詳細情報を表示します。

スタックの合成

cdk synthesize コマンド (通常は略称 synth) は、アプリケーションで定義されたスタックを CloudFormation テンプレートに合成します。

cdk synth # if app contains only one stack cdk synth MyStack cdk synth Stack1 Stack2 cdk synth "*" # all stacks in app
注記

CDK Toolkit は実際にアプリケーションを実行し、ほとんどのオペレーション (スタックのデプロイや比較時など) の前に新しいテンプレートを合成します。これらのテンプレートは、デフォルトで cdk.out ディレクトリに保存されます。cdk synth コマンドは、1 つ以上の指定されたスタックに対して生成されたテンプレートを単に出力します。

使用可能なすべてのオプションcdk synth --helpについては、「」を参照してください。最も頻繁に使用されるオプションのいくつかを次のセクションで説明します。

コンテキスト値の指定

--context または -cオプションを使用して、ランタイムコンテキスト値を CDK アプリケーションに渡します。

# specify a single context value cdk synth --context key=value MyStack # specify multiple context values (any number) cdk synth --context key1=value1 --context key2=value2 MyStack

複数のスタックをデプロイする場合、指定されたコンテキスト値は通常、すべてのスタックに渡されます。必要に応じて、スタック名の前にコンテキスト値を付けることで、スタックごとに異なる値を指定できます。

# different context values for each stack cdk synth --context Stack1:key=value Stack2:key=value Stack1 Stack2

表示形式の指定

デフォルトでは、合成されたテンプレートは YAML 形式で表示されます。--json フラグを追加して、代わりに JSON 形式で表示します。

cdk synth --json MyStack

出力ディレクトリの指定

--output (-o) オプションを追加して、合成されたテンプレートを 以外のディレクトリに書き込みますcdk.out

cdk synth --output=~/templates

スタックのデプロイ

cdk deploy サブコマンドは、指定した 1 つ以上のスタックを AWS アカウントにデプロイします。

cdk deploy # if app contains only one stack cdk deploy MyStack cdk deploy Stack1 Stack2 cdk deploy "*" # all stacks in app
注記

CDK Toolkit はアプリを実行し、何かをデプロイする前に新しい AWS CloudFormation テンプレートを合成します。したがって、 で使用できるほとんどのコマンドラインオプション cdk synth ( など--context) は、 でも使用できますcdk deploy

使用可能なすべてのオプションcdk deploy --helpについては、「」を参照してください。次のセクションでは、最も有用なオプションをいくつか紹介します。

合成のスキップ

cdk deploy コマンドは通常、デプロイ前にアプリケーションのスタックを合成して、デプロイがアプリケーションの最新バージョンを反映していることを確認します。前回の 以降にコードを変更していないことがわかっている場合はcdk synth、デプロイ時に冗長合成ステップを抑制できます。そのためには、 --appオプションでプロジェクトのcdk.outディレクトリを指定します。

cdk deploy --app cdk.out StackOne StackTwo

ロールバックの無効化

AWS CloudFormation には、デプロイがアトミックになるように変更をロールバックする機能があります。つまり、全体として成功または失敗します。は AWS CloudFormation テンプレートを合成してデプロイするため、この機能を AWS CDK 継承します。

ロールバックにより、リソースは常に一貫した状態になります。これは、本番稼働用スタックにとって不可欠です。ただし、インフラストラクチャの開発中、一部の障害は避けられず、失敗したデプロイをロールバックすると速度が低下する可能性があります。

このため、CDK Toolkit では、 cdk deploy コマンド--no-rollbackに を追加してロールバックを無効にできます。このフラグを使用すると、失敗したデプロイはロールバックされません。代わりに、失敗したリソースの前にデプロイされたリソースはそのまま残り、次のデプロイは失敗したリソースから始まります。デプロイを待つ時間が大幅に短縮され、インフラストラクチャの開発に費やす時間が長くなります。

ホットスワップ

--hotswapフラグcdk deployを使用して、 AWS CloudFormation 変更セットを生成してデプロイするのではなく、 AWS リソースを直接更新しようとします。ホットスワップが不可能な場合、デプロイは AWS CloudFormation デプロイにフォールバックします。

現在、ホットスワップは Lambda 関数、Step Functions ステートマシン、および Amazon ECS コンテナイメージをサポートしています。--hotswap フラグはロールバックも無効にします (つまり、 を意味します--no-rollback)。

重要

ホットスワップは、本番デプロイではお勧めしません。

監視モード

CDK Toolkit のウォッチモード ( または略cdk watchして ) はcdk deploy --watch、CDK アプリケーションのソースファイルとアセットの変更を継続的にモニタリングします。変更が検出されると、指定されたスタックのデプロイがすぐに実行されます。

デフォルトでは、これらのデプロイは --hotswapフラグを使用します。これにより、Lambda 関数への変更のデプロイが高速に追跡されます。また、インフラストラクチャ設定を変更 AWS CloudFormation した場合は、 を通じてデプロイされます。がcdk watch常にフル AWS CloudFormation デプロイを実行するには、 --no-hotswapフラグを に追加しますcdk watch

cdk watch が既にデプロイを実行している間に加えられた変更は 1 つのデプロイに統合され、進行中のデプロイが完了するとすぐに開始されます。

監視モードでは、プロジェクトの の"watch"キーを使用してcdk.json、監視するファイルを決定します。デフォルトでは、これらのファイルはアプリケーションファイルとアセットですが、"watch"キーの "include"および "exclude"エントリを変更することで変更できます。次のcdk.jsonファイルは、これらのエントリの例を示しています。

{ "app": "mvn -e -q compile exec:java", "watch": { "include": "src/main/**", "exclude": "target/*" } }

cdk watch は から "build" コマンドを実行してcdk.json、合成前にアプリケーションを構築します。デプロイで Lambda コードを構築またはパッケージ化するためのコマンド (または CDK アプリにないその他のコマンド) が必要な場合は、ここに追加します。

Git スタイルのワイルドカードは、 *と の両方で**"watch" および "build"キーで使用できます。各パスは、 の親ディレクトリに対して解釈されますcdk.json。のデフォルト値は includeです。つまり**/*、プロジェクトのルートディレクトリ内のすべてのファイルとディレクトリです。 excludeはオプションです。

重要

本番稼働用デプロイでは、監視モードはお勧めしません。

AWS CloudFormation パラメータの指定

Toolkit は、デプロイ時の AWS CloudFormation パラメータの指定 AWS CDK をサポートしています。これらは、 --parametersフラグの後のコマンドラインで指定できます。

cdk deploy MyStack --parameters uploadBucketName=UploadBucket

複数のパラメータを定義するには、複数の--parametersフラグを使用します。

cdk deploy MyStack --parameters uploadBucketName=UpBucket --parameters downloadBucketName=DownBucket

複数のスタックをデプロイする場合は、スタックごとに各パラメータの異なる値を指定できます。そのためには、 パラメータの名前の前にスタック名とコロンを付けます。それ以外の場合、同じ値がすべてのスタックに渡されます。

cdk deploy MyStack YourStack --parameters MyStack:uploadBucketName=UploadBucket --parameters YourStack:uploadBucketName=UpBucket

デフォルトでは、 は以前のデプロイのパラメータの値 AWS CDK を保持し、明示的に指定されていない場合は後のデプロイで使用します。--no-previous-parameters フラグを使用して、すべてのパラメータを指定する必要があります。

出力ファイルの指定

スタックが AWS CloudFormation 出力を宣言した場合、これらは通常、デプロイの終了時に画面に表示されます。JSON 形式でファイルに書き込むには、 --outputs-fileフラグを使用します。

cdk deploy --outputs-file outputs.json MyStack

セキュリティ関連の変更

セキュリティ体制に影響する意図しない変更から保護するために、 AWS CDK ツールキットは、セキュリティ関連の変更をデプロイする前に承認するように促します。承認が必要な変更のレベルを指定できます。

cdk deploy --require-approval LEVEL

LEVEL は次のいずれかになります。

言葉

意味

never

承認は必要ない

any-change

IAM または security-group-related 変更の承認が必要

broadening(デフォルト)

IAM ステートメントまたはトラフィックルールを追加するときに承認が必要。削除には承認が必要ではない

設定は cdk.json ファイルで設定することもできます。

{ "app": "...", "requireApproval": "never" }

スタックの比較

cdk diff コマンドは、アプリケーションで定義されているスタックの最新バージョン (およびその依存関係) を、既にデプロイされているバージョン、または保存された AWS CloudFormation テンプレートと比較し、変更のリストを表示します。

Stack HelloCdkStack
IAM Statement Changes
┌───┬──────────────────────────────┬────────┬──────────────────────────────┬──────────────────────────────┬───────────┐
│   │ Resource                     │ Effect │ Action                       │ Principal                    │ Condition │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${Custom::S3AutoDeleteObject │ Allow  │ sts:AssumeRole               │ Service:lambda.amazonaws.com │           │
│   │ sCustomResourceProvider/Role │        │                              │                              │           │
│   │ .Arn}                        │        │                              │                              │           │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${MyFirstBucket.Arn}         │ Allow  │ s3:DeleteObject*             │ AWS:${Custom::S3AutoDeleteOb │           │
│   │ ${MyFirstBucket.Arn}/*       │        │ s3:GetBucket*                │ jectsCustomResourceProvider/ │           │
│   │                              │        │ s3:GetObject*                │ Role.Arn}                    │           │
│   │                              │        │ s3:List*                     │                              │           │
└───┴──────────────────────────────┴────────┴──────────────────────────────┴──────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│   │ Resource                                               │ Managed Policy ARN                                     │
├───┼────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ + │ ${Custom::S3AutoDeleteObjectsCustomResourceProvider/Ro │ {"Fn::Sub":"arn:${AWS::Partition}:iam::aws:policy/serv │
│   │ le}                                                    │ ice-role/AWSLambdaBasicExecutionRole"}                 │
└───┴────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)

Parameters
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/S3Bucket AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3BucketBF7A7F3F: {"Type":"String","Description":"S3 bucket for asset \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/S3VersionKey AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626: {"Type":"String","Description":"S3 key for asset version \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/ArtifactHash AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392ArtifactHashE56CD69A: {"Type":"String","Description":"Artifact hash for asset \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}

Resources
[+] AWS::S3::BucketPolicy MyFirstBucket/Policy MyFirstBucketPolicy3243DEFD
[+] Custom::S3AutoDeleteObjects MyFirstBucket/AutoDeleteObjectsCustomResource MyFirstBucketAutoDeleteObjectsCustomResourceC52FCF6E
[+] AWS::IAM::Role Custom::S3AutoDeleteObjectsCustomResourceProvider/Role CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092
[+] AWS::Lambda::Function Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F
[~] AWS::S3::Bucket MyFirstBucket MyFirstBucketB8884501
 ├─ [~] DeletionPolicy
 │   ├─ [-] Retain
 │   └─ [+] Delete
 └─ [~] UpdateReplacePolicy
     ├─ [-] Retain
     └─ [+] Delete

アプリケーションのスタックを既存のデプロイと比較するには:

cdk diff MyStack

アプリケーションのスタックを保存済み CloudFormation テンプレートと比較するには:

cdk diff --template ~/stacks/MyStack.old MyStack

スタックへの既存リソースのインポート

cdk import コマンドを使用して、特定の AWS CDK スタック CloudFormation の の管理下にリソースを取り込むことができます。これは、 に移行する場合、スタック間でリソースを移動する場合 AWS CDK、または論理 ID を変更する場合に便利です。 は CloudFormation リソースのインポート cdk importを使用します。ここにインポートできるリソースのリストを参照してください

既存のリソースを AWS CDK スタックにインポートするには、次のステップに従います。

  • リソースが現在他の CloudFormation スタックによって管理されていないことを確認します。その場合は、まずリソースが現在存在するスタックRemovalPolicy.RETAINの削除ポリシーを に設定し、デプロイを実行します。次に、スタックからリソースを削除し、別のデプロイを実行します。このプロセスにより、リソースは によって管理されなくなり CloudFormation 、削除されなくなります。

  • を実行してcdk diff、リソースをインポートする AWS CDK スタックに保留中の変更がないことを確認します。「インポート」オペレーションで許可される変更は、インポートする新しいリソースの追加のみです。

  • スタックにインポートするリソースのコンストラクトを追加します。例えば、Amazon S3 バケットをインポートする場合は、 のようなものを追加しますnew s3.Bucket(this, 'ImportedS3Bucket', {});。他のリソースに変更を加えないでください。

    また、リソースが現在定義に持っている状態を正確にモデル化する必要があります。バケットの例については、 AWS KMS キー、ライフサイクルポリシー、およびバケットに関連するその他のものを必ず含めてください。そうしないと、後続の更新オペレーションが期待どおりに動作しない可能性があります。

    物理バケット名を含めるかどうかを選択できます。通常、リソースを複数回デプロイしやすくするために、 AWS CDK リソース定義にリソース名を含めないことをお勧めします。

  • cdk import STACKNAME を実行します。

  • リソース名がモデルにない場合、インポートするリソースの実際の名前を渡すように CLI から求められます。その後、インポートが開始されます。

  • が成功cdk importを報告すると、リソースは AWS CDK と によって管理されるようになりました CloudFormation。 AWS CDK アプリケーション内のリソースプロパティに後続の変更を加えた場合、コンストラクト設定は次回のデプロイに適用されます。

  • AWS CDK アプリのリソース定義がリソースの現在の状態と一致することを確認するには、CloudFormation ドリフト検出オペレーション を開始できます。

この機能は現在、ネストされたスタックへのリソースのインポートをサポートしていません。

設定 (cdk.json

多くの CDK Toolkit コマンドラインフラグのデフォルト値は、プロジェクトの cdk.json ファイルまたはユーザーディレクトリの .cdk.json ファイルに保存できます。以下は、サポートされている構成設定のアルファベット順のリファレンスです。

キー メモ CDK Toolkit オプション
app CDK アプリケーションを実行するコマンド。 --app
assetMetadata の場合false、CDK はアセットを使用するリソースにメタデータを追加しません。 --no-asset-metadata
bootstrapKmsKeyId Amazon S3 デプロイバケットの暗号化に使用される AWS KMS キーの ID を上書きします。 Amazon S3 --bootstrap-kms-key-id
build 合成前に CDK アプリケーションをコンパイルまたは構築するコマンド。では許可されていません~/.cdk.json --build
browser cdk docs サブコマンドのウェブブラウザを起動するためのコマンド。 --browser
context ランタイムのコンテキスト を参照してください。設定ファイルのコンテキスト値は、 によって消去されませんcdk context --clear。(CDK Toolkit はキャッシュされたコンテキスト値を に配置します)cdk.context.json --context
debug の場合true、CDK Toolkit はデバッグに役立つより詳細な情報を出力します。 --debug
language 新しいプロジェクトの初期化に使用される言語。 --language
lookups の場合false、コンテキスト検索は許可されません。コンテキスト検索を実行する必要がある場合、合成は失敗します。 --no-lookups
notices の場合false、セキュリティの脆弱性、リグレッション、サポートされていないバージョンに関するメッセージの表示を抑制します。 --no-notices
output 合成されたクラウドアセンブリが出力されるディレクトリの名前 (デフォルトは "cdk.out")。 --output
outputsFile デプロイされたスタックからの AWS CloudFormation 出力が書き込まれるファイル (JSON 形式)。 --outputs-file
pathMetadata の場合false、CDK パスメタデータは合成されたテンプレートに追加されません。 --no-path-metadata
plugin CDK を拡張するパッケージ名またはパッケージのローカルパスを指定する JSON 配列 --plugin
profile リージョンとアカウントの認証情報の指定に使用されるデフォルト AWS プロファイルの名前。 --profile
progress に設定すると"events"、CDK Toolkit はデプロイ中のすべての AWS CloudFormation イベントを、進行状況バーではなく表示します。 --progress
requireApproval セキュリティ変更のデフォルトの承認レベル。「セキュリティ関連の変更」を参照 --require-approval
rollback の場合false、失敗したデプロイはロールバックされません。 --no-rollback
staging の場合false、アセットは出力ディレクトリにコピーされません ( を使用したソースファイルのローカルデバッグに使用します AWS SAM)。 --no-staging
tags スタックのタグ (キーと値のペア) を含む JSON オブジェクト。 --tags
toolkitBucketName Lambda 関数やコンテナイメージなどのアセットのデプロイに使用される Amazon S3 バケットの名前 (「」を参照してくださいAWS 環境のブートストラップ --toolkit-bucket-name
toolkitStackName ブートストラップスタックの名前 (「」を参照してくださいAWS 環境のブートストラップ --toolkit-stack-name
versionReporting の場合false、 はバージョンレポートをオプトアウトします。 --no-version-reporting
watch 変更時にプロジェクトの再構築をトリガーする (またはトリガーしない) ファイルを示す "include"および "exclude"キーを含む JSON オブジェクト。「監視モード」を参照してください。 --watch