

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

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

# AWS CDK CLI リファレンス
<a name="cli"></a>

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

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

## CDK CLI コマンド
<a name="cli-commands"></a>

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

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

## オプションとその値を指定する
<a name="cli-options"></a>

コマンドラインオプションは、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` というオプションでは、複数の値を指定するために複数回指定することができます。これらは、CDK CLI のヘルプでは `[array]` 型として記載されています。例えば、次のようになります。

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

## 組み込みヘルプ
<a name="cli-help"></a>

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

```
cdk --help
```

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

```
cdk deploy --help
```

`cdk version` を発行すると、CDK CLI のバージョンが表示されます。サポートをリクエストするときは、この情報を入力します。

## バージョンのレポート
<a name="version-reporting"></a>

 AWS CDK の使用方法を把握するために、 AWS CDK アプリケーションで使用されるコンストラクトは、 として識別されるリソースを使用して収集および報告されます` AWS::CDK::Metadata`。詳細については、[AWS 「CDK 使用状況データレポートの設定](usage-data.md)」を参照してください。

## による認証 AWS
<a name="cli-auth"></a>

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

認証方法を選択し、CDK CLI 用に設定するには、[AWS 「CDK CLI のセキュリティ認証情報を設定する](configure-access.md)」を参照してください。

雇用主から認証方法が与えられていない、ローカルで開発する新しいユーザーに推奨されるアプローチは、IAM Identity Center AWS をセットアップすることです。この方法には、設定を容易にし、 AWS アクセスポータルに定期的にサインインするための AWS CLI のインストールが含まれます。この方法を選択した場合、* AWS SDKs およびツールリファレンスガイド*の [IAM アイデンティティセンター認証](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)の手順を完了した後、環境に次の要素が含まれている必要があります。
+ アプリケーションを実行する前に AWS アクセスポータルセッションを開始するために使用する AWS CLI。
+  AWS CDK [AWS から参照できる一連の設定値を持つプロファイルを持つ共有設定ファイル](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。 `[default]`このファイルの場所を確認するには、 * AWS SDKs およびツールリファレンスガイド*[の共有ファイルの場所](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)を参照してください。
+ 共有 `config` ファイルは[リージョン](https://docs.aws.amazon.com/sdkref/latest/guide/feature-region.html)設定を設定します。これにより、CDK および AWS CDK CLI が AWS リクエストに使用するデフォルトの AWS リージョンが設定されます。
+ CDK CLI は、リクエストを AWSに送信する前に、プロファイルの [SSO トークンプロバイダー設定](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#feature-sso-credentials-profile)を使用して認証情報を取得します。IAM Identity Center アクセス許可セットに接続された IAM ロールである `sso_role_name`値は、アプリケーションで使用される AWS サービスへのアクセスを許可する必要があります。

  次のサンプル `config` ファイルは、SSO トークンプロバイダー設定で設定されたデフォルトプロファイルを示しています。プロファイルの `sso_session` 設定は、指定された [`sso-session` セクション](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#section-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 アクセスポータルセッションを開始する
<a name="accessportal"></a>

 AWS サービスにアクセスする前に、CDK CLI が IAM Identity Center 認証を使用して認証情報を解決するためのアクティブな AWS アクセスポータルセッションが必要です。設定したセッションの長さによっては、アクセスが最終的に期限切れになり、CDK CLI で認証エラーが発生します。CLI AWS で次のコマンドを実行して、 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`、認証情報を指定する必要はありません。  
サインインプロセスでは、CLI AWS にデータへのアクセスを許可するように求められる場合があります。 AWS CLI は SDK for Python 上に構築されているため、アクセス許可メッセージには`botocore`名前のバリエーションが含まれている可能性があります。

## リージョンおよびその他の設定を指定する
<a name="cli-environment"></a>

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

リージョンは、環境変数または設定ファイルで指定できます。これらは、 CLI や variousSDK AWS などの他の AWS ツールで使用される変数とファイルと同じです。 AWS SDKs CDK CLI は、この情報を次の順序で検索します。
+ `AWS_DEFAULT_REGION` 環境変数。
+ 標準 AWS `config`ファイルで定義され、 `cdk` コマンドの `--profile`オプションを使用して指定された名前付きプロファイル。
+ 標準 AWS `config`ファイルの `[default]`セクション。

`[default]` セクションで AWS 認証とリージョンを指定するだけでなく、1 つ以上の`[profile <NAME>]`セクションを追加することもできます。ここで、 `<NAME>`はプロファイルの名前です。名前付きプロファイルの詳細については、 SDK およびツールリファレンスガイドの[「共有設定ファイルと認証情報ファイル](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)」を参照してください。 * AWS SDKs *

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

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

**注記**  
 AWS CDK は、[AWS コマンドラインインターフェイス](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)を含む他の AWS ツールや SDKs と同じソースファイルからの認証情報を使用します。ただし、 AWS CDK の動作はこれらのツールと多少異なる場合があります。内部で AWS SDK for JavaScript を使用します。 AWS SDK for JavaScript の認証情報の設定の詳細については、[「認証情報の設定](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials.html)」を参照してください。

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

## アプリケーションコマンドを指定する
<a name="cli-app-command"></a>

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

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

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

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

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

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

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

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

## スタックを指定する
<a name="cli-stacks"></a>

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

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

```
cdk synth PipelineStack LambdaStack
```

ワイルドカードを使用して、パターンに一致する ID を指定することもできます。
+  `?` は、任意の 1 文字にマッチします
+  `*` は任意の数の文字にマッチします (`*` 単独ではすべてのスタックにマッチします)
+  `**` 階層内のすべてにマッチします

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

アプリケーションが [CDK Pipelines](cdk-pipeline.md) を使用している場合、CDK CLI はスタックとステージを階層として理解します。また、`--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()](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Stack.html#addwbrdependencytarget-reason) ` メソッドを使用して、スタック間に依存関係を手動で追加できます。

## AWS 環境のブートストラップ
<a name="cli-bootstrap"></a>

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

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

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

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

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

## 新しいエイリアスの作成
<a name="cli-init"></a>

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

```
mkdir my-cdk-app
cd my-cdk-app
cdk init <TEMPLATE> --language <LANGUAGE>
```

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


| コード | Language | 
| --- | --- | 
|   `typescript`   |  TypeScript  | 
|   `javascript`   |  JavaScript  | 
|   `python`   |  Python  | 
|   `java`   |  Java  | 
|   `csharp`   |  C\$1  | 
|   `Go`   |  Go  | 

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


| テンプレート | 説明 | 
| --- | --- | 
|   `app` (デフォルト)  |  空の AWS CDK アプリを作成します。  | 
|   `sample-app`   |  Amazon SQS キューと Amazon SNS トピックを含むスタックを使用して AWS CDK アプリを作成します。  | 

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

## スタックを一覧表示する
<a name="cli-list"></a>

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

```
cdk list
cdk ls
```

アプリケーションに [CDK Pipelines](cdk-pipeline.md) スタックが含まれている場合、CDK CLI はパイプライン階層内の場所に応じてスタック名をパスとして表示します。(例: `PipelineStack`、`PipelineStack/Prod`、`PipelineStack/Prod/MyService`。)

アプリケーションに多くのスタックが含まれている場合は、一覧表示するスタックのスタック ID の全部または一部を指定できます。詳細については、「[スタックを指定する](#cli-stacks)」を参照してください。

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

## スタックを合成する
<a name="cli-synth"></a>

`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` を参照してください。最も頻繁に使用されるオプションのいくつかについて、次のセクションで説明します。

### コンテキスト値を指定する
<a name="cli-specify-context"></a>

`--context` または `-c` オプションを使用して、[ランタイムコンテキスト](context.md)値を 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
```

### 表示形式を指定する
<a name="cli-specify-format"></a>

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

```
cdk synth --json MyStack
```

### 出力ディレクトリを指定する
<a name="cli-specify-output"></a>

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

```
cdk synth --output=~/templates
```

## スタックをデプロイする
<a name="cli-deploy"></a>

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

使用可能なすべてのオプションについては、`cdk deploy --help` を参照してください。以下のセクションでは、最も有用なオプションをいくつか説明します。

### 合成をスキップする
<a name="cli-deploy-nosynth"></a>

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

```
cdk deploy --app cdk.out StackOne StackTwo
```

### ロールバックを無効にする
<a name="cli-deploy-norollback"></a>

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

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

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

### ホットスワップ
<a name="cli-deploy-hotswap"></a>

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

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

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

### ウォッチモード
<a name="cli-deploy-watch"></a>

CDK CLI のウォッチモード (`cdk deploy --watch` または略して `cdk 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 watch` は `cdk.json` から `"build"` コマンドを実行して、合成前にアプリケーションを構築します。デプロイで Lambda コード (または CDK アプリにない他のもの) を構築またはパッケージ化するためのコマンドが必要な場合は、ここに追加します。

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

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

### Specify AWS CloudFormation パラメータ
<a name="cli-specify-parameters"></a>

CDK CLI は、デプロイ時の AWS CloudFormation [パラメータ](parameters.md)の指定をサポートしています。これらは、`--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` フラグを使用します。

### 出力ファイルを指定する
<a name="cli-specify-outputs-file"></a>

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

```
cdk deploy --outputs-file outputs.json MyStack
```

### セキュリティ関連の変更を承認する
<a name="cli-security"></a>

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

```
cdk deploy --require-approval <LEVEL>
```

 `<LEVEL>` の値は次のいずれかを指定できます。


| 言葉 | 意味 | 
| --- | --- | 
|   `never`   |  承認は不要  | 
|   `any-change`   |  IAM またはセキュリティグループ関連の変更には承認が必要です  | 
|   `broadening` (デフォルト)  |  IAM ステートメントまたはトラフィックルールが追加されたときは承認が必要です。削除に承認は必要ありません。  | 

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

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

## スタックの比較
<a name="cli-diff"></a>

`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
```

## スタックへの既存リソースのインポート
<a name="cli-import"></a>

`cdk import` コマンドを使用して、特定の AWS CDK スタックの CloudFormation の管理下にリソースを持ち込むことができます。これは、 AWS CDK に移行する場合、スタック間でリソースを移動する場合、または論理 ID を変更する場合に便利です。 は [CloudFormation リソースのインポート](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html)`cdk import`を使用します。[ここでインポートできるリソースのリスト](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html)を参照してください。

既存のリソースを AWS CDK スタックにインポートするには、次のステップに従います。
+ リソースが他の CloudFormation スタックによって現在管理されていないことを確認します。管理されている場合は、まずリソースが現在存在するスタックで、削除ポリシーを `RemovalPolicy.RETAIN` に設定し、デプロイを実行します。次に、スタックからリソースを削除し、別のデプロイを実行します。このプロセスにより、リソースが CloudFormation によって管理されなくなり、削除されなくなります。
+ を実行して`cdk diff`、リソースをインポートする AWS CDK スタックに保留中の変更がないことを確認します。「インポート」オペレーションで許可される変更は、インポートする新しいリソースの追加のみです。
+ スタックにインポートするリソースのコンストラクトを追加します。たとえば、Amazon S3 バケットをインポートする場合は、`new s3.Bucket(this, 'ImportedS3Bucket', {});` のようなものを追加します。他のリソースに変更を加えないでください。

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

  物理バケット名を含めるかどうかを選択できます。通常、リソースを複数回デプロイしやすくするために、リソース名を AWS CDK リソース定義に含めないことをお勧めします。
+ `cdk import <STACKNAME>` を実行します。
+ リソース名がモデルにない場合、CLI はインポートするリソースの実際の名前を渡すようにプロンプトを表示します。その後、インポートが開始されます。
+ が成功`cdk import`を報告すると、リソースは AWS CDK と CloudFormation によって管理されるようになりました。 AWS CDK アプリのリソースプロパティに後続の変更を加えると、コンストラクト設定が次のデプロイに適用されます。
+  AWS CDK アプリのリソース定義がリソースの現在の状態と一致することを確認するには、[CloudFormation ドリフト検出オペレーション](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)を開始できます。

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

## 設定 (`cdk.json`)
<a name="cli-config"></a>

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


| Key | 注意事項 | CDK CLI オプション | 
| --- | --- | --- | 
|   `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 を参照してください](context.md)。設定ファイルのコンテキスト値は、`cdk context --clear` によって消去されません。(CDK CLI はキャッシュされたコンテキスト値を `cdk.context.json` に配置します)。  |   `--context`   | 
|   `debug`   |  `true` の場合、CDK CLI はデバッグに役立つより詳細な情報を出力します。  |   `--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 CLI はデプロイ中に進行状況バーではなくすべての AWS CloudFormation イベントを表示します。  |   `--progress`   | 
|   `requireApproval`   |  セキュリティ変更のデフォルトの承認レベル。「[セキュリティ関連の変更を承認する](#cli-security)」を参照してください。  |   `--require-approval`   | 
|   `rollback`   |  `false` の場合、失敗したデプロイはロールバックされません。  |   `--no-rollback`   | 
|   `staging`   |  の場合`false`、アセットは出力ディレクトリにコピーされません (SAM AWS を使用したソースファイルのローカルデバッグに使用します）。  |   `--no-staging`   | 
|   `tags`   |   スタックのタグ (キーと値のペア) を含む `JSON` オブジェクト。  |   `--tags`   | 
|   `toolkitBucketName`   |  Lambda 関数やコンテナイメージなどのアセットのデプロイに使用される Amazon S3 バケットの名前 ([AWS 環境のブートストラップ](#cli-bootstrap)を参照）。  |   `--toolkit-bucket-name`   | 
|   `toolkitStackName`   |  ブートストラップスタックの名前 ([AWS 「環境のブートストラップ](#cli-bootstrap)」を参照）。  |   `--toolkit-stack-name`   | 
|   `versionReporting`   |  `false` の場合、バージョンレポートをオプトアウトします。  |   `--no-version-reporting`   | 
|   `watch`   |  変更時にプロジェクトの再構築をトリガーする (またはトリガーしない) ファイルを示す、`"include"` および `"exclude"` キーを含む JSON オブジェクト。「[ウォッチモード](#cli-deploy-watch)」を参照してください。  |   `--watch`   | 