これは 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
、その後にサブコマンド (list
、synthesize
、 deploy
など) が続きます。一部のサブコマンドには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-sessionmy-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
。--profile オプションまたはNAME
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
--languageLANGUAGE
サポートされている言語 (言語 )
は次のとおりです。
Code |
[言語] |
---|---|
|
TypeScript |
|
JavaScript |
|
Python |
|
Java |
|
C# |
TEMPLATE
はオプションのテンプレートです。目的のテンプレートがアプリケーション の場合、デフォルトは省略できます。使用可能なテンプレートは次のとおりです。
テンプレート |
説明 |
---|---|
|
空の AWS CDK アプリケーションを作成します。 |
|
Amazon SQS キューと Amazon SNS トピックを含むスタックを持つ AWS CDK アプリケーションを作成します。 |
テンプレートは、プロジェクトフォルダの名前を使用して、新しいアプリケーション内のファイルとクラスの名前を生成します。
スタックの一覧表示
AWS CDK アプリケーション内のスタックの IDs のリストを表示するには、次のいずれかの同等のコマンドを入力します。
cdk list cdk ls
アプリケーションに CDK Pipelines スタックが含まれている場合、CDK Toolkit はパイプライン階層内の場所に応じてスタック名をパスとして表示します。(例えば、PipelineStack
、PipelineStack/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
は次のいずれかになります。
言葉 |
意味 |
---|---|
|
承認は不要 |
|
IAM または security-group-related 変更の承認が必要 |
|
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 |