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 rivedere prima le informazioni introduttive nell'argomento. Importazione di AWS risorse in una CloudFormation pila
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.
Effettua il refactoring di uno stack utilizzando il AWS Management Console
-
Nel modello di origine, specificate a
RetainDeletionPolicyper la risorsa che desiderate 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 CloudFormation console per eseguire un aggiornamento dello stack per applicare la politica di eliminazione.
-
Nella pagina Stacks (Stack) con lo stack selezionato, scegliere Update (Aggiorna).
-
In Prepare template (Prepara modello), scegliere Replace current template (Sostituisci modello corrente).
-
In Specify template (Specifica modello), fornire il modello di origine aggiornato con l'attributo
DeletionPolicysuGamesTable, quindi scegliere Next (Successivo).-
Scegliere Amazon URL S3 (URL Amazon S3), quindi specificare l'URL per il modello di origine aggiornato nella casella di testo.
-
Scegliere Upload a template file (Carica un file modello), quindi cercare il file modello di origine aggiornato.
-
-
Nella pagina Specify stack details (Specifica dettagli stack), non sono necessarie modifiche. Scegli Next (Successivo).
-
Nella pagina Configure stack options (Configura opzioni stack) non sono necessarie modifiche. Scegli Next (Successivo).
-
Nella
SourceStackNamepagina Revisione, rivedi le modifiche. Se il modello contiene risorse IAM, selezionareI acknowledge that this template may create IAM resources (Acconsento 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 Stacks (Stack) con lo stack padre selezionato, scegliere Stack actions (Operazioni stack), quindi scegliere Import resources into stack (Importa risorse nello stack).
-
Leggere la pagina Import overview (Panoramica importazione) per un elenco di elementi da fornire durante questa operazione. Quindi, seleziona Next (Successivo).
-
Nella pagina Specify template (Specifica modello) completa una delle seguenti operazioni, quindi scegli Next (Avanti).
-
Scegliere Amazon S3 URL (URL Amazon S3), quindi specificare un URL nella casella di testo.
-
Scegliere Upload a template file (Carica un file modello), quindi cercare un file da caricare.
-
-
Nella pagina Identify resources (Identifica risorse), identificare la risorsa che si sta spostando (in questo esempio
GamesTable). Per ulteriori informazioni, consulta Identificatori di risorse.-
In Identifier property (Proprietà identificatore), scegliere il tipo di identificatore di risorsa. Ad esempio, una risorsa
AWS::DynamoDB::Tablepuò essere identificata utilizzando la proprietàTableName. -
In Identifier value (Valore identificatore), digitare il valore effettivo della proprietà. Ad esempio,
.GamesTables -
Scegli Next (Successivo).
-
-
Nella pagina Specify stack details (Specifica dettagli stack), modificare i parametri, quindi scegliere Next (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
TargetStackNamepagina Revisione, conferma che sia stata 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 Events (Eventi) della pagina Stack details (Dettagli stack).
Nota
Non è necessario eseguire il rilevamento della deviazione nello stack padre dopo questa operazione di importazione perché la risorsa
AWS::CloudFormation::Stackè già gestita da CloudFormation.
-
Effettua il refactoring di uno stack utilizzando il AWS CLI
-
Nel modello di origine, specificate a
RetainDeletionPolicyper la risorsa che desiderate 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 effettive da importare e i relativi identificatori univoci nel seguente formato di 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 unResourcesToImport.txtfile che contenga la seguente configurazione.[ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ] -
Per creare un set di modifiche, utilizzate il create-change-set comando seguente e sostituite il testo segnaposto. Per l'opzione
--change-set-type, specifica il valore diIMPORT. Per l'--resources-to-importopzione, sostituite la stringa JSON di esempio con la stringa JSON effettiva che avete 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 tra virgolette nella stringa JSON variano a seconda del terminale. Per ulteriori informazioni, consulta Uso delle virgolette all'interno delle stringhe nella Guida per l'utente.AWS Command Line InterfaceIn alternativa, è possibile utilizzare l'URL di un file come input per l'
--resources-to-importopzione, come illustrato 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 avviare il set di modifiche e importare la risorsa, utilizzate il execute-change-set comando seguente e sostituite 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.