Aninhar uma pilha existente
Use o recurso resource import
para aninhar uma pilha existente em outra pilha existente. As pilhas aninhadas são componentes comuns que você declara e às quais faz referência a partir de outros modelos. Dessa forma, você pode evitar copiar e colar as mesmas configurações nos modelos e simplificar as atualizações de pilha. Se tiver um modelo para um componente comum, você poderá usar o recurso AWS::CloudFormation::Stack
para fazer referência a este modelo a partir de outro modelo. Para saber mais sobre pilhas aninhadas, consulte Incorporar pilhas em outras pilhas usando pilhas aninhadas.
O AWS CloudFormation oferece suporte a apenas um nível de aninhamento usando resource import
. Isso significa que você não pode importar uma pilha em uma pilha filho ou importar uma pilha com filhos.
Se você não tiver familiaridade com a importação, recomendamos que primeiro revise as informações introdutórias no tópico Importe recursos da AWS para uma pilha do CloudFormation com uma importação de recursos.
Validação da importação da pilha aninhada
Durante uma operação de importação de pilha aninhada, o AWS CloudFormation realiza as validações a seguir.
-
A definição aninhada de
AWS::CloudFormation::Stack
no modelo de pilha pai corresponde ao modelo da pilha real aninhada. -
As tags da definição aninhada de
AWS::CloudFormation::Stack
no modelo de pilha pai correspondem às tags do recurso de pilha real aninhada.
Aninhar uma pilha existente usando o AWS Management Console.
-
Adicione o recurso
AWS::CloudFormation::Stack
ao modelo de pilha pai com uma DeletionPolicyRetain
. No modelo de exemplo de pilha principal, apresentado a seguir,MyNestedStack
corresponde ao destino da importação.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
-
Abra o console do AWS CloudFormation.
-
Na página Stacks (Pilhas), com a pilha pai selecionada, escolha Stack actions (Ações da pilha) e Import resources into stack (Importar recursos para a pilha).
-
Leia a página Import overview (Visão geral da importação) para obter uma lista de itens que você deve fornecer durante esta operação. Em seguida, escolha Próximo.
-
Na página Specify template (Especificar modelo), forneça o modelo pai atualizado usando um dos métodos a seguir e escolha Next (Próximo).
-
Escolha Amazon S3 URL (URL do Amazon S3) e especifique o URL do modelo na caixa de texto.
-
Escolha Upload a template file (Fazer upload de um arquivo de modelo) e procure o arquivo de modelo.
-
-
Na página Identify resources (Identificar recursos), identifique o recurso
AWS::CloudFormation::Stack
.-
Em Identifier property (Propriedade do identificador), escolha o tipo de identificador do recurso. Por exemplo, um recurso
AWS::CloudFormation::Stack
pode ser identificado usando a propriedadeStackId
. -
Em Valor do identificador, digite o ARN da pilha que você está importando. Por exemplo,
.arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
-
Escolha Próximo.
-
-
Na página Specify stack details (Especificar detalhes da pilha), modifique os parâmetros e escolha Next (Próximo). Isso cria automaticamente um conjunto de alterações.
Importante
A operação de importação falhará se você modificar os parâmetros existentes que iniciam uma operação de criação, atualização ou exclusão.
-
Na página Analisar
MyParentStack
, confirme se o recurso correto está sendo importado e, em seguida, escolha Importar recursos. Isso executa automaticamente o conjunto de alterações criado na última etapa. As tags no nível da pilha são aplicadas aos recursos importados no momento. -
O painel Events (Eventos) da página Stack details (Detalhes da pilha) de sua pilha pai será exibido.
nota
Não é necessário executar a detecção de desvios na pilha pai após a operação de importação porque o recurso
AWS::CloudFormation::Stack
já foi gerenciado pelo AWS CloudFormation.
Aninhar uma pilha existente usando o AWS CLI.
-
Adicione o recurso
AWS::CloudFormation::Stack
ao modelo de pilha pai com uma DeletionPolicyRetain
. No modelo pai do exemplo a seguir,MyNestedStack
é o destino da importação.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
-
Componha uma string JSON, conforme mostrado no exemplo a seguir, com estas modificações:
-
Substitua
MyNestedStack
pelo ID lógico do recurso de destino, conforme especificado no modelo. -
Substitua
arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
pelo ARN da pilha que você deseja importar.
[{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"
MyNestedStack
","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
"}}]Como alternativa, é possível especificar os parâmetros em um arquivo de configuração.
Por exemplo, para importar
MyNestedStack
, é possível criar um arquivoResourcesToImport.txt
que contenha a configuração apresentada a seguir.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
-
-
Para criar um conjunto de alterações, use o comando create-change-set, apresentado a seguir, e substitua o texto do espaço reservado. Para a opção,
--change-set-type
especifique um valor deIMPORT
. Para a opção--resources-to-import
, substitua a string JSON de exemplo pela string JSON real que você acabou de criar.aws cloudformation create-change-set \ --stack-name
MyParentStack
--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
A opção
--resources-to-import
não oferece suporte para a linguagem YAML incorporada. Os requisitos para usar sequências de escape de aspas em uma string JSON variam de acordo com o terminal utilizado. Para obter mais informações, consulte Using quotation marks inside strings no Guia do usuário da AWS Command Line Interface.Como alternativa, é possível usar um URL de arquivo como entrada para a opção
--resources-to-import
, conforme mostrado no exemplo a seguir.--resources-to-import
file://ResourcesToImport.txt
Se a detecção ocorrer com êxito, esse comando retornará o exemplo de saída apresentado a seguir.
{ "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" }
-
Revise o conjunto de alterações para garantir que a pilha correta está sendo importada.
aws cloudformation describe-change-set --change-set-name
ImportChangeSet
-
Para iniciar o conjunto de alterações e importar a pilha para a pilha principal de origem, use o comando execute-change-set, apresentado a seguir, e substitua o texto do espaço reservado. As tags no nível da pilha são aplicadas aos recursos importados no momento. Após concluir a operação de importação
(IMPORT_COMPLETE)
, a pilha será aninhada com êxito.aws cloudformation execute-change-set --change-set-name
ImportChangeSet
nota
Não é necessário executar a detecção de desvio na pilha pai após essa operação de importação, pois o recurso
AWS::CloudFormation::Stack
já é gerenciado pelo AWS CloudFormation.