這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行差異以查看 AWS CDK 堆疊之間的基礎設施變更。
此命令通常用於比較本機 CDK 應用程式中堆疊目前狀態與已部署堆疊之間的差異。不過,您也可以將部署的堆疊與任何本機 AWS CloudFormation 範本進行比較。
用量
$
cdk diff
<arguments>
<options>
引數
- CDK 堆疊 ID
-
您應用程式執行 diff 的 CDK 堆疊建構 ID。
類型:字串
必要:否
選項
如需適用於所有 CDK CLI命令的全域選項清單,請參閱 全域選項。
--change-set
BOOLEAN
-
指定是否建立變更集以分析資源替換。
當 時
true
,CDK CLI會建立 AWS CloudFormation 變更集,以顯示對堆疊所做的確切變更。此輸出包含要更新或取代的資源。CDK CLI使用部署角色而非查詢角色來執行此動作。當
false
時,透過比較 CloudFormation 範本執行更快速但不準確的差異。偵測到任何需要資源取代的屬性變更都會顯示為資源取代,即使變更純粹是整容的,例如以硬式編碼的 ARN 取代資源參考。預設值:
true
--context-lines
NUMBER
-
要包含在任意 JSON 差異轉譯中的內容行數。
預設值:
3
--exclusively, -e
BOOLEAN
-
僅區分請求的堆疊,不包含相依性。
--fail
BOOLEAN
-
1
如果偵測到差異,失敗並結束,程式碼為 。 --help, -h
BOOLEAN
-
顯示命令的
cdk diff
命令參考資訊。 --processed
BOOLEAN
-
指定是否將 與範本與已處理的 CloudFormation 轉換進行比較。
預設值:
false
--quiet, -q
BOOLEAN
-
未偵測到變更
stdout
時,請勿列印 CDK 堆疊名稱和預設cdk diff
訊息至 。預設值:
false
--security-only
BOOLEAN
-
僅對更廣泛的安全變更有所差異。
預設值:
false
--strict
BOOLEAN
-
將
cdk diff
行為修改為更精確或更嚴格。為 true 時,CDK CLI不會篩選掉AWS::CDK::Metadata
資源或無法讀取的非 ASCII 字元。預設值:
false
--template
STRING
-
要與 CDK 堆疊比較的 CloudFormation 範本路徑。
範例
與名為 MyStackName 的目前部署堆疊不同
CDK 在 diff 輸出中使用CLI下列符號:
-
[+]
– 識別部署變更時將新增的程式碼或資源。 -
[-]
– 識別部署變更時將移除的程式碼或資源。 -
[~]
– 識別如果您部署變更,將會修改的資源或屬性。
以下是顯示 Lambda 函數本機變更差異的範例:
$
cdk diff MyStackName
start: Buildingasset-hash
:account-Region
success: Builtasset-hash
:account-Region
start: Publishingasset-hash
:account-Region
success: Publishedasset-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 HelloWorldFunctionresource-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 範本的差異
$
cdk diff MyStackName --app='node bin/main.js' --template-path='./MyStackNameTemplate.yaml'
將本機堆疊與其已部署的堆疊區分開。如果未偵測到任何變更,請勿列印至 stdout
$
cdk diff MyStackName --app='node bin/main.js' --quiet