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 ツールキットは 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など) が続きます。一部のサブコマンドのバージョン (lssynthなど) は同等です。オプションと引数は、任意の順序で サブコマンドに従います。使用可能なコマンドをここにまとめます。

Command

機能

cdk list (ls)

アプリケーション内のスタックを一覧表示します。

cdk synthesize (synth)

1 つ以上の指定されたスタックの CloudFormation テンプレートを合成して出力します。

cdk bootstrap

CDK Toolkit ステージングスタックをデプロイします。「」を参照してください。 ブートストラッピング

cdk deploy

1 つ以上の指定されたスタックをデプロイします

cdk destroy

1 つ以上の指定されたスタックを破棄します。

cdk diff

指定されたスタックとその依存関係を、デプロイされたスタックまたはローカル CloudFormation テンプレートと比較します。

cdk import

CloudFormation リソースのインポートを使用して、既存のリソースを CDK によって管理されるスタックに取り込む

cdk metadata

指定されたスタックに関するメタデータを表示します。

cdk init

指定されたテンプレートから現在のディレクトリに新しい CDK プロジェクトを作成します。

cdk context

キャッシュされたコンテキスト値を管理します。

cdk docs (doc)

ブラウザで CDK API リファレンスを開きます。

cdk doctor

CDK プロジェクトに潜在的な問題がないか確認します。

各コマンドで使用できるオプションについては、「」を参照してください組み込みヘルプ

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

コマンドラインオプションは 2 つのハイフン () で始まります--。頻繁に使用されるオプションには、単一のハイフンで始まる単一文字のシノニム (シノニム を持つなど-a) --appがあります。 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

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

バージョンレポート

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

注記

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

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

  • AWS CDK コアモジュール

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

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

  • AWS レンダーファームデプロイキットモジュール

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

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

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

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

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

    cdk --no-version-reporting synth

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

  • ./cdk.json または で versionReportingfalse に設定します~/.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 リクエスト AWS リージョン で AWS CDK および CDK Toolkit が使用するデフォルトの が設定されます。

  • 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。これは、デプロイ操作と合成中のコンテキスト値の取得に必要です。アカウントとリージョンが一緒に環境 を構成します。

リージョンは、環境変数または設定ファイルを使用して指定できます。これらは、 やさまざまな AWS SDK などの他の AWS ツールで使用されるのと同じ変数 AWS CLI とファイルです。 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。例えば、cdk.json新しい TypeScript プロジェクトの を次に示します。

{ "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 はスタックを 1 つとして見なします。

それ以外の場合は、使用する 1 つまたは複数のスタックを指定する必要があります。これを行うには、コマンドラインで 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

サポートされている言語 (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/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 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 では、 --no-rollbackcdk deployコマンドに追加してロールバックを無効にできます。このフラグを使用すると、失敗したデプロイはロールバックされません。代わりに、失敗したリソースの前にデプロイされたリソースはそのまま残り、次のデプロイは失敗したリソースで開始されます。デプロイの待ち時間を大幅に短縮し、インフラストラクチャの開発に多くの時間を費やすことになります。

ホットスワップ

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

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

重要

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

監視モード

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

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

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

監視モードでは、プロジェクトの の "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

レベルは、次のいずれかになります。

言葉

意味

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 を変更する場合に便利です。 cdk import CloudFormation リソースのインポートを使用します。ここでインポートできるリソースのリストを参照してください。

既存のリソースを 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 ツールキットオプション
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