View a markdown version of this page

cdk diff - AWS Cloud Development Kit (AWS CDK) v2

这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

cdk diff

执行差异以查看 AWS CDK 堆栈之间的基础架构变化。

此命令通常用于比较本地 CDK 应用程序中堆栈的当前状态与已部署堆栈之间的差异。但是,您也可以将已部署的堆栈与任何本地 AWS CloudFormation 模板进行比较。

用法

$ cdk diff <arguments> <options>

参数

CDK 堆栈 ID

应用程序中执行 diff 的 CDK 堆栈的构造 ID。

类型:字符串

必需:否

选项

有关适用于所有 CDK CLI 命令的全局选项的列表,请参阅全局选项

--method, -m <STRING>

指定如何计算差异。

  • auto— 默认。创建 AWS CloudFormation 更改集以显示准确的替换信息。如果无法创建更改集(例如,由于缺少权限),则会回退到仅限模板的差异。使用部署角色。

  • change-set— 始终创建更改集,如果无法创建,则会失败。当您需要保证精度时,请使用此选项。使用部署角色。

  • template— 直接比较 CloudFormation 模板。速度更快,但不太准确。检测到的需要资源替换的属性的任何更改都将显示为资源替换,即使更改纯粹是表面上的。使用查找角色。

    默认值auto

--change-set <BOOLEAN>(已弃用)

指定是否创建更改集来分析资源替换。请改用 --method

--change-set映射到--method=auto--no-change-set映射到--method=template

--context-lines <NUMBER>

任意 JSON diff 渲染中包含的上下文行数。

默认值3

--exclusively, -e <BOOLEAN>

仅对请求的堆栈执行 diff,不包括依赖项。

--fail <BOOLEAN>

如果检测到差异,则失败并退出,显示代码 1

--help, -h <BOOLEAN>

显示 cdk diff 命令的命令参考信息。

--processed <BOOLEAN>

指定是否与已处理 CloudFormation 变换的模板进行比较。

默认值false

--quiet, -q <BOOLEAN>

当未检测到任何更改时,请勿将 CDK 堆栈名称和默认 cdk diff 消息打印到 stdout

默认值false

--security-only <BOOLEAN>

仅在安全更改范围扩大时才执行 diff。

默认值false

--strict <BOOLEAN>

修改 cdk diff 行为,使其更加精确或严格。当为 true 时,CDK CLI 将不会过滤掉 AWS::CDK::Metadata 资源或不可读的非 ASCII 字符。

默认值false

--template <STRING>

要与 CDK 堆栈进行比较的 CloudFormation 模板路径。暗示--method=template

示例

与当前部署的名为的堆栈进行比较 MyStackName

CDK CLI 在 diff 输出中使用以下符号:

  • [+]:标识在部署您的更改时将添加的代码或资源。

  • [-]:标识在部署您的更改时将移除的代码或资源。

  • [~]:标识在部署您的更改时将修改的资源或属性。

以下示例显示了 Lambda 函数的本地更改的 diff:

$ 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 --method=template 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 模板进行比较

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

对本地堆栈及其已部署的堆栈执行 diff。如果未检测到任何更改,请勿打印到 stdout

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