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, voir Importation manuelle de ressources AWS dans une pile CloudFormation. Pour obtenir la liste des ressources qui prennent en charge l’importation, consultez Prise en charge 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 ait 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.

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ésoudre l'écart avec une opération d'importation à l'aide de la console CloudFormation

É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 Management Console et ouvrez la console CloudFormation à 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 (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.

  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 page Review nom_pile (Passer en revue nom_pile), choisissez Update stack (Mettre à jour la pile).

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

Pour résoudre l'écart à travers une opération d'importation sans interrompre les services, spécifiez un attribut DeletionPolicy Retain pour les ressources que vous souhaitez retirer de votre pile. Dans l'exemple suivant, nous avons ajouté à la ressource GamesTable un attribut DeletionPolicy, défini sur Retain.

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

  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 page Review nom_pile (Passer en revue nom_pile), choisissez Update stack (Mettre à jour la pile).

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

Attendez que CloudFormation termine l'opération de mise à jour de la pile. 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 (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.

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

    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 Next (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 l'onglet Events (Événements) de la console CloudFormation. 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 CloudFormation termine l'opération de mise à jour de la pile. 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