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::Stacknidificata nel modello di stack padre corrisponde al modello dello stack nidificato effettivo. -
I tag per la definizione
AWS::CloudFormation::Stacknidificata 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
-
Aggiungere la risorsa
AWS::CloudFormation::Stackal modello stack padre con unRetainDeletionPolicy. 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.templateParameters: InstanceType: t1.micro KeyName: mykey -
Apri la CloudFormation console.
-
Nella pagina Stack con lo stack padre selezionato, scegliere Operazioni stack, quindi scegliere Importa risorse nello stack.
-
Leggere la pagina Panoramica importazione per un elenco di elementi da fornire durante questa operazione. Quindi, seleziona Successivo.
-
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.
-
-
Nella pagina Identifica risorse, identifica la risorsa
AWS::CloudFormation::Stack.-
In Proprietà identificatore, scegliere il tipo di identificatore di risorsa. Ad esempio, una risorsa
AWS::CloudFormation::Stackpuò essere identificata utilizzando la proprietàStackId. -
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
-
Scegli Successivo.
-
-
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.
-
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. -
Per lo stack padre viene visualizzato il riquadro Eventi della pagina Dettagli stack.
Nota
Non è necessario eseguire il rilevamento della deviazione nello stack padre dopo questa operazione di importazione perché la risorsa
AWS::CloudFormation::Stackera già gestita da CloudFormation.
Nidificazione di uno stack esistente utilizzando la AWS CLI
-
Aggiungere la risorsa
AWS::CloudFormation::Stackal modello stack padre con unRetainDeletionPolicy. 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: 1MyNestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >-https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.templateParameters: InstanceType: t1.micro KeyName: mykey -
Componi una stringa JSON come mostrato nell’esempio seguente, con queste modifiche:
-
Sostituisci
MyNestedStackcon 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-0a9cd3354c10con 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 fileResourcesToImport.txtcontenente 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:MyNestedStackResourceIdentifier: StackId: >-arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10 -
-
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 diIMPORT. 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-nameMyParentStack--change-set-nameImportChangeSet\ --change-set-typeIMPORT\ --template-bodyfile://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 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-importfile://ResourcesToImport.txtSe 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" } -
Esaminare il set di modifiche per assicurarsi che venga importato lo stack corretto.
aws cloudformation describe-change-set --change-set-nameImportChangeSet -
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-nameImportChangeSetNota
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.