

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護，並於 2023 年 6 月 1 日結束支援。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS CDK CLI 參考
<a name="cli"></a>

 AWS 雲端開發套件 (AWS CDK) 命令列界面 (AWS CDK CLI) 也稱為 CDK Toolkit，是與您的 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 版本。若要這樣做，`-g`請省略 `npm install`命令中的 。然後使用 `npx aws-cdk` 來叫用它。如果存在本機版本，這會執行本機版本，如果不存在，則會回復為全域版本。

## CDK CLI 命令
<a name="cli-commands"></a>

所有 CDK CLI 命令都以 開頭`cdk`，後面接著子命令 (`list`、`deploy`、 `synthesize`等）。有些子命令具有相當於 的較短版本 `ls`(`synth`、 等）。選項和引數會依任何順序遵循 子命令。

如需所有子命令、選項和引數的說明，請參閱 [AWS CDK CLI 命令參考](ref-cli-cmd.md)。

## 指定選項及其值
<a name="cli-options"></a>

命令列選項以兩個連字號 () 開頭`--`。有些常用選項具有以單一連字號開頭的單一字母同義詞 （例如， `--app`具有同義詞 `-a`)。CDK CLI 命令中的選項順序並不重要。

所有選項都接受值，該值必須遵循選項名稱。值可以用空格或等號 與名稱分隔`=`。下列兩個選項是相等的。

```
--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`、`--trust`、`--tags`、 `--parameters` `--plugin`和 ，以指定多個值。這些會在 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 CLI 版本`cdk version`的問題。在請求支援時提供此資訊。

## 版本報告
<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)。

對於未獲得其雇主身分驗證方法的本機開發新使用者，建議的方法為設定 AWS IAM Identity Center。此方法包括安裝 AWS CLI 以簡化組態，以及定期登入 AWS 存取入口網站。如果您選擇此方法，您的環境應該在您完成 * AWS SDKs和工具參考指南*中的 [IAM Identity Center 身分驗證](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)程序後包含下列元素：
+  AWS CLI，您用來在執行應用程式之前啟動 AWS 存取入口網站工作階段。
+ [共用 AWS 組態檔案](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)，其`[default]`設定檔具有一組可從 AWS CDK 參考的組態值。若要尋找此檔案的位置，請參閱 * 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)設定。這會設定 AWS CDK 和 CDK CLI 用於 AWS 請求的預設 AWS 區域。
+ CDK CLI 會使用設定檔的 [SSO 字符提供者組態](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#feature-sso-credentials-profile)，在傳送請求至 之前取得憑證 AWS。此`sso_role_name`值是連接至 IAM Identity Center 許可集的 IAM 角色，應允許存取您應用程式中使用 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 服務之前，您需要作用中的 AWS 存取入口網站工作階段，CDK CLI 才能使用 IAM Identity Center 身分驗證來解析登入資料。視您設定的工作階段長度而定，您的存取最終會過期，而 CDK CLI 將遇到身分驗證錯誤。在 CLI AWS 中執行下列命令以登入 AWS 存取入口網站。

```
aws sso login
```

如果您的 SSO 字符提供者組態使用具名描述檔而非預設描述檔，則命令為 `aws sso login --profile <NAME>`。使用 `--profile`選項或 `AWS_PROFILE`環境變數發出`cdk`命令時，也請指定此設定檔。

若要測試您是否已經有作用中的工作階段，請執行下列 CLI AWS 命令。

```
aws sts get-caller-identity
```

對此命令的回應，應報告共用 `config` 檔案中設定的 IAM Identity Center 帳戶和許可集合。

**注意**  
如果您已有作用中的 AWS 存取入口網站工作階段並執行 `aws sso login`，則不需要提供登入資料。  
登入程序可能會提示您允許 CLI AWS 存取您的資料。由於 AWS CLI 建置在適用於 Python 的 SDK 之上，因此許可訊息可能包含`botocore`名稱的變化。

## 指定區域和其他組態
<a name="cli-environment"></a>

CDK CLI 需要知道您要部署到 AWS 的區域，以及如何進行身分驗證 AWS。部署操作和在合成期間擷取內容值時需要此值。您的帳戶和區域共同構成*環境*。

可以使用環境變數或在組態檔案中指定區域。這些是 CLI AWS 和 AWS SDKs 等其他 AWS 工具所使用的相同變數和檔案。CDK CLI 會依下列順序尋找此資訊。
+ `AWS_DEFAULT_REGION` 環境變數。
+ 標準 AWS `config`檔案中定義的具名設定檔，並使用 `cdk` 命令上的 `--profile`選項指定。
+ 標準 AWS `config`檔案的 `[default]`區段。

除了在 `[default]`區段中指定 AWS 身分驗證和區域之外，您也可以新增一或多個`[profile <NAME>]`區段，其中 `<NAME>`是設定檔的名稱。如需具名設定檔的詳細資訊，請參閱 * AWS SDKs * [和工具參考指南中的共用組態和登入資料檔案](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。

標準 AWS `config`檔案位於 `~/.aws/config`(macOS/Linux) 或 `%USERPROFILE%\.aws\config`(Windows)。如需詳細資訊和替代位置，請參閱 * AWS SDKs * [和工具參考指南中的共用組態和登入資料檔案的位置](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html) 

您在 AWS CDK 應用程式中使用堆疊`env`屬性指定的環境會在合成期間使用。它用於產生環境特定的 AWS CloudFormation 範本，在部署期間，它會覆寫上述方法之一指定的帳戶或區域。如需詳細資訊，請參閱 [AWS CDK 的環境](environments.md)。

**注意**  
 AWS CDK 使用與其他 AWS 工具和 SDKs 相同的來源檔案的登入資料，包括 [AWS 命令列界面](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)。不過， AWS CDK 的行為可能與這些工具稍有不同。它在幕後使用適用於 JavaScript 的 AWS SDK。如需設定適用於 JavaScript 的 AWS SDK 登入資料的完整詳細資訊，請參閱[設定登入資料](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 的許多功能都需要合成一或多個 AWS CloudFormation 範本，進而需要執行您的應用程式。 AWS CDK 支援以各種語言撰寫的程式。因此，它會使用組態選項來指定執行應用程式所需的確切命令。此選項可以透過兩種方式指定。

首先，且最常見的是，它可以使用檔案 中的 `app`金鑰來指定`cdk.json`。這是在您 AWS CDK 專案的主要目錄中。使用 建立新專案時，CDK CLI 會提供適當的命令`cdk init`。例如，這是`cdk.json`來自全新 TypeScript 專案的 。

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

嘗試執行應用程式時，CDK CLI `cdk.json`會在目前的工作目錄中尋找 。因此，您可以在專案的主目錄中保持 Shell 開啟，以發出 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`) 適用於您應用程式中定義的堆疊。如果您的應用程式只包含一個堆疊，則 CDK CLI 假設您表示如果您未明確指定堆疊，則表示該堆疊。

否則，您必須指定要使用的堆疊。您可以透過在命令列上依 ID 個別指定所需的堆疊來執行此操作。請記住，當您執行個體化堆疊時，ID 是第二個引數指定的值。

```
cdk synth PipelineStack LambdaStack
```

您也可以使用萬用字元來指定符合模式的 IDs。
+  `?` 符合任何單一字元
+  `*` 符合任意數量的字元 (`*` 單獨符合所有堆疊）
+  `**` 符合階層中的所有項目

您也可以使用 `--all`選項來指定所有堆疊。

如果您的應用程式使用 [CDK 管道](cdk-pipeline.md)，CDK CLI 會了解您的堆疊和階段做為階層。此外， `--all`選項和`*`萬用字元僅符合頂層堆疊。若要符合所有堆疊，請使用 `**`。也請使用 `**` 來指示特定階層下的所有堆疊。

使用萬用字元時，請以引號括住模式，或使用 逸出萬用字元`\`。如果沒有，您的 shell 可能會嘗試將模式擴展到目前目錄中的檔案名稱。最理想的情況是，這不會如預期般執行；最糟糕的是，您可以部署不打算部署的堆疊。這在 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 會考慮堆疊之間的相依性。例如，假設一個堆疊使用另一個堆疊產生的值 （例如第二個堆疊中定義的資源 ARN)。在此情況下，由於此相依性，第二個堆疊會在第一個堆疊之前合成。您可以使用堆疊的 ` [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`，將會建立 AWS KMS 金鑰，這也會產生每個環境的費用。

**注意**  
早期版本的引導範本預設會建立 KMS 金鑰。為了避免產生費用，請使用 重新引導`--no-bootstrap-customer-key`。

**注意**  
CDK CLI v2 不支援原始引導範本，稱為舊版範本，預設會與 CDK v1 搭配使用。

**重要**  
現代引導範本會有效地將 隱含的許可授予`--trust`清單中`--cloudformation-execution-policies`的任何 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>) 為：


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

<TEMPLATE> 是選用的範本。如果所需的範本是*應用程式*，則預設值為 ，您可以省略它。可用的範本包括：


| 範本 | Description | 
| --- | --- | 
|   `app` （預設）  |  建立空白 AWS CDK 應用程式。  | 
|   `sample-app`   |  使用包含 Amazon SQS 佇列和 Amazon SNS 主題的堆疊建立 AWS CDK 應用程式。  | 

範本會使用專案資料夾的名稱，為新應用程式內的檔案和類別產生名稱。

## 列出堆疊
<a name="cli-list"></a>

若要查看 AWS CDK 應用程式中堆疊IDs 清單，請輸入下列其中一個同等命令：

```
cdk list
cdk ls
```

如果您的應用程式包含 [CDK 管道](cdk-pipeline.md)堆疊，CDK CLI 會根據堆疊在管道階層中的位置，將堆疊名稱顯示為路徑。（例如，`PipelineStack`、 `PipelineStack/Prod`和 `PipelineStack/Prod/MyService`。)

如果您的應用程式包含許多堆疊，您可以指定要列出的堆疊的完整或部分堆疊 IDs。如需詳細資訊，請參閱[指定堆疊](#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` 命令只會為一或多個指定的堆疊列印產生的範本。

如需所有可用選項`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` 子命令會將一或多個指定的堆疊部署到 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 可讓您透過將 `--no-rollback`新增至`cdk deploy`命令來停用轉返。使用此旗標時，不會復原失敗的部署。相反地，在失敗資源之前部署的資源會保留到位，而下一個部署會從失敗的資源開始。您將花更少的時間等待部署，並花更多的時間開發基礎設施。

### 熱交換
<a name="cli-deploy-hotswap"></a>

使用 `--hotswap`旗標`cdk deploy`搭配 嘗試直接更新您的 AWS 資源，而不是產生並部署 an AWS CloudFormation 變更集。如果無法熱交換，則部署會回復到 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`一律執行 Full 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 應用程式中的任何其他命令），請在此處新增它。

`*` 和 都可以在 `"watch"`和 `"build"`金鑰`**`中使用 Git 樣式萬用字元。每個路徑都會相對於 的父目錄進行解譯`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 security-group-related變更  | 
|   `broadening` （預設）  |  新增 IAM 陳述式或流量規則時需要核准；移除不需要核准  | 

您也可以在 `cdk.json` 檔案中設定 設定。

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

## 比較堆疊
<a name="cli-diff"></a>

`cdk diff` 命令會將應用程式中定義的目前堆疊版本 （及其相依性） 與已部署版本或 saved 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，這會很有用。 `cdk import`會使用 [CloudFormation 資源匯入](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html)。請參閱[此處可匯入的資源清單](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', {});`。請勿對任何其他資源進行任何修改。

  您還必須確保將資源目前擁有的狀態完全建模為定義。針對儲存貯體的範例，請務必包含 AWS KMS 金鑰、生命週期政策，以及與儲存貯體相關的任何其他項目。如果沒有，後續的更新操作可能無法如預期般執行。

  您可以選擇是否要包含實體儲存貯體名稱。我們通常建議不要在您的 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` 檔案中。以下是所支援組態設定的字母參考。


| 金錀 | 備註 | 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` 子命令啟動 Web 瀏覽器的命令。  |   `--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`   |  JSON 陣列指定擴充 CDK 之套件的套件名稱或本機路徑  |   `--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`   |  用於部署資產的 Amazon S3 儲存貯體名稱，例如 Lambda 函數和容器映像 （請參閱[引導您的 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`   | 