Résoudre l'écart avec une opération d'importation - 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.

Résoudre l'écart avec une opération d'importation

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 :

Pour plus d'informations sur l'importation de ressources, consultezImporter AWS des ressources dans une CloudFormation pile avec une importation de ressources. Pour obtenir la liste des ressources qui prennent en charge l'importation, consultezSupport des types de ressources.

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 de dérive, consultezDétectez les modifications de configuration non gérées apportées aux piles et aux ressources grâce à la détection de dérive.

Les résultats de l'écart affichent les résultats attendus et réels dans la console.

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

Étape 1. Mettre à jour la pile avec la politique de suppression Retain

Pour mettre à jour la pile à l'aide d'un attribut DeletionPolicy avec l'option Retain
  1. Connectez-vous à la AWS CloudFormation console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/cloudformation.

  2. Sur la page Stacks (Piles) choisissez la pile qui a fait l'objet de l'écart.

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

  4. 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, puis spécifiez le modèle correspondant URL à 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.

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

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

  7. 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 DeletionPolicypour les ressources que vous souhaitez supprimer de votre pile. Dans l'exemple suivant, nous avons ajouté un DeletionPolicyattribut, défini surRetain, à 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

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.

  2. 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, puis spécifiez le modèle correspondant URL à 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.

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

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

  5. 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

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.
  2. 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).

  3. 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, puis spécifiez le modèle correspondant URL à 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.

  4. Dans la page Identify resources (Identifier les ressources), identifiez chaque ressource cible. Pour de plus amples informations, veuillez consulter Identifiants de ressources.

    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.

    2. 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.

    3. Choisissez Suivant.

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

  6. 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