Détection des écarts sur les StackSets CloudFormation - AWS CloudFormation

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étection des écarts sur les StackSets CloudFormation

Même lorsque vous gérez vos piles et les ressources qu'elles contiennent 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. En effectuant une détection d’écart sur un StackSet, vous pouvez déterminer si l’une des instances de pile appartenant à ce StackSet diffère ou s’est écartée de sa configuration prévue.

Comment CloudFormation détecte les écarts sur un StackSet

Lorsque CloudFormation effectue une détection d’écart sur un StackSet, il effectue une détection d’écart sur la pile associée à chaque instance de pile dans le StackSet. Pour ce faire, CloudFormation compare l'état actuel de chaque ressource de la pile avec l'état attendu de cette ressource, tel que défini dans le modèle de la pile et tous les paramètres d'entrée spécifiés. Si l'état actuel d'une ressource diffère de l'état attendu, cette ressource est considérée comme présentant un écart. Si une ou plusieurs ressources d'une pile présentent un écart, alors la pile elle-même est considérée comme présentant un écart, et les instances de pile auxquelles la pile est associée sont également considérées comme présentant un écart. Si une ou plusieurs instances d’une pile dans un StackSet ont dérivé, le StackSet lui-même est considéré comme ayant dérivé.

La détection de l'écart identifie les modifications non gérées, c'est-à-dire les modifications apportées aux piles en dehors de CloudFormation. Les modifications apportées via CloudFormation directement à une pile, plutôt qu’au niveau StackSet, ne sont pas considérées comme des écarts. Par exemple, supposons que vous ayez une pile associée à une instance de pile d’un StackSet. Si vous utilisez CloudFormation pour mettre à jour cette pile afin d’utiliser un modèle différent, cela n’est pas considéré comme un écart, même si cette pile a désormais un modèle différent de toutes les autres piles appartenant au StackSet. En effet, la pile correspond toujours à la configuration de modèle et de paramètre attendue dans CloudFormation.

Pour plus d'informations sur la façon dont CloudFormation effectue la détection de l'écart sur une pile, consultez Détectez les modifications de configuration non gérées apportées aux piles et aux ressources grâce à la détection des écarts.

Étant donné que CloudFormation effectue la détection de l'écart sur chaque pile individuellement, toutes les valeurs de paramètre remplacées sont prises en compte pour déterminer l'écart d'une pile. Pour de plus amples informations sur le remplacement des paramètres de modèle dans les instances de pile, veuillez consulter Remplacer les valeurs des paramètres sur les piles de votre CloudFormation StackSet.

Si vous effectuez la détection de l'écart directement sur une pile associée à une instance de pile, ces résultats ne sont pas disponibles dans la page StackSets de la console.

Détecter l’écart sur un StackSet (console)

Pour détecter un écart sur un StackSet
  1. Ouvrez la console CloudFormation, à l’adresse https://console.aws.amazon.com/cloudformation.

  2. Sur la page StackSets sélectionnez le StackSet sur lequel vous souhaitez effectuer la détection de l’écart.

  3. Dans le menu Actions sélectionnez Detect drifts (Détecter les écarts).

    CloudFormation affiche une barre d’informations indiquant que la détection des écarts a été lancée pour le StackSet sélectionné.

  4. Facultatif : pour suivre la progression de l'opération de détection de l'écart :

    1. Sélectionnez le nom du StackSet pour afficher la page de détails du StackSet.

    2. Sélectionnez l'onglet Operations (Opérations) sélectionnez l'opération de détection de l'écart, puis sélectionnez View drift details (Afficher les détails de l'écart).

    CloudFormation affiche la boîte de dialogue Operation details (Détails de l'opération).

  5. Attendez que CloudFormation termine l'opération de détection de l'écart. Lorsque l’opération de détection de l’écart est terminée, CloudFormation met à jour Statut de l’écart et Heure de la dernière vérification de l’écart pour votre StackSet. Ces champs sont répertoriés dans l’onglet Présentation de la page Détails du StackSet pour le StackSet sélectionné.

    L’opération de détection d’écart peut prendre un certain temps, en fonction du nombre d’instances de pile incluses dans le StackSet et du nombre de ressources incluses dans le StackSet. Vous ne pouvez exécuter qu’une seule opération de détection d’écart à la fois sur un StackSet donné. CloudFormation continue l'opération de détection de l'écart même après que vous ayez fermé la barre d'informations.

  6. Pour consulter les résultats de la détection d’écart pour les instances de pile dans un StackSet, sélectionnez l’onglet Instances de pile.

    La colonne Nom de la pile répertorie le nom de la pile associée à chaque instance de pile et la colonne Statut de l'écart répertorie le statut de l'écart de cette pile. Une pile est considérée comme ayant dérivé si une ou plusieurs de ses ressources ont dérivé.

  7. Pour consulter les résultats de détection de l'écart pour la pile associée à une instance de pile spécifique :

    1. Choisissez l'onglet Opérations.

    2. Sélectionnez l'opération d'écart pour laquelle vous souhaitez afficher les résultats de détection de dérive l'écart. Un volet fractionné affichera le statut et le motif de l'instance de pile pour l'opération sélectionnée. Pour une opération d'écart, la colonne du motif du statut indique le statut de l'écart d'une instance de pile.

    3. Choisissez l'instance de pile pour laquelle vous souhaitez afficher les détails de l'écart, puis choisissez Afficher les écarts des ressources. La table Statut de l'écart de ressource de la page Écarts de ressources répertorie chaque ressource de pile avec son statut d'écart et la dernière fois que la détection de l'écart a été lancée sur la ressource. L'ID logique et l'ID physique de chaque ressource sont affichés pour vous aider à l'identifier.

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

    Pour afficher les détails sur une ressource modifiée :

    1. La ressource étant sélectionnée, sélectionnez Afficher les détails de l'écart.

      CloudFormation affiche la page des détails de l'écart pour cette ressource particulière. Cette page répertorie les différences entre les ressources. Elle répertorie également les valeurs des propriétés attendues et actuelles des ressources.

      Note

      Si la pile appartient à une région et à un compte différents de ceux auxquels vous êtes actuellement connecté, le bouton Détecter l'écart sera désactivé et vous ne pourrez pas afficher les détails.

Détecter l’écart sur un StackSet (AWS CLI)

Pour détecter l’écart sur l’ensemble d’une pile à l’aide de AWS CLI, procédez comme suit :

Pour détecter un écart sur un StackSet
  1. Utilisez la commande detect-stack-set-drift pour détecter l’écart sur l’ensemble d’un StackSet et ses instances de pile associées.

    L’exemple suivant lance la détection d’écart sur StackSet stack-set-drift-example.

    aws cloudformation detect-stack-set-drift \ --stack-set-name stack-set-drift-example

    Sortie :

    { "OperationId": "c36e44aa-3a83-411a-b503-cb611example" }
  2. Étant donné que les opérations de détection d’écart StackSet peuvent être longues, utilisez la commande describe-stack-set-operation pour surveiller l’état de l’opération d’écart. Cette commande utilise l’ID de détection de l’écart du StackSet renvoyé par la commande detect-stack-set-drift.

    Les exemples suivants utilisent l’ID d’opération de l’exemple précédent pour renvoyer des informations sur l’opération de détection de l’écart du StackSet. Dans cet exemple, l'opération est toujours en cours d'exécution. Sur les sept instances de pile associées à ce StackSet, une instance de pile a déjà été détectée comme ayant dérivé, deux instances sont synchronisées et la détection d’écart pour les quatre instances de pile restantes est toujours en cours. Comme une instance a dérivé, l’état d’écart du StackSet lui-même est désormais DRIFTED.

    aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example

    Sortie :

    { "StackSetOperation": { "Status": "RUNNING", "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "OperationPreferences": { "RegionOrder": [] }, "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 1, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:34:28.543Z", "InSyncStackInstancesCount": 2, "InProgressStackInstancesCount": 4, "DriftStatus": "DRIFTED", "FailedStackInstancesCount": 0 }, "Action": "DETECT_DRIFT", "CreationTimestamp": "2019-12-04T20:33:13.673Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "OperationId": "c36e44aa-3a83-411a-b503-cb611example" } }

    Cet exemple illustre la même commande exécutée ultérieurement et montre les informations renvoyées une fois l'opération de détection de l'écart terminée. Deux des sept instances de pile associées à ce StackSet ont dérivé, ce qui rend l’état d’écart du StackSet lui-même DRIFTED.

    aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example

    Sortie :

    { "StackSetOperation": { "Status": "SUCCEEDED", "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "OperationPreferences": { "RegionOrder": [] } "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "EndTimestamp": "2019-12-04T20:37:32.829Z", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 2, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z", "InSyncStackInstancesCount": 5, "InProgressStackInstancesCount": 0, "DriftStatus": "DRIFTED", "FailedStackInstancesCount": 0 }, "Action": "DETECT_DRIFT", "CreationTimestamp": "2019-12-04T20:33:13.673Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "OperationId": "c36e44aa-3a83-411a-b503-cb611example" } }
  3. Lorsque l’opération de détection de l’écart du StackSet est terminée, utilisez les commandes describe-stack-set, list-stack-instances, describe-stack-instance et list-stack-instance-resource-drifts pour consulter les résultats.

    La commande describe-stack-set inclut les mêmes informations détaillées sur l’écart que celles renvoyées par la commande describe-stack-set-operation.

    aws cloudformation describe-stack-set \ --stack-set-name stack-set-drift-example

    Sortie :

    { "StackSet": { "Status": "ACTIVE", "Description": "Demonstration of drift detection on stack sets.", "Parameters": [], "Tags": [ { "Value": "Drift detection", "Key": "Feature" } ], "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "Capabilities": [], "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 2, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z", "InProgressStackInstancesCount": 0, "DriftStatus": "DRIFTED", "DriftDetectionStatus": "COMPLETED", "InSyncStackInstancesCount": 5, "FailedStackInstancesCount": 0 }, "StackSetARN": "arn:aws:cloudformation:us-east-1:123456789012:stackset/stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "TemplateBody": [details omitted], "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22ebexample", "StackSetName": "stack-set-drift-example" } }

    Vous pouvez utiliser la commande list-stack-instances pour renvoyer des informations récapitulatives sur les instances de piles associées à un StackSet, y compris l’état de l’écart de chaque instance de pile.

    Dans cet exemple, l’exécution de list-stack-instances sur l’exemple de StackSet, où le filtre de l’état de l’écart est défini sur DRIFTED, nous permet d’identifier les deux instances de piles dont l’état de l’écart est DRIFTED.

    aws cloudformation list-stack-instances \ --stack-set-name stack-set-drift-example \ --filters Name=DRIFT_STATUS,Values=DRIFTED

    Sortie :

    { "Summaries": [ { "StackId": "arn:aws:cloudformation:eu-west-1:123456789012:stack/StackSet-stack-set-drift-example-b0fb6083-60c0-4e39-af15-2f071e0db90c/0e4f0940-16d4-11ea-93d8-0641cexample", "Status": "CURRENT", "Account": "012345678910", "Region": "eu-west-1", "LastDriftCheckTimestamp": "2019-12-04T20:37:32.687Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" }, { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "123456789012", "Region": "us-east-1", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" }, [additional stack instances omitted] ] }

    La commande describe-stack-instance renvoie également ces informations, mais pour une seule instance de pile, comme dans l’exemple ci-dessous.

    aws cloudformation describe-stack-instance \ --stack-set-name stack-set-drift-example \ --stack-instance-account 012345678910 --stack-instance-region us-east-1

    Sortie :

    { "StackInstance": { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "123456789012", "Region": "us-east-1", "ParameterOverrides": [], "DriftStatus": "DRIFTED", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" } }
  4. Une fois que vous avez identifié les instances de pile qui ont dérivé, vous pouvez utiliser les informations sur les instances de pile renvoyées par les commandes list-stack-instances ou describe-stack-instance pour exécuter la commande list-stack-instance-resource-drifts. Cette commande renvoie des informations détaillées sur les ressources de la pile qui présentent un écart pour une opération d'écart particulière.

    L'exemple suivant utilise le paramètre --stack-instance-resource-drift-statuses pour demander des informations d'écart de pile pour les ressources qui ont été modifiées ou supprimées dans le précédent exemple d'opération d'écart. 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 et leurs valeurs qui ont été modifiées. Aucune ressource n'a été supprimée.

    aws cloudformation list-stack-instance-resource-drifts \ --stack-set-name my-stack-set-with-resource-drift \ --stack-instance-account 123456789012 \ --stack-instance-region us-east-1 \ --operation-id c36e44aa-3a83-411a-b503-cb611example \ --stack-instance-resource-drift-statuses MODIFIED DELETED

    Sortie :

    { "Summaries": [ { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/my-stack-set-with-resource-drift/489e5570-df85-11e7-a7d9-50example", "ResourceType": "AWS::SQS::Queue", "Timestamp": "2018-03-26T17:23:34.489Z", "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/123456789012/my-stack-with-resource-drift-Queue-494PBHCO76H4", "StackResourceDriftStatus": "MODIFIED", "PropertyDifferences": [ { "PropertyPath": "/DelaySeconds", "ActualValue": "120", "ExpectedValue": "20", "DifferenceType": "NOT_EQUAL" }, { "PropertyPath": "/RedrivePolicy/maxReceiveCount", "ActualValue": "12", "ExpectedValue": "10", "DifferenceType": "NOT_EQUAL" } ], "LogicalResourceId": "Queue" } ] }

Arrêt de la détection d’écart sur un StackSet

La détection d’écart sur un StackSet pouvant être une opération de longue durée, il peut arriver que vous souhaitiez arrêter une opération de détection d’écart en cours d’exécution sur un StackSet.

Pour arrêter la détection de l’écart sur un StackSet (console)
  1. Ouvrez la console CloudFormation, à l’adresse https://console.aws.amazon.com/cloudformation.

  2. Sur la page StackSets sélectionnez le nom du StackSet.

    CloudFormation affiche la page Détails des ensembles de piles pour le StackSet sélectionné.

  3. Sur la page StackSets details (Détails des ensembles de piles) sélectionnez l'onglet Operations (Opérations) puis sélectionnez l'opération de détection de l'écart.

  4. Sélectionnez Stop operation (Arrêter l'opération).

Pour arrêter la détection de l’écart sur un StackSet (AWS CLI)
  • Utilisez la commande stop-stack-set-operation. Vous devez fournir à la fois le nom du StackSet et l’ID de l’opération StackSet de détection d’écart.

    aws cloudformation stop-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id 624af370-311a-11e8-b6b7-500cexample