

# CloudFormation スタック全体のドリフトを検出する
<a name="detect-drift-stack"></a>

スタックでドリフト検出オペレーションを実行すると、スタックが予想されるテンプレート構成からドリフトしたかどうかが判断され、ドリフト検出をサポートするスタック内の各リソースのドリフトステータスに関する詳細情報が返されます。

**AWS マネジメントコンソール を使用してスタック全体のドリフトを検出するには**

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で CloudFormation コンソール を開きます。

1. スタックのリストから、ドリフト検出を実行するスタックを選択します。スタックの詳細ペインで、[**Stack actions (スタックアクション)**] を選択し、[**Detect drift (ドリフトの検出)**] を選択します。  
![\[選択したスタックの [Stack actions (スタックアクション)] メニューで [現在のスタックのドリフトを検出] コマンドを選択しました。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/console-stacks-actions-detect-drift-1.png)

   CloudFormation により、選択されたスタックに対してドリフト検出が開始されたことを示す情報バーが表示されます。

1. CloudFormation がドリフト検出オペレーションを完了するまで待ちます。ドリフト検出オペレーションが完了すると、CloudFormation によって、スタックの [**Drift status**] (ドリフトステータス) と [**Last drift check time**] (前回のドリフトチェック時間) が更新されます。これらのフィールドは、スタックの詳細ページの **[Stack info]** (スタック情報) ペインの **[Overview]** (概要) セクションにリスト表示されます。

   スタックに含まれるリソースの数によっては、ドリフト検出オペレーションに数分かかることがあります。特定のスタックに対して同時に実行できるドリフト検出オペレーションは 1 つだけです。情報バーを閉じた後でも、CloudFormation によってドリフト検出オペレーションが継続されます。

1. スタックとそのリソースのドリフト検出結果を確認します。スタックを選択した状態で、[**Stack actions (スタックアクション)**] メニューから [**View drift results (ドリフト結果の表示)**] を選択します。

   CloudFormation によって、スタックの全体的なドリフトステータス、およびスタックまたはその個々のリソースのいずれかで最後にドリフト検出が開始された時刻がリスト表示されます。スタックの 1 つ以上のリソースがドリフトした場合、スタックはドリフトしたと見なされます。  
![\[選択したスタックの [Drifts (ドリフト)] ページに、スタック全体のドリフトステータス、ドリフト検出ステータス、およびスタックまたはその個々のリソースで最後にドリフト検出が開始された時刻が表示されます。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-overview-1.png)

   [**Resource drift status**] (リソースのドリフトステータス) のセクションに、CloudFormation で各スタックリソース、そのドリフトステータス、およびリソースで最後にドリフト検出が開始された時刻がリスト表示されます。各リソースの論理 ID と物理 ID は、それらを識別しやすくするために表示されます。さらに、ステータスが [**MODIFIED**] のリソースの場合、CloudFormation はリソースドリフトの詳細を表示します。

   ドリフトステータスに基づいてリソースをソートするには、[**ドリフトステータス**] 列を使用します。

   1. 変更されたリソースの詳細を表示します。

     1. 変更されたリソースを選択した状態で、[**View drift details (ドリフトの詳細を表示)**] を選択します。

       CloudFormation により、そのリソースのドリフト詳細ページが表示されます。このページに、リソースの意図した値と現在のプロパティ値、およびその 2 つの違いがリスト表示されます。

       違いを強調表示するには、[**違い**] セクションでプロパティ名を選択します。
       + 追加されたプロパティは **[Details]** (詳細) セクションの **[Current]** (最新の) 列で緑色で強調表示されます。
       + 削除されたプロパティは **[Details]** (詳細) セクションの **[Expected]** (期待される) 列で赤色で強調表示されます。
       + 値が変更されたプロパティは、[**Expected**] 列と [**最新の**] 列の両方で黄色で強調表示されます。  
![\[[ドリフト詳細] ページの [リソースドリフトステータス] セクションには、ドリフト検出をサポートするスタックに各リソースのドリフト情報が含まれています。詳細には、ドリフトステータス、意図した値、現在のプロパティ値などがあります。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**AWS CLI を使用してスタック全体のドリフトを検出するには**
**重要**  
古いデータが使用されることのないようにするため、スタックの **[前回のドリフトチェック時刻]** をチェックして、リソースのドリフト結果に表示されるタイムスタンプより前の時刻になっていることを確認します。

AWS CLI を使用してスタック全体のドリフトを検出するには、次の AWS CLI コマンドを使用します。
+ **detect-stack-drift** はスタックでドリフト検出オペレーションを開始します。
+ **describe-stack-drift-detection-status** はスタックドリフト検出動作の状態を監視します。
+ **describe-stack-resource-drifts** はスタックドリフト検出オペレーションの詳細を確認します。

1. **detect-stack-drift** を使用してスタック全体のドリフトを検出します。スタックの名前または ARN を指定してください。このドリフト検出オペレーションのフィルターとして使用したい特定のリソースの論理 ID を指定することもできます。

   ```
   aws cloudformation detect-stack-drift --stack-name my-stack-with-resource-drift
   ```

   出力:

   ```
   {
       "StackDriftDetectionId": "624af370-311a-11e8-b6b7-500cexample"
   }
   ```

1. スタックドリフト検出オペレーションは長時間実行される可能性があるため、**describe-stack-drift-detection-status** を使用してドリフト操作のステータスを監視します。このコマンドは、**detect-stack-drift** コマンドによって返されたスタックドリフト検出 ID を受け取ります。

   以下の例では、上記の **detect-stack-drift** の例から返されたスタックドリフト検出 ID を取得し、**describe-stack-drift-detection-status** へのパラメータとして渡します。このパラメータは、ドリフト検出オペレーションが完了したこと、単一のスタックリソースがドリフトしたこと、および結果としてスタック全体がドリフトしたと見なされることを示すオペレーションの詳細を返します。

   ```
   aws cloudformation describe-stack-drift-detection-status --stack-drift-detection-id 624af370-311a-11e8-b6b7-500cexample
   ```

   出力:

   ```
   {
       "StackId": "arn:aws:cloudformation:us-east-1:099908667365:stack/my-stack-with-resource-drift/489e5570-df85-11e7-a7d9-50example", 
       "StackDriftDetectionId": "624af370-311a-11e8-b6b7-500cexample", 
       "StackDriftStatus": "DRIFTED", 
       "Timestamp": "2018-03-26T17:23:22.279Z", 
       "DetectionStatus": "DETECTION_COMPLETE", 
       "DriftedStackResourceCount": 1
   }
   ```

1. スタックドリフト検出オペレーションが完了したら、**describe-stack-resource-drifts** コマンドを使用して、ドリフトしたリソースの実際のプロパティ値と意図したプロパティ値を含む結果を確認します。

   以下の例では `--stack-resource-drift-status-filters` オプションを使用し、変更または削除されたリソースのスタックドリフト情報を要求します。リクエストは、値が変更された 2 つのプロパティに関する詳細を含む、変更された 1 つのリソースに関する情報を返します。リソースは削除されていません。

   ```
   aws cloudformation describe-stack-resource-drifts --stack-name my-stack-with-resource-drift --stack-resource-drift-status-filters MODIFIED DELETED
   ```

   出力:

   ```
   {
       "StackResourceDrifts": [
           {
               "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-26T17:23:34.489Z", 
               "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": "Queue"
           }
       ]
   }
   ```