

# 개별 스택 리소스의 드리프트 감지
<a name="detect-drift-resource"></a>

전체 스택이 아닌 하나의 스택 내 특정 리소스의 드리프트를 감지할 수 있습니다. 이는 특히 특정 리소스가 예상 템플릿 구성과 일치하는지 다시 확인해야 하는 경우 유용합니다.

리소스의 드리프트 감지를 수행할 때 CloudFormation에서는 전체 스택 드리프트 상태와 해당되는 경우 [**마지막 드리프트 확인 시간(Last drift check time)**]을 업데이트합니다. 예를 들어 드리프트 상태가 `IN_SYNC`인 스택이 있다고 가정합니다. CloudFormation에서 스택에 포함된 하나 이상의 리소스에 드리프트 감지를 수행하도록 하고, CloudFormation에서 하나 이상의 리소스가 드리프트되었음을 감지합니다. CloudFormation은 스택 드리프트 상태를 `DRIFTED`로 업데이트합니다. 반대로 드리프트된 단일 리소스로 인해 드리프트 상태가 `DRIFTED`인 스택이 있다고 가정합니다. 리소스를 예상 속성 값으로 설정한 다음 다시 리소스의 드리프트를 탐지하는 경우 CloudFormation에서 전체 스택에 대한 드리프트를 다시 탐지할 필요 없이 리소스 드리프트 상태 및 스택 드리프트 상태 모두를 `IN_SYNC`로 업데이트합니다.

**AWS Management Console을 사용하여 개별 리소스의 드리프트를 감지하려면**

1. CloudFormation 콘솔([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/))을 엽니다.

1. 스택 목록에서 리소스가 포함된 스택을 선택합니다. CloudFormation이 해당 스택에 대한 스택 세부 정보를 표시합니다.

1. 왼쪽 탐색 창의 **스택**에서 **스택 동작**을 선택한 다음 **드리프트 감지**를 선택합니다.

1. **리소스 드리프트 상태**에서 리소스를 선택한 다음 **리소스 드리프트 상태**를 선택합니다.

   CloudFormation에서는 선택한 리소스의 드리프트 감지를 수행합니다. 성공하면 CloudFormation은 리소스의 드리프트 상태를 업데이트하고 필요한 경우 전체 스택 드리프트 상태를 업데이트합니다. CloudFormation은 또한 드리프트 감지가 리소스 및 스택 전체에서 마지막으로 수행된 시간에 대한 타임스탬프를 업데이트합니다. 리소스가 수정된 경우 CloudFormation에서 리소스의 예상 및 현재 속성 값에 대한 세부 드리프트 정보를 표시합니다.

1. 리소스에 대한 드리프트 감지 결과를 검토합니다.

   1. 수정된 리소스의 세부 정보를 보려면

     1. 수정된 리소스를 선택한 상태에서 **View drift details(드리프트 세부 정보 보기)**를 선택하십시오.

       CloudFormation에서 리소스의 예상 및 현재 속성 값, 그리고 둘 사이의 차이를 비롯한 해당 리소스의 드리프트 세부 정보를 표시합니다.

       차이를 강조 표시하려면 **차이** 섹션에서 속성 이름을 선택하십시오.
       + 추가된 속성은 **Details**(세부 정보) 섹션의 **Current**(현재) 열에 녹색으로 강조 표시됩니다.
       + 삭제된 속성은 **Details**(세부 정보) 섹션의 **Expected**(예상) 열에 붉은색으로 강조 표시됩니다.
       + 값이 변경된 속성의 경우 **Expected** 및 **현재** 열 모두에서 노란색으로 강조 표시됩니다.  
![드리프트 세부 정보 페이지의 리소스 드리프트 상태 섹션에는 드리프트 감지를 지원하는 스택의 각 리소스에 대한 드리프트 정보가 포함되어 있습니다. 세부 정보에는 드리프트 상태와 예상 및 현재 속성 값이 포함되어 있습니다.](http://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**AWS CLI을 사용하여 개별 리소스의 드리프트를 감지하려면**
+ 
**중요**  
스택 리소스의 **마지막 드리프트 확인 시간**을 검토하고 오래된 데이터를 사용하지 않도록 리소스 드리프트 결과에 표시된 타임스탬프보다 이전인지 확인합니다.

  AWS 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"
      }
  }
  ```