Création d'une pile à partir de ressources existantes - AWS CloudFormation

Création d'une pile à partir de ressources existantes

Cette rubrique explique comment créer une pile à partir de ressources AWS existantes en les décrivant dans un modèle. Pour rechercher les ressources existantes et générer automatiquement un modèle que vous pouvez utiliser pour importer des ressources existantes dans CloudFormation ou répliquer des ressources dans un nouveau compte, consultez Générez des modèles à partir de ressources existantes avec le générateur IaC.

Prérequis

Avant de commencer, les prérequis suivants doivent être remplis :

  • Un modèle qui décrit toutes les ressources qui doivent faire partie de la nouvelle pile. Enregistrez le modèle localement ou dans un compartiment Amazon S3.

  • Pour chaque ressource que vous souhaitez importer, incluez les éléments suivants :

    • les propriétés et les valeurs de propriétés qui définissent la configuration actuelle de la ressource.

    • identifiant unique de la ressource, tel que le nom de la ressource. Pour de plus amples informations, consultez Identifiants de ressource.

    • l’attribut DeletionPolicy.

Exemple de modèle

Dans cette procédure pas à pas, nous partons du principe que vous utilisez le modèle d’exemple suivant, appelé TemplateToImport.json, qui spécifie deux tables DynamoDB créées en dehors de CloudFormation. ServiceTable et GamesTable sont les cibles de l’importation.

Note

Ce modèle n’est fourni qu’à titre d’exemple. Pour l’utiliser à vos propres fins de test, remplacez les exemples de ressources par des ressources provenant de votre compte.

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "ServiceTable": { "Type": "AWS::DynamoDB::Table", "DeletionPolicy": "Retain", "Properties": { "TableName": "Service", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "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" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } } } }

Création d'une pile à partir de ressources existantes à l'aide de l' AWS Management Console

  1. Connectez-vous à la AWS Management Console et ouvrez la console CloudFormation à l’adresse https://console.aws.amazon.com/cloudformation.

  2. Dans la page Piles choisissez Créer une pile, puis choisissez With existing resources (import resources) (Avec des ressources existantes (importer des ressources)).

    Option de création d'une pile à partir de ressources existantes dans la console.
  3. Lisez la page Vue d'ensemble de l'importation pour obtenir la liste des éléments que vous devez fournir dans le cadre de cette opération. Ensuite, choisissez Suivant.

  4. Dans la page Specify template (Spécifier un modèle) indiquez votre modèle à l'aide de l'une des méthodes suivantes, puis choisissez Suivant.

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

  5. 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 ressource AWS::DynamoDB::Table peut être identifiée à l'aide de la propriété TableName.

    2. Sous Identifier value (Valeur de l'identifiant), tapez la valeur réelle de la propriété. Par exemple, la valeur de TableName pour la ressource GamesTable dans l'exemple de modèle est Games.

    3. Choisissez Suivant.

  6. Dans la page Specify stack details (Spécifier les détails de la pile), modifiez les paramètres souhaités, puis choisissez Suivant. Un jeu de modifications est crée automatiquement.

    Important

    L'opération d'importation échoue si vous modifiez des paramètres existants qui lacent une opération de création, de mise à jour ou de suppression.

  7. Dans la page de vérification de nom de la pile, vérifiez que les ressources correctes sont importées, puis choisissez Import resources (Importer les ressources). Le jeu de modifications créé à la dernière étape est alors automatiquement exécuté.

    Le panneau Événements de la page Stack details (Détails de la pile) pour votre nouvelle pile s'affiche.

    Onglet Événements de la console.
  8. (Facultatif) Exécutez la détection de l'écart sur la pile afin de vous assurer que le modèle et la configuration réelle des ressources importées correspondent. Pour plus d’informations sur la détection de l’écart, voir Détection de l'écart sur une pile CloudFormation complète.

  9. (Facultatif) Si vos ressources importées ne correspondent pas aux configurations de modèle attendues, corrigez les configurations de modèle ou mettez directement à jour les ressources. Dans cette démonstration, nous corrigeons les configurations des modèles afin qu'elles correspondent à leurs configurations réelles.

    1. Rétablissez l'opération d'importation des ressources affectées.

    2. Ajoutez à nouveau les cibles d'importation à votre modèle, en vous assurant que les configurations de modèle correspondent aux configurations réelles.

    3. Répétez les étapes 2 à 8 à l'aide du modèle modifié afin d'importer à nouveau les ressources.

Création d'une pile à partir de ressources existantes à l'aide de l' AWS CLI

  1. Pour savoir quelles propriétés identifient chaque type de ressource dans le modèle, exécutez la commande get-template-summary en spécifiant l’URL S3 du modèle. Par exemple, la ressource AWS::DynamoDB::Table peut être identifiée à l'aide de la propriété TableName. Pour la ressource GamesTable de l'exemple de modèle, la valeur de TableName est Games. Vous aurez besoin de ces informations à l’étape suivante.

    aws cloudformation get-template-summary \ --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json

    Pour de plus amples informations, consultez Identifiants de ressource.

  2. Composez une liste des ressources réelles de votre modèle et de leurs identifiants uniques dans le format de chaîne JSON suivant.

    [{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}},{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"ServiceTable","ResourceIdentifier":{"TableName":"Service"}}]

    Sinon, vous pouvez spécifier les paramètres au format JSON dans un fichier de configuration.

    Par exemple, pour importer ServiceTable et GamesTable, vous pouvez créer un fichier ResourcesToImport.txt contenant la configuration suivante.

    [ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier":{ "TableName":"Games" } }, { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"ServiceTable", "ResourceIdentifier":{ "TableName":"Service" } } ]
  3. Pour créer un ensemble de modifications, utilisez la commande create-change-set suivante et remplacez le texte de l’espace réservé. Pour l’option --change-set-type, indiquez une valeur de IMPORT. Pour l’option --resources-to-import, remplacez l’exemple de chaîne JSON par la chaîne JSON que vous venez de créer.

    aws cloudformation create-change-set \ --stack-name TargetStack --change-set-name ImportChangeSet \ --change-set-type IMPORT \ --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json \ --resources-to-import '[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}},{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"ServiceTable","ResourceIdentifier":{"TableName":"Service"}}]'
    Note

    --resources-to-import ne prend pas en charge le YAML en ligne. Les exigences relatives aux guillemets d’échappement dans la chaîne JSON varient en fonction de votre terminal. Pour plus d’informations, consultez la section Utilisation des guillemets dans les chaînes de caractères du Guide de l’utilisateur AWS Command Line Interface.

    Vous pouvez également utiliser l’URL d’un fichier en entrée pour l’option --resources-to-import, comme indiqué dans l’exemple suivant.

    --resources-to-import file://ResourcesToImport.txt
  4. Vérifiez le jeu de modifications pour vous assurer que les ressources appropriées seront importées.

    aws cloudformation describe-change-set \ --change-set-name ImportChangeSet --stack-name TargetStack
  5. Pour lancer le jeu de modifications et importer les ressources, utilisez la commande execute-change-set suivante et remplacez le texte de remplacement. Une fois l'opération (IMPORT_COMPLETE) terminée, les ressources sont importées avec succès.

    aws cloudformation execute-change-set \ --change-set-name ImportChangeSet --stack-name TargetStack
  6. (Facultatif) Exécutez la détection de l'écart sur la pile IMPORT_COMPLETE pour vous assurer que le modèle et la configuration réelle des ressources importées correspondent. Pour plus d’informations sur la détection de l’écart, voir Détecter l'écart sur des ressources de pile individuelles.

    1. Exécutez la détection d’écart sur la pile spécifiée.

      aws cloudformation detect-stack-drift --stack-name TargetStack

      Si elle aboutit, cette commande renvoie un résultat similaire à ce qui suit.

      { "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }
    2. Afficher la progression d’une opération de détection d’écart pour l’ID de détection d’écart de pile spécifié.

      aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id 624af370-311a-11e8-b6b7-500cexample
    3. Affichez les informations d’écart pour les ressources dont l’écart a été vérifiée dans la pile spécifiée.

      aws cloudformation describe-stack-resource-drifts --stack-name TargetStack
  7. (Facultatif) Si vos ressources importées ne correspondent pas aux configurations de modèle attendues, corrigez les configurations de modèle ou mettez directement à jour les ressources. Dans cette démonstration, nous corrigeons les configurations des modèles afin qu'elles correspondent à leurs configurations réelles.

    1. Rétablissez l'opération d'importation des ressources affectées.

    2. Ajoutez à nouveau les cibles d'importation à votre modèle, en vous assurant que les configurations de modèle correspondent aux configurations réelles.

    3. Répétez les étapes 3 à 6 à l'aide du modèle modifié afin d'importer à nouveau les ressources.