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. Importa AWS risorse in una CloudFormation pila con un'importazione di risorse
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
Retain
DeletionPolicyper 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
DeletionPolicy
suGamesTable
, quindi scegliere Next (Successivo).-
Scegli Amazon S3 URL, quindi specifica il URL modello sorgente 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
SourceStackName
pagina di 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
PlayersTable
e 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
GamesTable
allo 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).
-
Scegli Amazon S3 URL, quindi specifica 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::Table
può 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
TargetStackName
pagina di 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
Retain
DeletionPolicyper 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-name
SourceStackName
-
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
PlayersTable
e 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
GamesTable
e i relativi parametri e output dallo stack.aws cloudformation update-stack --stack-name
SourceStackName
-
Componi un elenco di risorse effettive da importare e i relativi identificatori univoci nel seguente JSON formato di stringa. Per ulteriori informazioni, consulta Identificatori di risorse.
[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
In alternativa, potete specificare i parametri JSON -formatted in un file di configurazione.
Ad esempio, per importare
GamesTable
, potreste creare unResourcesToImport.txt
file 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-import
opzione, sostituite la JSON stringa di esempio con la JSON stringa effettiva appena creata.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"}}]'
"Nota
--resources-to-import
non supporta inlineYAML. I requisiti per l'escape tra virgolette nella JSON stringa variano a seconda del terminale. Per ulteriori informazioni, consultate Uso delle virgolette all'interno delle stringhe nella Guida per l'AWS Command Line Interface utente.In alternativa, è possibile utilizzare un file URL come input per l'
--resources-to-import
opzione, come illustrato nell'esempio seguente.--resources-to-import
file://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-name
ImportChangeSet
-
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-name
ImportChangeSet
--stack-nameTargetStackName
Nota
Non è necessario eseguire il rilevamento della deviazione nello stack di destinazione dopo questa operazione di importazione perché la risorsa è già gestita da CloudFormation.