Nidificazione di uno stack esistente - 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à.

Nidificazione di uno stack esistente

Utilizzare la funzionalità resource import per nidificare uno stack esistente all’interno di un altro stack esistente. Gli stack nidificati sono componenti comuni che l’utente dichiara e vi fa riferimento all’interno di altri modelli. In questo modo, è possibile evitare di copiare e incollare le stesse configurazioni nei modelli e semplificare gli aggiornamenti dello stack. Se si dispone di un modello per un componente comune, è possibile utilizzare la risorsa AWS::CloudFormation::Stack per fare riferimento a questo modello da un altro modello. Per ulteriori informazioni sugli stack nidificati, consulta Dividi un modello in pezzi riutilizzabili usando stack nidificati.

CloudFormation supporta solo un livello di nidificazione utilizzando resource import. Ciò significa che non è possibile importare uno stack in uno stack figlio o importare uno stack con figli.

Se non hai mai effettuato l’importazione, ti consigliamo di esaminare prima le informazioni introduttive nella sezione Importazione manuale delle risorse AWS in uno stack CloudFormation.

Convalida dell’importazione dello stack nidificato

Durante un’operazione di importazione dello stack nidificato, CloudFormation esegue le convalide seguenti.

  • La definizione AWS::CloudFormation::Stack nidificata nel modello di stack padre corrisponde al modello dello stack nidificato effettivo.

  • I tag per la definizione AWS::CloudFormation::Stack nidificata nel modello di stack padre corrispondono ai tag per la risorsa stack nidificata effettiva.

Nidificazione di uno stack esistente utilizzando la Console di gestione AWS

  1. Aggiungere la risorsa AWS::CloudFormation::Stack al modello stack padre con un Retain DeletionPolicy. Nel seguente modello di stack padre di esempio, MyNestedStack è la destinazione dell’importazione.

    JSON

    { "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "MyNestedStack" : { "Type" : "AWS::CloudFormation::Stack", "DeletionPolicy": "Retain", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template", "Parameters" : { "InstanceType" : "t1.micro", "KeyName" : "mykey" } } } } }

    YAML

    AWSTemplateFormatVersion: 2010-09-09 Resources: ServiceTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Service AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1 MyNestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >- https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template Parameters: InstanceType: t1.micro KeyName: mykey
  2. Apri la CloudFormation console.

  3. Nella pagina Stack con lo stack padre selezionato, scegliere Operazioni stack, quindi scegliere Importa risorse nello stack.

    L’opzione Importa risorse nello stack nella console.
  4. Leggere la pagina Panoramica importazione per un elenco di elementi da fornire durante questa operazione. Quindi, seleziona Successivo.

  5. Nella pagina Specifica modello, fornire il modello padre aggiornato utilizzando uno dei metodi descritti di seguito, quindi scegliere Successivo.

    • Scegliere URL Amazon S3, quindi specificare l’URL per il tuo modello nella casella di testo.

    • Scegliere Carica un file modello, quindi cercare il modello.

  6. Nella pagina Identifica risorse, identifica la risorsa AWS::CloudFormation::Stack.

    1. In Proprietà identificatore, scegliere il tipo di identificatore di risorsa. Ad esempio, una risorsa AWS::CloudFormation::Stack può essere identificata utilizzando la proprietà StackId.

    2. In Valore identificatore, digita l’ARN dello stack che stai importando. Ad esempio, arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10.

      La pagina relativa all’identificazione delle risorse nella console.
    3. Scegli Successivo.

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

  8. Nella pagina Rivedi MyParentStack, verifica che venga importata la risorsa corretta, quindi scegli Importa risorse. In questo modo si esegue automaticamente il set di modifiche creato nell’ultimo passaggio. Tutti i tag a livello di stack vengono applicati alle risorse importate in questo momento.

  9. Per lo stack padre viene visualizzato il riquadro Eventi della pagina 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 era già gestita da CloudFormation.

Nidificazione di uno stack esistente utilizzando la AWS CLI

  1. Aggiungere la risorsa AWS::CloudFormation::Stack al modello stack padre con un Retain DeletionPolicy. Nel seguente modello padre di esempio, MyNestedStack è la destinazione dell’importazione.

    JSON

    { "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "MyNestedStack" : { "Type" : "AWS::CloudFormation::Stack", "DeletionPolicy": "Retain", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template", "Parameters" : { "InstanceType" : "t1.micro", "KeyName" : "mykey" } } } } }

    YAML

    AWSTemplateFormatVersion: 2010-09-09 Resources: ServiceTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Service AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1 MyNestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >- https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template Parameters: InstanceType: t1.micro KeyName: mykey
  2. Componi una stringa JSON come mostrato nell’esempio seguente, con queste modifiche:

    • Sostituisci MyNestedStack con l’ID logico della risorsa di destinazione, come specificato nel modello.

    • Sostituisci arn:aws:cloudformation:us-west- 2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10 con l’ARN dello stack che desideri importare.

    [{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]

    In alternativa, puoi specificare i parametri in un file di configurazione.

    Ad esempio, per importare MyNestedStack, è possibile creare un file ResourcesToImport.txt contenente la seguente configurazione.

    JSON

    [ { "ResourceType":"AWS::CloudFormation::Stack", "LogicalResourceId":"MyNestedStack", "ResourceIdentifier": { "StackId":"arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10" } } ]

    YAML

    ResourceType: 'AWS::CloudFormation::Stack' LogicalResourceId: MyNestedStack ResourceIdentifier: StackId: >- arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
  3. 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 di IMPORT. 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-name MyParentStack --change-set-name ImportChangeSet \ --change-set-type IMPORT \ --template-body file://TemplateToImport.json \ --resources-to-import '[{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]'
    Nota

    --resources-to-import non 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-import file://ResourcesToImport.txt

    Se eseguito correttamente, il comando restituirà il seguente output di esempio.

    { "Id": "arn:aws:cloudformation:us-west-2:12345678910:changeSet/ImportChangeSet/8ad75b3f-665f-46f6-a200-0b4727a9442e", "StackId": "arn:aws:cloudformation:us-west-2:12345678910:stack/MyParentStack/4e345b70-1281-11ef-b027-027366d8e82b" }
  4. Esaminare il set di modifiche per assicurarsi che venga importato lo stack corretto.

    aws cloudformation describe-change-set --change-set-name ImportChangeSet
  5. Per avviare il set di modifiche e importare lo stack nello stack padre di origine, 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 di importazione (IMPORT_COMPLETE), lo stack viene nidificato correttamente.

    aws cloudformation execute-change-set --change-set-name ImportChangeSet
    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.