Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Spostamento di risorse tra stack
Utilizzando la funzionalità resource import, è possibile spostare le risorse tra stack o eseguirne il refactoring. Prima di tutto è necessario aggiungere una policy di eliminazione Retain alla risorsa da spostare per fare in modo che la risorsa venga mantenuta quando viene rimossa dallo stack di origine e importata nello stack di destinazione.
Se non conosci l’importazione, ti consigliamo di esaminare prima le informazioni introduttive nella sezione Importazione delle risorse AWS in uno stack CloudFormation.
Importante
Non tutte le risorse supportano le operazioni di importazione. Consulta Risorse che supportano le operazioni di importazione prima di rimuovere una risorsa dallo stack. Se rimuovi una risorsa che non supporta le operazioni di importazione dallo stack, non potrai importarla in un altro stack o riportarla nello stack di origine.
Refactoring di uno stack utilizzando la Console di gestione AWS
-
Nel modello di origine specificare una
RetainDeletionPolicy per la risorsa che si desidera spostare.Nel seguente modello di origine di esempio,
Gamesè la destinazione di questo refactoring.Esempio 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 } } } } } -
Apri la console CloudFormation al fine di eseguire un aggiornamento dello stack per applicare la policy di eliminazione.
-
Nella pagina Stack con lo stack selezionato, scegliere Aggiorna.
-
In Prepara modello, scegliere Sostituisci modello corrente.
-
In Specifica modello, fornire il modello di origine aggiornato con l’attributo
DeletionPolicysuGamesTable, quindi scegliere Successivo.-
Scegliere URL Amazon S3, quindi specificare l’URL per il modello di origine aggiornato nella casella di testo.
-
Scegliere Carica un file modello, quindi cercare il file modello di origine aggiornato.
-
-
Nella pagina Specifica dettagli stack, non sono necessarie modifiche. Scegli Successivo.
-
Nella pagina Configura opzioni stack non sono necessarie modifiche. Scegli Successivo.
-
Nella pagina Review
SourceStackName, controlla le modifiche. Se il modello contiene risorse IAM, selezionareAcconsento che questo modello possa creare risorse IAM per specificare che si desidera utilizzare risorse IAM nel modello. Per ulteriori informazioni sull’utilizzo delle risorse IAM nei modelli, consulta Controlla CloudFormation l'accesso con AWS Identity and Access Management. Quindi, aggiornare lo stack di origine creando un set di modifiche o aggiornare direttamente lo stack di origine.
-
-
Rimuovi la risorsa , i parametri correlati e gli output dal modello di origine, quindi aggiungili al modello di destinazione.
Il modello di origine ora è simile al seguente.
Esempio 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 } } } } }Il seguente modello di destinazione di esempio ha attualmente la risorsa
PlayersTablee ora contiene ancheGamesTable.Esempio 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 } } } } } -
Ripeti i passaggi 2-3 per aggiornare nuovamente lo stack di origine, questa volta per eliminare la risorsa di destinazione dallo stack.
-
Eseguire un’operazione di importazione per aggiungere
GamesTableallo stack di destinazione.-
Nella pagina Stack con lo stack padre selezionato, scegliere Operazioni stack, quindi scegliere Importa risorse nello stack.
-
Leggere la pagina Panoramica importazione per un elenco di elementi da fornire durante questa operazione. Quindi, seleziona Next.
-
Nella pagina Specify template completa una delle seguenti operazioni, quindi scegli Next.
-
Scegliere URL Amazon S3, quindi specificare un URL nella casella di testo.
-
Scegliere Carica un file modello, quindi cercare un file da caricare.
-
-
Nella pagina Identifica risorse, identificare la risorsa che si sta spostando (in questo esempio
GamesTable). Per ulteriori informazioni, consulta Identificatori di risorse .-
In Proprietà identificatore, scegliere il tipo di identificatore di risorsa. Ad esempio, una risorsa
AWS::DynamoDB::Tablepuò essere identificata utilizzando la proprietàTableName. -
In Valore identificatore, digitare il valore effettivo della proprietà. Ad esempio,
.GamesTables -
Scegli Successivo.
-
-
Nella pagina Specifica dettagli stack, modificare i parametri, quindi scegliere Successivo. Questo crea automaticamente un set di modifiche.
Importante
L’operazione di importazione ha esito negativo se si modificano i parametri esistenti che iniziano un’operazione di creazione, aggiornamento o eliminazione.
-
Nella pagina Review
TargetStackName, verifica che venga importata la risorsa corretta, quindi scegli Importa risorse. In questo modo il set di modifiche creato nell’ultima fase viene avviato automaticamente. Tutti i tag a livello di stack vengono applicati alle risorse importate in questo momento. -
Per lo stack padre viene visualizzato il riquadro Eventi della pagina Dettagli stack.
Nota
Non è necessario eseguire il rilevamento della deviazione nello stack principale dopo questa operazione di importazione perché la risorsa
AWS::CloudFormation::Stackè già gestita da CloudFormation.
-
Refactoring di uno stack utilizzando la AWS CLI
-
Nel modello di origine specificare una
RetainDeletionPolicy per la risorsa che si desidera spostare.Nel seguente modello di origine di esempio,
GamesTableè la destinazione di questo refactoring.Esempio 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 } } } } } -
Aggiornare lo stack di origine per applicare la policy di eliminazione alla risorsa.
aws cloudformation update-stack --stack-nameSourceStackName -
Rimuovi la risorsa, i parametri correlati e gli output dal modello di origine, quindi aggiungili al modello di destinazione.
Il modello di origine ora è simile al seguente.
Esempio 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 } } } } }Il seguente modello di destinazione di esempio ha attualmente la risorsa
PlayersTablee ora contiene ancheGamesTable.Esempio 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 } } } } } -
Aggiornare lo stack di origine per eliminare la risorsa
GamesTablee i relativi parametri e output dallo stack.aws cloudformation update-stack --stack-nameSourceStackName -
Componi un elenco di risorse attuali da importare e di relativi identificatori univoci nel seguente formato della stringa JSON. Per ulteriori informazioni, consulta Identificatori di risorse .
[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]In alternativa, puoi specificare i parametri formattati JSON in un file di configurazione.
Ad esempio, per importare
GamesTable, è possibile creare un fileResourcesToImport.txtcontenente la seguente configurazione.[ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ] -
Per creare un set di modifiche, utilizza il seguente comando create-change-set e sostituisci il testo segnaposto. Per l’opzione
--change-set-type, specifica il valore diIMPORT. Per l’opzione--resources-to-import, sostituisci la stringa JSON di esempio con la stringa JSON effettiva che hai appena creato.aws cloudformation create-change-set \ --stack-nameTargetStackName--change-set-nameImportChangeSet\ --change-set-typeIMPORT\ --template-bodyfile://TemplateToImport.json\ --resources-to-import "'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'"Nota
--resources-to-importnon supporta YAML in linea. I requisiti per l’escape delle virgolette nella stringa JSON variano in base al terminale. Per ulteriori informazioni, consulta Using quotation marks inside strings nella Guida per l’utente di AWS Command Line Interface.In alternativa, puoi anche utilizzare l’URL del file come input per l’opzione
--resources-to-import, come mostrato nell’esempio seguente.--resources-to-importfile://ResourcesToImport.txt -
Esaminare il set di modifiche per assicurarsi che la risorsa corretta venga importata nello stack di destinazione.
aws cloudformation describe-change-set \ --change-set-nameImportChangeSet -
Per creare un set di modifiche, utilizza il seguente comando execute-change-set e sostituisci il testo segnaposto. Tutti i tag a livello di stack vengono applicati alle risorse importate in questo momento. Al completamento dell’operazione
(IMPORT_COMPLETE), la risorsa viene importata correttamente.aws cloudformation execute-change-set \ --change-set-nameImportChangeSet--stack-nameTargetStackNameNota
Non è necessario eseguire il rilevamento della deviazione nello stack di destinazione dopo questa operazione di importazione perché la risorsa è già gestita da CloudFormation.