

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

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

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

检测您使用 AWS 云开发工具包 (AWS CDK) 定义、管理和部署的资源的配置偏差。当堆栈的实际配置与其预期配置不同时，就会发生偏差，在 AWS CloudFormation 之外修改资源时会发生这种情况。

此命令通过将资源的当前状态与其预期配置进行比较来识别已修改的资源（例如，通过 AWS 管理控制台或 AWS CLI 修改的资源）。这些修改可能会导致您的基础设施出现意外行为。

在偏差检测期间，CDK CLI 将输出进度指示器和结果，显示以下内容：
+ 偏离预期配置的资源。
+ 出现偏差的资源总数。
+ 指示是否在堆栈中检测到偏差的摘要。

**重要**  
`cdk drift` 和 `cdk diff` 命令的工作方式不同：  
 `cdk drift` 调用 CloudFormation 的偏差检测操作，将 AWS 中资源的实际状态（“现实”）与其在 CloudFormation 中的预期配置进行比较。并非所有 AWS 资源都支持偏差检测。有关支持的资源列表，请参阅《AWS CloudFormation 用户指南》**中的[资源类型支持](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html)。
 `cdk diff` 将从本地 CDK 代码合成的 CloudFormation 模板与已部署的 CloudFormation 堆栈的模板进行比较。
当您需要验证资源是否在 CloudFormation 之外（例如，通过 AWS 管理控制台或 AWS CLI）进行了修改时，请使用 `cdk drift`。当您想要在部署之前预览您的本地代码更改如何影响基础设施时，请使用 `cdk diff`。

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

```
$ cdk drift <arguments> <options>
```

## 参数
<a name="ref-cli-cmd-drift-args"></a><a name="ref-cli-cmd-drift-args-stack-name"></a>

 **堆栈名称**：  
要检查是否存在偏差的堆栈的名称。必须事先将该堆栈部署到 CloudFormation 才能执行偏差检测。  
 *类型*：字符串  
 *必需*：否  
如果没有指定任何堆栈，则会对您的 CDK 应用程序中定义的所有堆栈执行偏差检测。

## 选项
<a name="ref-cli-cmd-drift-options"></a>

有关适用于所有 CDK CLI 命令的全局选项的列表，请参阅[全局选项](ref-cli-cmd.md#ref-cli-cmd-options)。<a name="ref-cli-cmd-drift-options-fail"></a>

 `--fail <BOOLEAN>`   
如果检测到偏差，则返回退出代码 1。  
 *默认值*：`false`<a name="ref-cli-cmd-drift-options-help"></a>

 `--help, -h <BOOLEAN>`   
显示 `cdk drift` 命令的命令参考信息。

## 示例
<a name="ref-cli-cmd-drift-examples"></a>

### 检查特定堆栈的偏差
<a name="ref-cli-cmd-drift-examples-stack"></a>

```
$ cdk drift MyStackName
```

该命令将输出类似以下内容的结果：

```
Stack MyStackName
Modified Resources
[~] AWS::Lambda::Function MyFunction MyLambdaFunc1234ABCD
 └─ [~] /Description
     ├─ [-] My original hello world Lambda function
     └─ [+] My drifted hello world Lambda function

1 resource has drifted from their expected configuration

✨  Number of resources with drift: 1
```

### 检查删除资源后的偏差
<a name="ref-cli-cmd-drift-examples-deleted"></a>

以下示例显示了修改和删除资源后的输出：

```
Stack MyStackName
Modified Resources
[~] AWS::Lambda::Function MyFunction MyLambdaFunc1234ABCD
 └─ [~] /Description
     ├─ [-] My original hello world Lambda function
     └─ [+] My drifted hello world Lambda function
Deleted Resources
[-] AWS::CloudWatch::Alarm MyAlarm MyCWAlarmABCD1234

2 resources have drifted from their expected configuration

✨  Number of resources with drift: 2
```

### 使用退出代码检查偏差
<a name="ref-cli-cmd-drift-examples-fail"></a>

要让命令在检测到偏差时返回非零退出代码，请运行以下命令：

```
$ cdk drift MyStackName --fail
```

这在 CI/CD 管线中非常有用，可以自动检测和响应基础设施偏差。