Spostamento di risorse tra stack - AWS CloudFormation

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

  1. 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 } } } } }
  2. Apri la AWS CloudFormation console per eseguire un aggiornamento dello stack per applicare la politica di eliminazione.

    1. Nella pagina Stacks (Stack) con lo stack selezionato, scegliere Update (Aggiorna).

    2. In Prepare template (Prepara modello), scegliere Replace current template (Sostituisci modello corrente).

    3. In Specify template (Specifica modello), fornire il modello di origine aggiornato con l'attributo DeletionPolicy su GamesTable, 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.

    4. Nella pagina Specify stack details (Specifica dettagli stack), non sono necessarie modifiche. Scegli Next (Successivo).

    5. Nella pagina Configure stack options (Configura opzioni stack) non sono necessarie modifiche. Scegli Next (Successivo).

    6. Sulla recensione SourceStackNamepagina, rivedi le modifiche. Se il modello contiene IAM risorse, seleziona Riconosco che questo modello può creare IAM risorse per specificare che desideri utilizzare IAM le risorse del modello. Per ulteriori informazioni sull'utilizzo IAM delle risorse nei modelli, consultaControllo dell'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.

  3. 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 anche GamesTable.

    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 } } } } }
  4. Ripeti i passaggi 2-3 per aggiornare nuovamente lo stack di origine, questa volta per eliminare la risorsa di destinazione dallo stack.

  5. Eseguire un'operazione di importazione per aggiungere GamesTable allo stack di destinazione.

    1. Nella pagina Stacks (Stack) con lo stack padre selezionato, scegliere Stack actions (Operazioni stack), quindi scegliere Import resources into stack (Importa risorse nello stack).

      L' opzione Importa risorse nello stack nella console.
    2. Leggere la pagina Import overview (Panoramica importazione) per un elenco di elementi da fornire durante questa operazione. Quindi, seleziona Next (Successivo).

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

    4. Nella pagina Identify resources (Identifica risorse), identificare la risorsa che si sta spostando (in questo esempio GamesTable). Per ulteriori informazioni, consulta Identificatori di risorse.

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

      2. In Identifier value (Valore identificatore), digitare il valore effettivo della proprietà. Ad esempio GamesTables.

      3. Scegli Next (Successivo).

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

    6. Sulla recensione TargetStackNamenella pagina, 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.

    7. Per lo stack padre viene visualizzato il riquadro Events (Eventi) della pagina Stack details (Dettagli stack).

      La scheda Eventi nella console.
      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 AWS CloudFormation.

Effettua il refactoring di uno stack utilizzando il AWS CLI

  1. 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 } } } } }
  2. Aggiornare lo stack di origine per applicare la policy di eliminazione alla risorsa.

    aws cloudformation update-stack --stack-name SourceStackName
  3. 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 anche GamesTable.

    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 } } } } }
  4. 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
  5. 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 importareGamesTable, è possibile creare un ResourcesToImport.txt file che contiene la seguente configurazione.

    [ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
  6. Per creare un set di modifiche, utilizzate il seguente create-change-set comando e sostituite il testo segnaposto. Per l'opzione --change-set-type, specifica il valore di IMPORT. Per l'--resources-to-importopzione, sostituite la JSON stringa di esempio con la JSON stringa effettiva appena creata.

    aws cloudformation create-change-set \ --stack-name TargetStackName --change-set-name ImportChangeSet \ --change-set-type IMPORT \ --template-body file://TemplateToImport.json \ --resources-to-import "'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'"
    Nota

    --resources-to-importnon 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-importopzione, come illustrato nell'esempio seguente.

    --resources-to-import file://ResourcesToImport.txt
  7. 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
  8. 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-name TargetStackName
    Nota

    Non è necessario eseguire il rilevamento della deviazione nello stack di destinazione dopo questa operazione di importazione perché la risorsa è già gestita da AWS CloudFormation.