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 funzione 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 Incorpora pile all'interno di altre pile utilizzando pile annidate.

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

Se non conosci l'importazione, ti consigliamo di leggere prima le informazioni introduttive contenute nell'argomento. Importa AWS risorse in una CloudFormation pila con un'importazione di risorse

Convalida dell'importazione dello stack nidificato

Durante un'operazione di importazione di stack annidati, AWS CloudFormation esegue le seguenti convalide.

  • 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 AWS Management Console

  1. Aggiungi la AWS::CloudFormation::Stack risorsa al modello dello stack principale con un. Retain DeletionPolicy Nell'esempio seguente, il modello dello stack principale, 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 AWS CloudFormation console.

  3. 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.
  4. Leggere la pagina Import overview (Panoramica importazione) per un elenco di elementi da fornire durante questa operazione. Quindi, seleziona Next (Successivo).

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

    • Scegli Amazon S3 URL, quindi specifica URL il modello nella casella di testo.

    • Scegliere Upload a template file (Carica un file modello), quindi cercare il modello.

  6. Nella pagina Identify resources (Identifica risorse), identifica la risorsa AWS::CloudFormation::Stack.

    1. In Identifier property (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 identificativo, digita lo ARN 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 Next (Successivo).

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

  8. Sulla recensione MyParentStacknella pagina, conferma che viene 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 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 era già gestita da AWS CloudFormation.

Nidificazione di uno stack esistente utilizzando la AWS CLI

  1. Aggiungi la AWS::CloudFormation::Stack risorsa al modello dello stack principale 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 JSON stringa come mostrato nell'esempio seguente, con queste modifiche:

    • Replace (Sostituisci) MyNestedStack con l'ID logico della risorsa di destinazione come specificato nel modello.

    • Replace (Sostituisci) arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10 con lo ARN stack che vuoi 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, è possibile specificare i parametri in un file di configurazione.

    Ad esempio, per importareMyNestedStack, è possibile creare un ResourcesToImport.txt file che contiene 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, 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 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-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

    In caso di successo, questo comando restituisce 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 principale di origine, 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 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 AWS CloudFormation.