

# 在单个堆栈资源上检测偏差
<a name="detect-drift-resource"></a>

您可以在堆栈中的特定资源上检测偏差，而不是在整个堆栈上。当您只需要再次确定特定资源现在是否与其预期的模板配置匹配时，这尤其有用。

当在资源上执行偏差检测时，CloudFormation 还会更新整体堆栈偏差状态和**上一次偏差检查时间**（如果适用）。例如，假设堆栈的偏差状态为 `IN_SYNC`。您让 CloudFormation 对该堆栈中包含的一个或多个资源执行偏差检测，CloudFormation 检测到这些资源中的一个或多个已偏离。CloudFormation 将堆栈偏差状态更新为 `DRIFTED`。相反，假设您有一个偏差状态为 `DRIFTED` 的堆栈，因为只有一个偏离的资源。如果您将该资源设置回其预期的属性值，然后再次在该资源上检测偏差，则 CloudFormation 会将资源偏差状态和堆栈偏差状态更新为 `IN_SYNC`，而无需您再次在整个堆栈上检测偏差。

**使用 Amazon Web Services 管理控制台 在单个资源上检测偏差**

1. 通过以下网址打开 Amazon CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.amazonaws.cn/cloudformation/)。

1. 从堆栈列表中，选择包含所需资源的堆栈。CloudFormation 会显示该堆栈的堆栈详细信息。

1. 在左侧导航窗格中的**堆栈**下，选择**堆栈操作**，然后选择**检测偏差**。

1. 在 **Resource drift status (资源偏差状态)** 下面，选择所需资源，然后选择 **Detect drift for resource (检测资源偏差)**。

   CloudFormation 在所选资源上执行偏差检测。如果成功，CloudFormation 会更新资源的偏差状态，并在必要时更新整体堆栈偏差状态。CloudFormation 还会更新上次对资源以及整个堆栈进行偏差检测时的时间戳。如果资源已被修改，则 CloudFormation 会显示有关资源的预期和当前属性值的详细偏差信息。

1. 查看资源的偏差检测结果。

   1. 查看已修改资源的详细信息。

     1. 选定已修改的资源，选择 **View drift details**（查看偏差详细信息）。

       CloudFormation 显示该资源的偏差详细信息，包括资源的预期和当前属性值，以及两者之间的任何区别。

       要突出显示区别，请在**区别**部分中选择属性名称。
       + 添加的属性在 **Details**（详细信息）部分的 **Current**（当前）列中以绿色突出显示。
       + 删除的属性在 **Details**（详细信息）部分的 **Expected**（预期）列中以红色突出显示。
       + 其值已更改的属性在 **Expected (预期)** 和 **Current (当前)** 列中以黄色突出显示。  
![偏差详细信息页面上的资源偏差状态部分，其中包含堆栈中支持偏差检测的每个资源的偏差信息。详细信息包括偏差状态以及预期的和当前的属性值。](http://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**使用 Amazon CLI 在单个资源上检测偏差**
+ 
**重要**  
查看堆栈资源的**上次偏差检查时间**，并确认它早于资源偏差结果中显示的时间戳，以防止使用过时的数据。

  要在使用 Amazon CLI 的单个资源上检测偏差，使用 **detect-stack-resource-drift** 命令。指定资源的逻辑 ID，以及包含它的堆栈。

  以下示例在特定堆栈资源 `my-drifted-resource` 上运行偏差检测操作。该响应返回确认资源已被修改的信息，包括其值已更改的两个属性的详细信息。

  ```
  aws cloudformation detect-stack-resource-drift \
      --stack-name {{my-stack-with-resource-drift}} \
      --logical-resource-id {{my-drifted-resource}}
  ```

  输出：

  ```
  {
      "StackResourceDrift": {
          "StackId": "arn:aws:cloudformation:us-east-1:099908667365:stack/my-stack-with-resource-drift/489e5570-df85-11e7-a7d9-50example", 
          "ActualProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":120,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":12},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
          "ResourceType": "AWS::SQS::Queue", 
          "Timestamp": "2018-03-26T18:54:28.462Z", 
          "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/099908667365/my-stack-with-resource-drift-Queue-494PBHCO76H4", 
          "StackResourceDriftStatus": "MODIFIED", 
          "ExpectedProperties": "{\"ReceiveMessageWaitTimeSeconds\":0,\"DelaySeconds\":20,\"RedrivePolicy\":{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:099908667365:my-stack-with-resource-drift-DLQ-1BCY7HHD5QIM3\",\"maxReceiveCount\":10},\"MessageRetentionPeriod\":345600,\"MaximumMessageSize\":262144,\"VisibilityTimeout\":60,\"QueueName\":\"my-stack-with-resource-drift-Queue-494PBHCO76H4\"}", 
          "PropertyDifferences": [
              {
                  "PropertyPath": "/DelaySeconds", 
                  "ActualValue": "120", 
                  "ExpectedValue": "20", 
                  "DifferenceType": "NOT_EQUAL"
              }, 
              {
                  "PropertyPath": "/RedrivePolicy/maxReceiveCount", 
                  "ActualValue": "12", 
                  "ExpectedValue": "10", 
                  "DifferenceType": "NOT_EQUAL"
              }
          ], 
          "LogicalResourceId": "my-drifted-resource"
      }
  }
  ```