AWS CDK CLI リファレンス - AWS Cloud Development Kit (AWS CDK) v2

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

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

AWS CDK CLI リファレンス

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

CDK CLI は Node Package Manager と共にインストールされます。ほとんどの場合、グローバルにインストールすることが推奨されます。

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

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

CDK CLI commands

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

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

オプションとその値を指定する

コマンドラインオプションは、2 つのハイフン (--) で始まります。よく使用されるオプションの中には、1 つのハイフンで始まる 1 文字のシノニムを持つものがあります (たとえば、--app には -a というシノニムがあります)。のオプション順序 CDK CLI コマンドは重要ではありません。

すべてのオプションは値を受け入れ、値はオプション名の後に記述する必要があります。値は、スペースまたは等号記号 (=) で名前と区切ることができます。以下の 2 つのオプションは同じ意味になります。

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

一部のオプションはフラグ (ブール値) です。値として true または false を指定できます。値を指定しない場合、値は 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 というオプションでは、複数の値を指定するために複数回指定することができます。これらは、 [array] CDKCLI ヘルプ。以下に例を示します。

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

組み込みヘルプ

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

cdk --help

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

cdk deploy --help

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

バージョンのレポート

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

注記

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

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

  • AWS CDK コアモジュール

  • AWS コンストラクトライブラリモジュール

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

  • AWS Render Farm Deployment Kit モジュール

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

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

Analytics プロパティは、スタック内のコンストラクトのリストを gzip圧縮し、base64 エンコードして、プレフィックスエンコードしたものです。

バージョンレポートのオプトアウト

バージョンレポートは、 を使用してオプトアウトできます。 CDKCLI または、プロジェクトの cdk.json ファイルを設定します。

を使用してバージョンレポートをオプトアウトするには CDK CLI
  • 任意の で --no-version-reportingオプションを使用する CDK CLI 1 つのコマンドをオプトアウトする コマンド。テンプレート合成中にオプトアウトする場合の例を以下に示します。

    $ cdk synth --no-version-reporting

    を実行すると AWS CDK によってテンプレートが自動的に合成されるためcdk deploycdk deploy コマンド--no-version-reportingで も使用する必要があります。

cdk.json ファイルを設定してバージョンレポートをオプトアウトするには
  • ./cdk.json または ~/.cdk.jsonversionReportingfalse に設定します。これにより、デフォルトでオプトアウトされます。以下に例を示します。

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

    設定後でも、個別のコマンドで --version-reporting を指定することで、この動作を上書きしてオプトインすることができます。

注記

バージョンレポートをオプトアウトすると、 AWS CDK は使用しているコンストラクトに関するデータを収集またはレポートしません。このため、 AWS CDK はセキュリティ問題の影響を受けたかどうかを特定できず、通知を送信しません。

による認証 AWS

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

認証方法を選択し、 用に設定するには CDK CLI「AWS CDKCLI のセキュリティ認証情報を設定する」を参照してください。

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

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

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

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

  • CDK CLI は、リクエストを送信する前に、プロファイルの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 のサービス、 のアクティブな AWS アクセスポータルセッションが必要です。 CDKCLI IAM Identity Center 認証を使用して認証情報を解決する 。設定したセッションの長さに応じて、アクセスは最終的に期限切れになり、 CDKCLI で認証エラーが発生します。アクセス AWS ポータルにサインイン AWS CLI するには、 で次のコマンドを実行します。

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 CLI は、デプロイ先の AWS リージョンと認証方法を知る必要があります AWS。これは、デプロイ操作および合成中のコンテキスト値の取得に必要です。アカウントとリージョンは、一緒に環境を構成します。

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

  • AWS_DEFAULT_REGION 環境変数。

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

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

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

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

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

注記

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

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

アプリケーションコマンドを指定する

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

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

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

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

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

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

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

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

スタックを指定する

多数 CDK CLI コマンド ( などcdk deploy) は、アプリで定義されたスタックで機能します。アプリケーションにスタックが 1 つだけ含まれている場合、 CDKCLI は、スタックを明示的に指定しない場合、スタックであると仮定します。

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

cdk synth PipelineStack LambdaStack

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

  • ? は、任意の 1 文字にマッチします

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

  • ** 階層内のすべてにマッチします

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

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

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

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
注記

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

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

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

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、 AWSKMSキーが作成され、環境ごとに料金が発生します。

注記

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

注記

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

重要

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

新しいエイリアスの作成

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

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

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

コード

言語

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 スタックが含まれている場合、 CDKCLI は、パイプライン階層内の場所に応じてスタック名をパスとして表示します。(例: PipelineStackPipelineStack/ProdPipelineStack/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 CLI は実際にアプリケーションを実行し、ほとんどのオペレーション (スタックのデプロイ時や比較時など) の前に新しいテンプレートを合成します。これらのテンプレートは、デフォルトで 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 CLI はアプリを実行し、何もデプロイする前に新しい 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 継承します。

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

このため、 CDKCLI では、 --no-rollbackcdk deployコマンドに追加することでロールバックを無効にできます。このフラグがあると、失敗したデプロイもロールバックされません。代わりに、障害が発生したリソースの前にデプロイされたリソースはそのまま残り、次のデプロイは障害が発生したリソースから始まります。デプロイを待つ時間が大幅に短縮され、インフラストラクチャの開発により多くの時間をかけられるようになります。

ホットスワップ

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

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

重要

ホットスワップは、本番稼働環境のデプロイにはお勧めしません。

ウォッチモード

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

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

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

ウォッチモードでは、モニタリングするファイルを決定するために、プロジェクトの cdk.json にある "watch" キーを使用します。デフォルトでは、これらのファイルはアプリケーションファイルおよびアセットですが、"watch" キーの "include" および "exclude" エントリを変更することで変更できます。cdk.json ファイルの内容の例を以下に示します。

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

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

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

重要

本番稼働環境のデプロイでは、監視モードはおすすめしません。

AWS CloudFormation パラメータを指定する

CDK CLI では、デプロイ時の AWS CloudFormation パラメータの指定がサポートされています。これらは、--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

セキュリティ関連の変更を承認する

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

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 CLI コマンドラインフラグは、プロジェクトの cdk.json ファイルまたはユーザーディレクトリの .cdk.json ファイルに保存できます。以下は、サポートされている設定のアルファベット順のリファレンスです。

キー メモ CDK CLI option
app CDK アプリケーションを実行するコマンド。 --app
assetMetadata の場合false、 CDKはアセットを使用するリソースにメタデータを追加しません。 --no-asset-metadata
bootstrapKmsKeyId Amazon S3 デプロイバケットの暗号化に使用される AWS KMS キーの ID を上書きします。 --bootstrap-kms-key-id
build 合成前にCDKアプリケーションをコンパイルまたは構築するコマンド。~/.cdk.json では許可されていません。 --build
browser cdk docs サブコマンドのウェブブラウザを起動するためのコマンド。 --browser
context コンテキスト値と AWS CDK」を参照してください。設定ファイルのコンテキスト値は、cdk context --clear によって消去されません。( CDK CLI はキャッシュされたコンテキスト値を に配置します)cdk.context.json --context
debug の場合true、 CDKCLI は、デバッグに役立つより詳細な情報を出力します。 --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 JSON を拡張するパッケージのパッケージ名またはローカルパスを指定する 配列 CDK --plugin
profile リージョンとアカウントの認証情報の指定に使用されるデフォルト AWS プロファイルの名前。 --profile
progress に設定すると"events"、 CDKCLI は、デプロイ中に、進行状況バーではなくすべての 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 JSON 変更時にプロジェクトの再構築をトリガーする (またはトリガーしない) ファイルを示す "include"および "exclude"キーを含む オブジェクト。「ウォッチモード」を参照してください。 --watch