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éplacement de ressources d'une pile à une autre
À l'aide de la fonction resource import
, vous pouvez déplacer des ressources d'une pile à une autre ou les remanier, . Vous devez d'abord ajouter une politique de suppression Retain
à la ressource que vous souhaitez déplacer pour vous assurer que la ressource est préservée lorsque vous la supprimez de la pile source et que vous l'importez dans la pile cible.
Si vous débutez dans le domaine de l'importation, nous vous recommandons de consulter d'abord les informations d'introduction de cette Importer AWS des ressources dans une CloudFormation pile avec une importation de ressources rubrique.
Important
Toutes les ressources ne prennent pas en charge les opérations d'importation. Veuillez consulter Ressources prenant en charge les opérations d'importation avant de supprimer une ressource de votre pile. Si vous supprimez de votre pile une ressource qui ne prend pas en charge les opérations d'importation, vous ne pouvez pas importer la ressource dans une autre pile ou la ramener dans la pile source.
Refactorisez une pile à l'aide du AWS Management Console
-
Dans le modèle de source, spécifiez un
Retain
DeletionPolicypour la ressource que vous souhaitez déplacer.Dans l'exemple de modèle source suivant,
Games
est la cible de ce remaniement.Exemple 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" } ], "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 } } } } }
-
Ouvrez la CloudFormation console pour effectuer une mise à jour de la pile afin d'appliquer la politique de suppression.
-
Dans la page Piles, avec la pile sélectionnée, choisissez Mettre à jour.
-
Sous Prepare template (Préparer le modèle), choisissez Replace current template (Remplacer le modèle actuel).
-
Dans Specify template (Spécifier le modèle), indiquez le modèle source mis à jour avec l'attribut
DeletionPolicy
défini surGamesTable
, puis choisissez Suivant.-
Choisissez Amazon S3 URL, puis spécifiez le URL modèle source mis à jour dans la zone de texte.
-
Choisissez Upload a template file (Télécharger un fichier de modèle), puis recherchez le fichier de modèle source mis à jour.
-
-
Dans la page Specify stack details (Spécifier les détails de la pile) aucune modification n'est requise. Choisissez Suivant.
-
Dans la page Configure stack options (Configurer les options de pile) aucune modification n'est requise. Choisissez Suivant.
-
Sur la
SourceStackName
page Révision, passez en revue vos modifications. Si votre modèle contient des ressources IAM, sélectionnez I acknowledge that this template may create IAM resources (Je sais que ce modèle peut créer des ressources IAM) pour confirmer que vous souhaitez utiliser des ressources IAM dans le modèle. Pour plus d'informations sur l'utilisation de ressources IAM dans les modèles, consultez Contrôlez CloudFormation l'accès avec AWS Identity and Access Management. Mettez ensuite à jour votre pile source en créant un jeu de modifications ou mettez à jour votre pile source directement.
-
-
Supprimez la ressource, les paramètres associés et les sorties du modèle source, puis ajoutez-les au modèle cible.
Le modèle source ressemble maintenant à ce qui suit.
Exemple 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" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } } } }
L'exemple de modèle cible suivant a actuellement la ressource
PlayersTable
et contient maintenant égalementGamesTable
.Exemple JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "PlayersTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "TableName": "Players", "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 } } } } }
-
Répétez les étapes 2 et 3 pour mettre à jour à nouveau la pile source, afin, cette fois, de supprimer la ressource cible de la pile.
-
Effectuez une opération d'importation pour ajouter
GamesTable
à la pile cible.-
Sur la page Piles, sélectionnez la pile parent, choisissez Stack actions (Actions pour la pile), puis Import resources into stack (Importer les ressources dans la pile).
-
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.
-
Dans la page Specify template (Spécifier un modèle) effectuez l'une des opérations suivantes, puis choisissez Next (Suivant).
-
Choisissez Amazon S3 URL, puis spécifiez un URL dans la zone de texte.
-
Choisissez Upload a template file (Charger un fichier de modèle), puis recherchez un fichier à télécharger.
-
-
Dans la page Identify resources (Identifier les ressources) identifiez la ressource que vous déplacez (dans cet exemple,
GamesTable
). Pour de plus amples informations, veuillez consulter Identifiants de ressources.-
Sous Identifier property (Propriété de l'identifiant), choisissez le type d'identifiant de ressource. Par exemple, une ressource
AWS::DynamoDB::Table
peut être identifiée à l'aide de la propriétéTableName
. -
Sous Identifier value (Valeur de l'identifiant), tapez la valeur réelle de la propriété. Par exemple,
.GamesTables
-
Choisissez Suivant.
-
-
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.
-
Sur la
TargetStackName
page Révision, vérifiez que la bonne ressource est importée, puis choisissez Importer des ressources. Le jeu de modifications lance la dernière étape est alors automatiquement exécuté. Toutes les balises au niveau de la pile sont appliquées aux ressources importées à ce moment-là. -
Le panneau Événements de la page Stack details (Détails de la pile) pour votre pile parent s'affiche.
Note
Il n'est pas nécessaire d'exécuter la détection de l'écart sur la pile parent après cette opération d'importation, car la ressource
AWS::CloudFormation::Stack
est déjà gérée par CloudFormation.
-
Refactorisez une pile à l'aide du AWS CLI
-
Dans le modèle de source, spécifiez un
Retain
DeletionPolicypour la ressource que vous souhaitez déplacer.Dans l'exemple de modèle source suivant,
GamesTable
est la cible de ce remaniement.Exemple 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" } ], "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 } } } } }
-
Mettez à jour la pile source afin d'appliquer la politique de suppression à la ressource.
aws cloudformation update-stack --stack-name
SourceStackName
-
Supprimez la ressource, les paramètres associés, et les sorties du modèle source, puis ajoutez-les au modèle cible.
Le modèle source ressemble maintenant à ce qui suit.
Exemple 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" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } } } }
L'exemple de modèle cible suivant a actuellement la ressource
PlayersTable
et contient maintenant égalementGamesTable
.Exemple JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "PlayersTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "TableName": "Players", "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 } } } } }
-
Mettez à jour la pile source afin de supprimer la ressource
GamesTable
et ses paramètres et sorties associés de la pile.aws cloudformation update-stack --stack-name
SourceStackName
-
Composez une liste des ressources réelles à importer et de leurs identifiants uniques dans le format de JSON chaîne suivant. Pour de plus amples informations, veuillez consulter Identifiants de ressources.
[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
Vous pouvez également spécifier les paramètres JSON formatés dans un fichier de configuration.
Par exemple, pour importer
GamesTable
, vous pouvez créer unResourcesToImport.txt
fichier contenant la configuration suivante.[ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
-
Pour créer un ensemble de modifications, utilisez la create-change-set commande suivante et remplacez le texte de l'espace réservé. Pour l’option
--change-set-type
, indiquez une valeur deIMPORT
. Pour l'--resources-to-import
option, remplacez la JSON chaîne d'échantillon par la JSON chaîne que vous venez de créer.aws cloudformation create-change-set \ --stack-name
TargetStackName
--change-set-nameImportChangeSet
\ --change-set-typeIMPORT
\ --template-bodyfile://TemplateToImport.json
\ --resources-to-import "'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'
"Note
--resources-to-import
ne supporte pas l'intégration en ligne. YAML Les conditions requises pour éviter les guillemets dans la JSON chaîne varient en fonction de votre terminal. Pour plus d'informations, consultez la section Utilisation de guillemets dans les chaînes du Guide de AWS Command Line Interface l'utilisateur.Vous pouvez également utiliser un fichier URL comme entrée pour l'
--resources-to-import
option, comme indiqué dans l'exemple suivant.--resources-to-import
file://ResourcesToImport.txt
-
Vérifiez le jeu de modifications pour vous assurer que la ressource correcte est importée dans la pile cible.
aws cloudformation describe-change-set \ --change-set-name
ImportChangeSet
-
Pour lancer l'ensemble de modifications et importer la ressource, utilisez la execute-change-set commande suivante et remplacez le texte de remplacement. Toutes les balises au niveau de la pile sont appliquées aux ressources importées à ce moment-là. Une fois l'opération
(IMPORT_COMPLETE)
terminée, la ressource est importée avec succès.aws cloudformation execute-change-set \ --change-set-name
ImportChangeSet
--stack-nameTargetStackName
Note
Il n'est pas nécessaire d'exécuter la détection de l'écart sur la pile cible après cette opération d'importation car la ressource est déjà gérée par CloudFormation.