

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

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

# `cdk diff`
<a name="ref-cli-cmd-diff"></a>

執行差異以查看 AWS CDK 堆疊之間的基礎設施變更。

此命令通常用於比較本機 CDK 應用程式中堆疊目前狀態與已部署堆疊之間的差異。不過，您也可以將部署的堆疊與任何 local AWS CloudFormation 範本進行比較。

## 用量
<a name="ref-cli-cmd-diff-usage"></a>

```
$ cdk diff <arguments> <options>
```

## 引數
<a name="ref-cli-cmd-diff-args"></a><a name="ref-cli-cmd-diff-args-stack-name"></a>

 **CDK 堆疊 ID**   
您應用程式中執行 diff 的 CDK 堆疊建構 ID。  
 *類型：*字串  
 *必要*：否

## 選項
<a name="ref-cli-cmd-diff-options"></a>

如需適用於所有 CDK CLI 命令的全域選項清單，請參閱[全域選項](ref-cli-cmd.md#ref-cli-cmd-options)。<a name="ref-cli-cmd-diff-options-change-set"></a>

 `--change-set <BOOLEAN>`   
指定是否建立變更集以分析資源替換。  
當 時`true`，CDK CLI 會建立 an AWS CloudFormation 變更集，以顯示對堆疊所做的確切變更。此輸出包含要更新或取代的資源。CDK CLI 使用部署角色而非查詢角色來執行此動作。  
當 `false`時，透過比較 CloudFormation 範本來執行更快速但不準確的差異。偵測到任何需要資源取代的屬性變更都會顯示為資源取代，即使變更純粹是整容的，例如以硬式編碼的 ARN 取代資源參考。  
 *預設值*：`true`<a name="ref-cli-cmd-diff-options-context-lines"></a>

 `--context-lines <NUMBER>`   
要包含在任意 JSON 差異轉譯中的內容行數。  
 *預設值*：`3`<a name="ref-cli-cmd-diff-options-exclusively"></a>

 `--exclusively, -e <BOOLEAN>`   
只有 diff 請求的堆疊且不包含相依性。<a name="ref-cli-cmd-diff-options-fail"></a>

 `--fail <BOOLEAN>`   
`1` 如果偵測到差異，失敗並結束，程式碼為 。<a name="ref-cli-cmd-diff-options-help"></a>

 `--help, -h <BOOLEAN>`   
顯示命令的`cdk diff`命令參考資訊。<a name="ref-cli-cmd-diff-options-processed"></a>

 `--processed <BOOLEAN>`   
指定是否將 範本與已處理的 CloudFormation 轉換進行比較。  
 *預設值*：`false`<a name="ref-cli-cmd-diff-options-quiet"></a>

 `--quiet, -q <BOOLEAN>`   
未偵測到變更`stdout`時，請勿列印 CDK 堆疊名稱和預設`cdk diff`訊息至 。  
 *預設值*：`false`<a name="ref-cli-cmd-diff-options-security-only"></a>

 `--security-only <BOOLEAN>`   
僅對更廣泛的安全性變更有所差異。  
 *預設值*：`false`<a name="ref-cli-cmd-diff-options-strict"></a>

 `--strict <BOOLEAN>`   
將`cdk diff`行為修改為更精確或更嚴格。若為 true，CDK CLI 不會篩選掉` AWS::CDK::Metadata`資源或無法讀取的非 ASCII 字元。  
 *預設值*：`false`<a name="ref-cli-cmd-diff-options-template"></a>

 `--template <STRING>`   
要與之比較 CDK 堆疊的 CloudFormation 範本路徑。

## 範例
<a name="ref-cli-cmd-diff-examples"></a>

### 與名為 MyStackName 的目前部署堆疊不同
<a name="ref-cli-cmd-diff-examples-1"></a>

CDK CLI 在 diff 輸出中使用下列符號：
+  `[+]` – 識別部署變更時要新增的程式碼或資源。
+  `[-]` – 識別部署變更時將移除的程式碼或資源。
+  `[~]` – 識別如果您部署變更，將會修改的資源或屬性。

以下是顯示 Lambda 函數本機變更差異的範例：

```
$ cdk diff MyStackName
start: Building <asset-hash>:<account:Region>
success: Built <asset-hash>:<account:Region>
start: Publishing <asset-hash>:<account:Region>
success: Published <asset-hash>:<account:Region>
Hold on while we create a read-only change set to get a diff with accurate replacement information (use --no-change-set to use a less accurate but faster template-only diff)
Stack MyStackName
Resources
[~] AWS::Lambda::Function HelloWorldFunction <resource-logical-ID>
 └─ [~] Code
     └─ [~] .ZipFile:
         ├─ [-]
        exports.handler = async function(event) {
          return {
            statusCode: 200,
            body: JSON.stringify('Hello World!'),
          };
        };

         └─ [+]
        exports.handler = async function(event) {
          return {
            statusCode: 200,
            body: JSON.stringify('Hello from CDK!'),
          };
        };



✨  Number of stacks with differences: 1
```

將修改之資源的`[~]`指標並不表示完全取代資源：
+ 有些資源屬性，例如 `Code`，會更新資源。
+ 有些資源屬性，例如 `FunctionName`，可能會導致完整資源取代。

### 與特定 CloudFormation 範本的差異
<a name="ref-cli-cmd-diff-examples-2"></a>

```
$ cdk diff MyStackName --app='node bin/main.js' --template-path='./MyStackNameTemplate.yaml'
```

### 使用其部署的堆疊來區分本機堆疊。如果未偵測到任何變更，請勿列印至 stdout
<a name="ref-cli-cmd-diff-examples-3"></a>

```
$ cdk diff MyStackName --app='node bin/main.js' --quiet
```