

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Détectez les modifications de configuration non gérées apportées aux piles et aux ressources grâce à la détection des écarts
<a name="using-cfn-stack-drift"></a>

Même si vous gérez vos ressources via CloudFormation, les utilisateurs peuvent modifier ces ressources en dehors de CloudFormation. Les utilisateurs peuvent modifier une ressource directement en utilisant le service sous-jacent qui a créé la ressource. Par exemple, vous pouvez utiliser la console Amazon EC2 pour mettre à jour une instance de serveur créée dans le cadre d'une CloudFormation pile. Certaines modifications peuvent être accidentelles, et d'autres peuvent être apportées intentionnellement pour répondre aux événements opérationnels prioritaires. Quoi qu'il en soit, les modifications apportées en dehors de CloudFormation peuvent compliquer les opérations de mise à jour ou de suppression de la pile. Vous pouvez utiliser la détection de dérive pour identifier les ressources de pile auxquelles des modifications de configuration ont été apportées en dehors de la CloudFormation gestion. Vous pouvez alors prendre des mesures correctives pour resynchroniser les ressources de pile avec leurs définitions dans le modèle de pile. Vous pouvez, par exemple, mettre à jour directement les ressources ayant dérivé, pour les accorder avec leur définition de modèle. La résolution de l’écart permet de garantir la cohérence de la configuration et la réussite des opérations de pile.

**Topics**
+ [Qu'est-ce qu'un écart ?](#what-is-drift)
+ [Codes de statut de détection de l'écart](#drift-status-codes)
+ [Considérations lors de la détection de l'écart](#drift-considerations)
+ [Détectez la dérive sur l'ensemble d'une CloudFormation pile](detect-drift-stack.md)
+ [Détecter l’écart sur des ressources de pile individuelles](detect-drift-resource.md)
+ [Résoudre l'écart avec une opération d'importation](resource-import-resolve-drift.md)

## Qu'est-ce qu'un écart ?
<a name="what-is-drift"></a>

La détection de l’écart vous permet de détecter si la configuration réelle d’une pile diffère, ou a *dérivé*, de sa configuration prévue. CloudFormation À utiliser pour détecter la dérive sur l'ensemble d'une pile ou sur des ressources individuelles au sein de la pile. Une ressource est considérée comme ayant dérivé dès qu'une de ses valeurs de propriété réelles diffère des valeurs de propriété prévues. Cela inclut l'éventualité où la propriété ou la ressource aurait été supprimée. Une pile est considérée comme ayant dérivé si une ou plusieurs de ses ressources ont dérivé.

Pour déterminer si une ressource a dérivé, CloudFormation détermine les valeurs attendues des propriétés de ressource, telles que définies dans le modèle de pile, ainsi que toutes les valeurs spécifiées en tant que paramètres du modèle. CloudFormation compare ensuite ces valeurs attendues aux valeurs réelles de ces propriétés de ressources telles qu'elles existent actuellement dans la pile. Une ressource est considérée comme ayant dérivé si une ou plusieurs de ses propriétés ont été supprimées ou modifiées.

CloudFormation génère des informations détaillées sur chaque ressource de la pile qui a dérivé.

CloudFormation détecte la dérive sur les AWS ressources qui prennent en charge la détection de la dérive. Les ressources qui ne prennent pas en charge la détection de l'écart se voient attribuer le statut d'écart NOT\$1CHECKED. Pour obtenir la liste des AWS ressources qui prennent en charge la détection de la dérive, consultez[Prise en charge des types de ressources](resource-import-supported-resources.md).

En outre, CloudFormation prend en charge la détection de la dérive sur les types de ressources privées *provisionnables*, c'est-à-dire dont le type de provisionnement est ou`FULLY_MUTABLE`. `IMMUTABLE` Pour effectuer une détection de l'écart sur une ressource de type privé, la version par défaut du type de ressource que vous avez enregistré dans votre compte doit pouvoir être alloué. Pour plus d’informations sur le type de provisionnement des ressources, consultez le paramètre `ProvisioningType` de l’action [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html) dans la *Référence d’API AWS CloudFormation * et de la commande [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-type.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-type.html) dans la *Référence des commandes AWS CLI *. Pour plus d’informations sur les ressources privées, consultez [Gestion des extensions avec le CloudFormation registre](registry.md).

Vous pouvez exécuter la détection de l’écart sur des piles dotées des statuts suivants : `CREATE_COMPLETE`, `UPDATE_COMPLETE`, `UPDATE_ROLLBACK_COMPLETE` et `UPDATE_ROLLBACK_FAILED`.

Lors de la détection d'une dérive sur une pile, CloudFormation ne détecte aucune dérive sur les piles imbriquées appartenant à cette pile. Pour de plus amples informations, veuillez consulter [Diviser un modèle en éléments réutilisables à l’aide de piles imbriquées](using-cfn-nested-stacks.md). Au lieu de cela, vous pouvez lancer une opération de détection de l’écart directement sur la pile imbriquée.

**Note**  
CloudFormation détermine uniquement la dérive pour les valeurs de propriété définies de manière explicite, soit via le modèle de pile, soit en spécifiant les paramètres du modèle. Ceci n'inclut pas les valeurs par défaut des propriétés des ressources. Pour CloudFormation suivre une propriété de ressource afin de déterminer la dérive, définissez explicitement la valeur de la propriété, même si vous la définissez sur la valeur par défaut.

## Codes de statut de détection de l'écart
<a name="drift-status-codes"></a>

Les tableaux de cette section décrivent les différents types de statut utilisés avec la détection de l'écart :
+ Le **statut d'opération de détection de l'écart** décrit l'état actuel de l'opération.
+ **Statut de l'écart** 

  Pour les ensembles de piles, cette information décrit le statut de l’écart de l’ensemble de pile dans son ensemble, en fonction du statut de l’écart des instances de piles qui lui appartiennent.

  Pour les instances de piles, cette information décrit le statut de l’écart de l’instance de pile, en fonction du statut de l’écart de la pile associée.

  Pour les piles, cette information décrit le statut de l’écart de la pile dans son ensemble, en fonction du statut de l’écart de ses ressources.
+ Le **statut de l'écart de ressource** décrit le statut de l'écart d'une ressource individuelle.

Le tableau suivant répertorie les codes d'état CloudFormation attribués aux opérations de détection de la dérive des piles.


| Statut de l'opération de détection de l'écart | Description | 
| --- | --- | 
|  `DETECTION_COMPLETE`  |  L’opération de détection de l’écart d’une pile a réussi pour toutes les ressources de la pile qui prennent en charge la détection de l’écart.  | 
|  `DETECTION_FAILED`  |  L’opération de détection de l’écart de la pile a échoué pour au moins une ressource dans la pile. Les résultats seront disponibles pour les ressources ayant effectué CloudFormation avec succès la détection de la dérive.  | 
|  `DETECTION_IN_PROGRESS`  |  L’opération de détection de l’écart de pile est actuellement en cours.  | 

Le tableau suivant répertorie les codes d'état de dérive CloudFormation attribués aux piles.


| Statut de l'écart | Description | 
| --- | --- | 
|  `DRIFTED`  |  Pour les piles : la pile diffère, ou *présente un écart*, par rapport à la configuration de modèle prévue. Une pile est considérée comme ayant dérivé si une ou plusieurs de ses ressources ont dérivé. Pour les instances de piles : une instance de pile est considérée comme présentant un écart si la pile présente un écart. Pour les ensembles de piles : un ensemble de piles est considéré comme présentant un écart si une ou plusieurs instances de piles présente un écart.  | 
|  `NOT_CHECKED`  |  CloudFormation n'a pas vérifié si la pile, l'ensemble de piles ou l'instance de pile diffère de la configuration de modèle attendue.  | 
|  `IN_SYNC`  |  La configuration actuelle de chaque ressource prise en charge correspond à sa configuration de modèle prévue. Le statut d’une pile, d’un ensemble de piles ou d’une instance de pile sans ressource prenant en charge la détection de l’écart sera également IN\$1SYNC.  | 

Le tableau suivant répertorie les codes d'état de dérive CloudFormation attribués aux ressources de la pile.


| Statut de l'écart de ressource | Description | 
| --- | --- | 
|  `DELETED`  |  La ressource diffère de sa configuration de modèle prévue, car la ressource a été supprimée.  | 
|  `MODIFIED`  |  La ressource diffère de sa configuration de modèle prévue.  | 
|  `NOT_CHECKED`  |  CloudFormation n'a pas vérifié si la ressource diffère de la configuration de modèle attendue.  | 
|  `IN_SYNC`  |  La configuration actuelle de la ressource correspond à sa configuration de modèle prévue.  | 

Le tableau suivant répertorie les codes d'état de type de différence CloudFormation attribués aux propriétés des ressources qui diffèrent de leur configuration de modèle attendue.


| Types de différences de propriété | Description | 
| --- | --- | 
|  `ADD`  |  Une valeur a été ajoutée à une propriété de ressource qui est un type de données de tableau ou de liste.   | 
|  `REMOVE`  |  La propriété a été supprimée de la configuration de ressource actuelle.  | 
|  `NOT_EQUAL`  |  La valeur de propriété actuelle diffère de sa valeur prévue, définie dans le modèle de pile.  | 

## Considérations lors de la détection de l'écart
<a name="drift-considerations"></a>

Afin d’effectuer correctement la détection de l’écart sur une pile, un utilisateur doit disposer des autorisations suivantes :
+ L’autorisation de lecture pour chaque ressource de la pile qui prend en charge la détection de l’écart. Par exemple, si la pile comprend une ressource `AWS::EC2::Instance`, vous devez avoir l’autorisation `ec2:DescribeInstances` nécessaire pour effectuer la détection de l’écart sur la pile.
+ `cloudformation:DetectStackDrift`
+ `cloudformation:DetectStackResourceDrift`
+ `cloudformation:BatchDescribeTypeConfigurations`

Pour plus d'informations sur la définition des autorisations dans CloudFormation, consultez[Contrôlez CloudFormation l'accès avec Gestion des identités et des accès AWS](control-access-with-iam.md).

Dans certains cas extrêmes, il CloudFormation se peut que vous ne puissiez pas toujours renvoyer des résultats de dérive précis. Vous devez être conscient de ces cas limites afin d'interpréter correctement vos résultats de détection de l'écart.
+ Dans certains cas, les objets contenus dans des tableaux de propriétés sont signalés comme un écart, alors qu'ils sont en réalité des valeurs par défaut fournies à la propriété à partir du service sous-jacent responsable de la ressource.
+ Certaines ressources ont des relations d'attachement avec des ressources connexes, de telle sorte qu'une ressource peut en fait attacher ou supprimer les valeurs de propriété d'une autre ressource, définie dans le même modèle ou dans un autre modèle. Par exemple, les ressources `AWS::EC2::SecurityGroupIngress` et `AWS::EC2::SecurityGroupEgress` peuvent être utilisées pour attacher et supprimer des valeurs à partir des ressources `AWS::EC2::SecurityGroup`. Dans ces cas, CloudFormation analyse le modèle de pile pour détecter les pièces jointes avant d'effectuer la comparaison de dérive. Cependant, CloudFormation vous ne pouvez pas effectuer cette analyse sur plusieurs piles et vous risquez donc de ne pas renvoyer de résultats de dérive précis lorsque les ressources associées résident dans des piles différentes.

  Les ressources qui prennent en charge la détection de l'écart et autorisent ou nécessitent des attachements à partir d'autres ressources incluent :    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)
+ CloudFormation n'effectue aucune détection de dérive sur la `KMSKeyId` propriété d'aucune ressource. Comme AWS KMS les clés peuvent être référencées par plusieurs alias, nous ne CloudFormation pouvons pas garantir des résultats de dérive toujours précis pour cette propriété.
+ Certaines propriétés de ressources que vous pouvez spécifier dans votre modèle de pile ne CloudFormation pourront pas, de par leur nature même, être comparées aux propriétés des ressources de pile résultantes. Ces propriétés ne peuvent donc pas être incluses dans les résultats de détection de l'écart. Ces propriétés se divisent en deux grandes catégories :
  + Valeurs de propriété qui CloudFormation ne peuvent pas être mappées à leur valeur de propriété de ressource initiale dans le modèle de pile.

    Par exemple, il est CloudFormation impossible de mapper le code source d'une fonction Lambda au type de [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-lambda-function-code.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-lambda-function-code.html)propriété de la [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html)ressource et ne CloudFormation peut donc pas l'inclure dans les résultats de détection de dérive. 
  + Valeurs de propriété que le service responsable de la ressource ne renvoie pas.

    Il existe certaines valeurs de propriété qui, par conception, ne sont jamais renvoyées par le service auquel la ressource appartient. Elles ont tendance à contenir des informations confidentielles, telles que des mots de passe ou d'autres données sensibles qui ne doivent pas être exposées. Par exemple, le service IAM ne renverra jamais la valeur de la `Password` propriété du type de [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-iam-user-loginprofile.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-iam-user-loginprofile.html)propriété et ne CloudFormation peut donc pas l'inclure dans les résultats de détection de dérive.
  + Les objets dans un tableau peuvent être réellement des paramètres par défaut du service, et non pas d'un écart ajouté manuellement.
+ Si vous recevez un faux positif, envoyez-nous vos commentaires en utilisant le lien de commentaires dans la CloudFormation console, ou contactez-nous via [AWS re:Post](https://repost.aws/).
+ Certaines propriétés peuvent avoir des valeurs d'entrée égales, mais non identiques. Pour éviter les faux positifs, vous devez vous assurer que la configuration attendue correspond à la configuration réelle.
  + Par exemple, la configuration attendue d'une ressource peut être de 1 024 Mo et la configuration réelle de cette même ressource peut être de 1 Go. 1 024 Mo et 1 Go sont égaux, mais pas identiques.

    Lorsque la détection des écarts s'exécute sur cette ressource, elle signale les résultats présentant des écarts.

    Pour éviter ce faux positif, changez la configuration attendue de la propriété de la ressource à 1 024 Mo, puis lancez la détection des écarts.

# Détectez la dérive sur l'ensemble d'une CloudFormation pile
<a name="detect-drift-stack"></a>

L’exécution d’une opération de détection de l’écart sur une pile détermine si la pile a dérivé de sa configuration de modèle prévue, et renvoie des informations détaillées sur le statut de l’écart de chaque ressource de la pile qui prend en charge la détection de l’écart.

**Pour détecter la dérive sur l'ensemble d'une pile à l'aide du AWS Management Console**

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Dans la liste des piles, sélectionnez la pile sur laquelle vous souhaitez effectuer une détection de l’écart. Dans le volet des détails de la pile, choisissez **Stack actions (Actions de pile)**, puis choisissez **Detect drift (Détecter l’écart)**.  
![\[Commande Détecter l’écart pour la pile actuelle sélectionnée dans le menu Stack actions (Actions de pile) pour la pile sélectionnée.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/console-stacks-actions-detect-drift-1.png)

   CloudFormation affiche une barre d'information indiquant que la détection de dérive a été initiée pour la pile sélectionnée.

1. Attendez que l'opération de détection de dérive soit CloudFormation terminée. Lorsque l'opération de détection de dérive est terminée, l'**état de dérive et l'****heure du dernier contrôle de dérive** de votre pile sont mis à CloudFormation jour. Ces champs sont répertoriés dans la section **Présentation** du volet **Stack info (Infos de pile)** de la page des détails de la pile.

   L’opération de détection de l’écart peut prendre plusieurs minutes, selon le nombre de ressources incluses dans la pile. Vous ne pouvez exécuter qu'une seule opération de détection de dérive sur une pile donnée à la fois. CloudFormation poursuit l'opération de détection de dérive même après avoir fermé la barre d'informations.

1. Passez en revue les résultats de détection de l’écart pour la pile et ses ressources. Votre pile étant sélectionnée, dans le menu **Stack actions (Actions de pile)**, sélectionnez **View drift results (Afficher les résultats d’écart)**.

   CloudFormation répertorie l'état de dérive global de la pile, en plus de la dernière fois que la détection de dérive a été initiée sur la pile ou sur l'une de ses ressources individuelles. Une pile est considérée comme ayant dérivé si une ou plusieurs de ses ressources ont dérivé.  
![\[Page Drifts (Écarts) pour la pile sélectionnée, montrant le statut de l’écart global de la pile, le statut de détection de l’écart et la dernière fois que la détection de l’écart a été lancée sur la pile ou sur l’une quelconque de ses ressources individuelles.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-overview-1.png)

   Dans la section **État de dérive des ressources**, CloudFormation répertorie chaque ressource de pile, son état de dérive et la dernière fois que la détection de dérive a été initiée sur la ressource. L'ID logique et l'ID physique de chaque ressource sont affichés pour vous aider à l'identifier. En outre, pour les ressources dont le statut est **MODIFIÉ**, CloudFormation affiche les détails de la dérive des ressources.

   Vous pouvez trier les ressources en fonction de leur statut d'écart à l'aide de la colonne **Statut de l'écart**.

   1. Pour afficher les détails sur une ressource modifiée.

     1. La ressource modifiée étant sélectionnée, sélectionnez **View drift details (Afficher les détails de l'écart)**.

       CloudFormation affiche la page détaillée de dérive pour cette ressource. Cette page répertorie les valeurs de propriété prévue et actuelle de la ressource, ainsi que toutes les différences entre les deux.

       Pour mettre en surbrillance une différence, sélectionnez le nom de la propriété dans la section **Différences**.
       + Les propriétés ajoutées sont surlignées en vert dans la colonne **Actuels** de la section **Détails**.
       + Les propriétés supprimées sont surlignées en rouge dans la colonne **Expected (Prévus)** de la section **Détails**.
       + Les propriétés dont les valeurs ont été modifiées sont surlignées en jaune dans les deux colonnes **Expected** et **Actuels**.  
![\[La section Statut de l’écart de ressource de la page Détails de l’écart contient les informations d’écart de chaque ressource de la pile qui prend en charge la détection de l’écart. Ces détails incluent le statut de l'écart et les valeurs de propriété prévues et actuelles.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**Pour détecter la dérive sur l'ensemble d'une pile à l'aide du AWS CLI**
**Important**  
Vérifiez la valeur **Heure du dernier contrôle de dérive** pour la pile et confirmez qu’elle est antérieure à l’horodatage affiché dans les résultats de dérive de la ressource afin d’éviter l’utilisation de données obsolètes.

Pour détecter la dérive sur l'ensemble d'une pile à l'aide de AWS CLI, utilisez les AWS CLI commandes suivantes :
+ **detect-stack-drift** pour lancer une opération de détection de l’écart sur une pile.
+ **describe-stack-drift-detection-status** pour surveiller le statut de l’opération de détection de l’écart de la pile.
+ **describe-stack-resource-drifts** pour passer en revue les détails de l’opération de détection de l’écart de la pile.

1. Utilisez **detect-stack-drift** pour détecter l’écart sur une pile complète. Spécifiez le nom ou l’ARN de la pile. Vous pouvez également spécifier la logique IDs des ressources spécifiques que vous souhaitez utiliser comme filtres pour cette opération de détection de dérive.

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

   Sortie :

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

1. Comme les opérations de détection d’écart de la pile peuvent être longues, utilisez **describe-stack-drift-detection-status** pour surveiller le statut de l’opération d’écart. Cette commande prend l’ID de détection de l’écart de pile renvoyé par la commande **detect-stack-drift**.

   Dans l’exemple ci-dessous, nous avons pris l’ID de détection de l’écart de pile renvoyé par l’exemple **detect-stack-drift** ci-dessus et l’avons transmis comme paramètre à **describe-stack-drift-detection-status**. Le paramètre renvoie les détails de l’opération qui montrent que l’opération de détection de l’écart s’est terminée, qu’une seule ressource de pile a dérivé et que la pile complète est considérée comme ayant dérivé, au final.

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

   Sortie :

   ```
   {
       "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. Une fois l’opération de détection de l’écart de pile terminée, utilisez la commande **describe-stack-resource-drifts** pour passer en revue les résultats, y compris les valeurs de propriété réelles et prévues des ressources ayant dérivé.

   L’exemple ci-dessous utilise l’option `--stack-resource-drift-status-filters` permettant de demander des informations de dérive de pile uniquement pour les ressources qui ont été modifiées ou supprimées. La demande renvoie des informations sur la seule ressource qui a été modifiée, y compris des détails sur deux de ses propriétés dont les valeurs ont été modifiées. Aucune ressource n'a été supprimée.

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

   Sortie :

   ```
   {
       "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"
           }
       ]
   }
   ```

# Détecter l’écart sur des ressources de pile individuelles
<a name="detect-drift-resource"></a>

Vous pouvez détecter l’écart sur des ressources spécifiques au sein d’une pile, plutôt que sur la pile complète. Cela est particulièrement utile lorsque vous avez uniquement besoin de déterminer si des ressources spécifiques correspondent à nouveau à leurs configurations de modèle prévues.

Lorsque vous effectuez une détection de dérive sur une ressource, met CloudFormation également à jour l'état général de dérive de la pile et l'**heure du dernier contrôle de dérive**, le cas échéant. Par exemple, supposons qu’une pile ait un état de dérive `IN_SYNC`. Vous devez CloudFormation effectuer une détection de dérive sur une ou plusieurs ressources contenues dans cette pile et CloudFormation détecter qu'une ou plusieurs de ces ressources ont dérivé. CloudFormation met à jour l'état de dérive de la pile sur`DRIFTED`. Inversement, supposons qu’une pile ait un état de dérive `DRIFTED` en raison d’une seule ressource dérivée. Si vous redéfinissez les valeurs de propriété attendues pour cette ressource, puis que vous détectez à nouveau une dérive sur la ressource, l'état de dérive de la ressource et le statut de dérive de la pile CloudFormation seront mis à jour `IN_SYNC` sans que vous ayez à détecter à nouveau la dérive sur l'ensemble de la pile.

**Pour détecter la dérive d'une ressource individuelle à l'aide du AWS Management Console**

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Dans la liste des piles, sélectionnez la pile contenant la ressource. CloudFormation affiche les détails de cette pile.

1. Dans le volet de navigation de gauche, sous **Piles**, choisissez **Actions de pile**, puis **Détecter l’écart**.

1. Sous **Statut de l'écart de ressource**, choisissez la ressource, puis sélectionnez **Détecter l'écart pour une ressource**.

   CloudFormation effectue une détection de dérive sur la ressource sélectionnée. En cas de succès, CloudFormation met à jour l'état de dérive de la ressource et l'état de dérive global de la pile, si nécessaire. CloudFormation met également à jour l'horodatage indiquant la date à laquelle la détection de dérive a été effectuée pour la dernière fois sur la ressource et sur la pile dans son ensemble. Si la ressource a été modifiée, CloudFormation affiche des informations de dérive détaillées sur les valeurs de propriété attendues et actuelles de la ressource.

1. Passez en revue les résultats de détection de l'écart pour la ressource.

   1. Pour afficher les détails sur une ressource modifiée.

     1. La ressource modifiée étant sélectionnée, sélectionnez **View drift details (Afficher les détails de l'écart)**.

       CloudFormation affiche les détails de la dérive pour cette ressource, y compris les valeurs de propriété attendues et actuelles de la ressource, ainsi que les différences entre les deux.

       Pour mettre en surbrillance une différence, sélectionnez le nom de la propriété dans la section **Différences**.
       + Les propriétés ajoutées sont surlignées en vert dans la colonne **Actuels** de la section **Détails**.
       + Les propriétés supprimées sont surlignées en rouge dans la colonne **Expected (Prévus)** de la section **Détails**.
       + Les propriétés dont les valeurs ont été modifiées sont surlignées en jaune dans les deux colonnes **Expected** et **Actuels**.  
![\[La section Statut de l’écart de ressource de la page Détails de l’écart contient les informations d’écart de chaque ressource de la pile qui prend en charge la détection de l’écart. Ces détails incluent le statut de l'écart et les valeurs de propriété prévues et actuelles.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/console-stacks-drifts-drift-details-differences-1.png)

**Pour détecter la dérive d'une ressource individuelle à l'aide du AWS CLI**
+ 
**Important**  
Vérifiez la valeur **Heure du dernier contrôle de dérive** pour la ressource de la pile et confirmez qu’elle est antérieure à l’horodatage affiché dans les résultats de dérive de la ressource afin d’éviter l’utilisation de données obsolètes.

  Pour détecter une dérive sur une ressource individuelle à l'aide de AWS CLI, utilisez la **detect-stack-resource-drift** commande. Spécifiez l’ID logique de la ressource et la pile dans laquelle elle se trouve.

  L’exemple suivant exécute une opération de détection de dérive sur une ressource spécifique de la pile, `my-drifted-resource`. La réponse renvoie des informations qui confirment que la ressource a été modifiée, y compris des détails sur deux de ses propriétés dont les valeurs ont été modifiées.

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

  Sortie :

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

# Résoudre l'écart avec une opération d'importation
<a name="resource-import-resolve-drift"></a>

Dans certains cas, la configuration d'une ressource peut s'écarter de sa configuration prévue ; vous pouvez alors souhaiter accepter la nouvelle configuration comme configuration prévue. Dans la plupart des cas, vous pouvez résoudre les résultats de l’écart en mettant à jour la définition de ressource dans le modèle de pile avec une nouvelle configuration, puis effectuer une mise à jour de pile. Toutefois, si la nouvelle configuration met à jour une propriété de ressource qui nécessite un remplacement, la ressource sera recréée lors de la mise à jour de la pile. Si vous souhaitez conserver la ressource existante, vous pouvez utiliser la fonction d'importation de ressource pour mettre à jour la ressource et résoudre les résultats de l'écart sans provoquer le remplacement de la ressource.

La résolution de l'écart d'une ressource par le biais d'une opération d'importation se compose des étapes de base suivantes :
+ [Ajoutez un DeletionPolicy attribut, défini sur Conserver, à la ressource](#resource-import-resolve-drift-console-step-01-update-stack). Cela garantit que la ressource existante est conservée et non supprimée lorsqu’elle est retirée de la pile.
+ [Retirez la ressource du modèle et exécutez une opération de mise à jour de la pile](#resource-import-resolve-drift-console-step-02-remove-drift). La ressource est retirée de la pile, mais n’est pas supprimée.
+ [Décrivez l’état réel de la ressource dans le modèle de pile, puis réimportez la ressource existante dans la pile](#resource-import-resolve-drift-console-step-03-update-template). La ressource est à nouveau ajoutée dans la pile et les différences de propriété qui causaient les résultats de l’écart sont résolues.

Pour plus d’informations sur l’importation de ressources, voir [Importation manuelle de AWS ressources dans une CloudFormation pile](import-resources-manually.md). Pour obtenir la liste des ressources qui prennent en charge l’importation, consultez [Prise en charge des types de ressources](resource-import-supported-resources.md).

Dans cet exemple, nous utilisons le modèle suivant, nommé `templateToImport.json`.

------
#### [ Example JSON ]

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Import test",
    "Resources": {
         "ServiceTable":{
           "Type":"AWS::DynamoDB::Table",
           "Properties":{
              "TableName":"Service",
              "AttributeDefinitions":[
                 {
                    "AttributeName":"key",
                    "AttributeType":"S"
                 }
              ],
              "KeySchema":[
                 {
                    "AttributeName":"key",
                    "KeyType":"HASH"
                 }
              ],
              "BillingMode": "PROVISIONED",
              "ProvisionedThroughput":{
                 "ReadCapacityUnits":5,
                 "WriteCapacityUnits":1
              }
           }
        },
        "GamesTable": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "TableName": "Games",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "key",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "key",
                        "KeyType": "HASH"
                    }
                ],
                "BillingMode": "PROVISIONED",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 1
                }
            }
        }
    }
}
```

------
#### [ Example YAML ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: Import test
Resources:
  ServiceTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Service
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PROVISIONED
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 1
  GamesTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Games
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PROVISIONED
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 1
```

------

Dans cet exemple, supposons qu'un utilisateur a modifié une ressource en dehors de CloudFormation. Après avoir exécuté la détection de l'écart, nous avons découvert que `GamesTable` a été modifié `BillingMode` en `PAY_PER_REQUEST`. Pour plus d’informations sur la détection d’écart, voir [Détectez les modifications de configuration non gérées apportées aux piles et aux ressources grâce à la détection des écarts](using-cfn-stack-drift.md).

![\[Les résultats de l'écart affichent les résultats attendus et réels dans la console.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/drift-results-gamestable.png)


Notre pile est maintenant obsolète, nos ressources sont actives, mais nous voulons préserver la configuration de ressources prévue. Pour ce faire, nous pouvons résoudre l'écart via une opération d'importation, sans interrompre les services.

## Résolvez la dérive avec une opération d'importation à l'aide de la CloudFormation console
<a name="resource-import-resolve-drift-console"></a>

### Étape 1. Mettre à jour la pile avec la politique de suppression Retain
<a name="resource-import-resolve-drift-console-step-01-update-stack"></a>

**Pour mettre à jour la pile à l’aide d’un attribut `DeletionPolicy` avec l’option `Retain`**

1. Connectez-vous à la CloudFormation console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Sur la page **Stacks (Piles)** choisissez la pile qui a fait l’objet de l’écart.

1. Choisissez **Update (Mettre à jour)**, puis **Replace current template (Remplacer le modèle actuel)** dans le volet des détails de la pile.

1. Dans la page **Specify template (Spécifier un modèle)**, indiquez votre modèle mis à jour contenant l'attribut `DeletionPolicy` avec l'option `Retain` via une des méthodes suivantes :
   + Choisissez **Amazon S3 URL (URL Amazon S3)**, puis spécifiez l'URL de votre modèle dans la zone de texte.
   + Choisissez **Upload a template file (Charger un fichier de modèle)**, puis recherchez votre modèle.

   Ensuite, choisissez **Suivant**.

1. Vérifiez la page **Specify stack details (Spécifier les détails de la pile)** et choisissez **Next (Suivant)**.

1. Vérifiez la page **Configure stack options (Configurer les options de la pile)** et choisissez **Next (Suivant)**.

1. Sur la *stack-name* page de **révision**, choisissez **Update stack**.

*Résultats* : Sur la page **Events (Événements)** de votre pile, le statut est `UPDATE_COMPLETE`.

Pour résoudre le problème de dérive lors d'une opération d'importation, sans interrompre les services, spécifiez a `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html)pour les ressources que vous souhaitez supprimer de votre pile. Dans l'exemple suivant, nous avons ajouté un [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html)attribut, défini sur`Retain`, à la `GamesTable` ressource.

------
#### [ Example JSON ]

```
    "GamesTable": {
        "Type": "AWS::DynamoDB::Table",
        "DeletionPolicy": "Retain",
        "Properties": {
            "TableName": "Games",
```

------
#### [ Example YAML ]

```
  GamesTable:
    Type: AWS::DynamoDB::Table
    DeletionPolicy: Retain
    Properties:
      TableName: Games
```

------

### Étape 2. Retirer les ressources présentant des écarts, les paramètres associés et les sorties
<a name="resource-import-resolve-drift-console-step-02-remove-drift"></a>

**Pour retirer les ressources présentant des écarts, les paramètres associés et les sorties**

1. Choisissez **Update (Mettre à jour)**, puis **Replace current template (Remplacer le modèle actuel)** dans le volet des détails de la pile.

1. Dans la page **Specify template (Spécifier un modèle)**, indiquez à votre modèle mis à jour ses ressources, ses paramètres associés et ses sorties supprimées du modèle de pile à l’aide de l’une des méthodes suivantes :
   + Choisissez **Amazon S3 URL (URL Amazon S3)**, puis spécifiez l'URL de votre modèle dans la zone de texte.
   + Choisissez **Upload a template file (Charger un fichier de modèle)**, puis recherchez votre modèle.

   Ensuite, choisissez **Suivant**.

1. Vérifiez la page **Specify stack details (Spécifier les détails de la pile)** et choisissez **Next (Suivant)**.

1. Vérifiez la page **Configure stack options (Configurer les options de la pile)** et choisissez **Next (Suivant)**.

1. Sur la *stack-name* page de **révision**, choisissez **Update stack**.

*Résultats* : L’**ID logique** `GamesTable` a un statut `DELETE_SKIPPED` sur la page **Events (Événements)** de votre pile.

Attendez que l'opération de mise à jour de la pile soit CloudFormation terminée. Une fois l’opération de mise à jour de la pile terminée, supprimez la ressource, les paramètres associés et les sorties du modèle de pile. Ensuite, importez le modèle mis à jour. Lorsque ces actions ont été effectuées, l'exemple de modèle ressemble à ce qui suit.

------
#### [ Example JSON ]

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Import test",
    "Resources": {
         "ServiceTable":{
           "Type":"AWS::DynamoDB::Table",
           "Properties":{
              "TableName":"Service",
              "AttributeDefinitions":[
                 {
                    "AttributeName":"key",
                    "AttributeType":"S"
                 }
              ],
              "KeySchema":[
                 {
                    "AttributeName":"key",
                    "KeyType":"HASH"
                 }
              ],
              "BillingMode": "PROVISIONED",
              "ProvisionedThroughput":{
                 "ReadCapacityUnits":5,
                 "WriteCapacityUnits":1
              }
           }
        }
    }
}
```

------
#### [ Example YAML ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: Import test
Resources:
  ServiceTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Service
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PROVISIONED
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 1
```

------

### Étape 3. Mettre à jour le modèle afin qu'il corresponde à l'état réel de vos ressources
<a name="resource-import-resolve-drift-console-step-03-update-template"></a>

**Pour mettre à jour le modèle afin qu'il corresponde à l'état réel des ressources**

1. Pour importer le modèle mis à jour, choisissez **Stack actions (Actions de la pile)** puis **Import resources into stack (Importer des ressources dans la pile)**.  
![\[Option Import resources into stack (Importer les ressources dans la pile) dans la console.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/stack-actions-import.png)

1. Consultez la page **Import overview (Vue d'ensemble de l'importation)** pour obtenir la liste des éléments que vous devez fournir dans le cadre de cette opération, puis choisissez **Next (Suivant)**.

1. Dans la page **Specify template (Spécifier le modèle)** indiquez votre modèle mis à jour via une des méthodes suivantes :
   + Choisissez **Amazon S3 URL (URL Amazon S3)**, puis spécifiez l'URL de votre modèle dans la zone de texte.
   + Choisissez **Upload a template file (Charger un fichier de modèle)**, puis recherchez votre modèle.

   Ensuite, choisissez **Suivant**.

1. Dans la page **Identify resources (Identifier les ressources)**, identifiez chaque ressource cible. Pour de plus amples informations, veuillez consulter [Identifiants de ressource](import-resources-manually.md#resource-import-identifiers-unique-ids).

   1. Sous **Identifier property (Propriété de l'identifiant)**, choisissez le type d'identifiant de ressource. Par exemple, la propriété `TableName` identifie la ressource `AWS::DynamoDB::Table`.

   1. Sous **Identifier value (Valeur de l'identifiant)**, entrez la valeur réelle de la propriété. Dans l'exemple de modèle, `TableName` pour la ressource `GamesTable` est `Games`.

   1. Choisissez **Suivant**.

1. Consultez la page **Specify stack details (Spécifier les détails de la pile)**, puis choisissez **Next (Suivant)**.

1. Dans la page **Import overview (Aperçu de l'importation)**, vérifiez les ressources importées, puis choisissez **Import resources (Importer les ressources)**. Le type de ressource `AWS::DynamoDB::Table` sera à nouveau importé dans votre pile.

*Résultats*: Dans cet exemple, nous avons résolu l'écart de ressource via une opération d'importation, sans interrompre les services. Vous pouvez vérifier la progression d'une action d'importation dans la CloudFormation console, dans l'onglet Événements. Les ressources importées auront un état `IMPORT_COMPLETE` suivi d'un statut `CREATE_COMPLETE` avec **Resource import complete (Importation de ressource terminée)** comme raison du statut.

Attendez que l'opération de mise à jour de la pile soit CloudFormation terminée. Une fois l’opération de mise à jour de la pile terminée, mettez à jour votre modèle de sorte qu’il corresponde à l’état de l’écart réel de vos ressources. Par exemple, `BillingMode` sera défini sur `PAY_PER_REQUEST`, et `ReadCapacityUnits` et `WriteCapacityUnits` seront définis sur `0`.

------
#### [ Example JSON ]

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Import test",
    "Resources": {
         "ServiceTable":{
           "Type":"AWS::DynamoDB::Table",
           "Properties":{
              "TableName":"Service",
              "AttributeDefinitions":[
                 {
                    "AttributeName":"key",
                    "AttributeType":"S"
                 }
              ],
              "KeySchema":[
                 {
                    "AttributeName":"key",
                    "KeyType":"HASH"
                 }
              ],
              "BillingMode": "PROVISIONED",
              "ProvisionedThroughput":{
                 "ReadCapacityUnits":5,
                 "WriteCapacityUnits":1
              }
           }
        },
        "GamesTable": {
            "Type": "AWS::DynamoDB::Table",
            "DeletionPolicy": "Retain",
            "Properties": {
                "TableName": "Games",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "key",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "key",
                        "KeyType": "HASH"
                    }
                ],
                "BillingMode": "PAY_PER_REQUEST",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 0,
                    "WriteCapacityUnits": 0
                }
            }
        }
    }
}
```

------
#### [ Example YAML ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: Import test
Resources:
  ServiceTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Service
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PROVISIONED
      ProvisionedThroughput:
        ReadCapacityUnits: 5
        WriteCapacityUnits: 1
  GamesTable:
    Type: AWS::DynamoDB::Table
    DeletionPolicy: Retain
    Properties:
      TableName: Games
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      BillingMode: PAY_PER_REQUEST
      ProvisionedThroughput:
        ReadCapacityUnits: 0
        WriteCapacityUnits: 0
```

------