Anidamiento de una pila existente
Utilice la función resource import
para anidar una pila existente dentro de otra pila existente. Las pilas anidadas son componentes comunes a los que se declara y hace referencia desde otras plantillas. De esta forma, puede evitar copiar y pegar las mismas configuraciones en sus plantillas y simplificar las actualizaciones de pilas. Si tiene una plantilla para un componente común, puede utilizar el recurso AWS::CloudFormation::Stack
para hacer referencia a esta plantilla desde otra plantilla. Para obtener más información sobre las pilas anidadas, consulte Integre pilas dentro de otras pilas mediante pilas anidadas.
AWS CloudFormation solo admite un nivel de uso de anidamiento utilizando resource import
. Esto significa que no puede importar una pila a una pila secundaria ni importar una pila que tenga secundarias.
Si es nuevo en la importación, le recomendamos que primero revise la información introductoria del tema Importar recursos de AWS a una pila de CloudFormation con una importación de recursos.
Validación de importación de pila anidada
Durante una operación de importación de pila anidada, AWS CloudFormation realiza las siguientes validaciones.
-
La definición anidada
AWS::CloudFormation::Stack
en la plantilla de pila principal coincide con la plantilla de la pila anidada real. -
Las etiquetas de la definición anidada
AWS::CloudFormation::Stack
en la plantilla de pila principal coinciden con las etiquetas del recurso de pila anidado real.
Anidar una pila existente mediante la AWS Management Console
-
Agregue el recurso
AWS::CloudFormation::Stack
a la plantilla de pila principal con unaRetain
DeletionPolicy. En el siguiente plantilla de pila principal de ejemplo,MyNestedStack
es el destino de la importación.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 la consola de AWS CloudFormation.
-
En la página Stacks (Pilas), con la pila principal seleccionada, elija Stack actions (Acciones de pila) y, a continuación, elija Import resources into stack (Importar recursos a pila).
-
Lea la página de información general sobre la importación para obtener una lista de los elementos que debe proporcionar durante esta operación. A continuación, elija Siguiente.
-
En la página Specify template (Especificar plantilla), proporcione la plantilla principal actualizada mediante uno de los métodos siguientes y, a continuación, elija Next (Siguiente).
-
Seleccione URL de Amazon S3, y, a continuación, especifique la URL de la plantilla en el cuadro de texto.
-
Seleccione Cargar un archivo de plantilla y, a continuación, busque la plantilla.
-
-
En la página Identify resources (Identificar recursos), identifique el recurso
AWS::CloudFormation::Stack
.-
En Propiedad del identificador, elija el tipo de identificador de recurso. Por ejemplo, un recurso
AWS::CloudFormation::Stack
se puede identificar mediante la propiedadStackId
. -
En Valor del identificador, escriba el ARN de la pila que va a importar. Por ejemplo,
.arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
-
Elija Siguiente.
-
-
En la página Especificar detalles de pila modifique los parámetros y, a continuación, elija Siguiente. Esto crea automáticamente un conjunto de cambios.
importante
La operación de importación produce un error si modifica parámetros que inician una operación de creación, actualización o eliminación.
-
En la página Revisar
MyParentStack
, confirme que se está importando el recurso correcto y, a continuación, elija Importar recursos. Esto ejecuta automáticamente el conjunto de cambios creado en el último paso. En este momento, se aplican todas las etiquetas de nivel de pila a los recursos importados. -
Se muestra el panel Events (Eventos) de la página Stack details (Detalles de la pila) de la pila principal.
nota
No es necesario ejecutar la detección de desviación en la pila principal después de esta operación de importación porque el recurso
AWS::CloudFormation::Stack
ya estaba administrado por AWS CloudFormation.
Anidar una pila existente mediante la AWS CLI
-
Agregue el recurso
AWS::CloudFormation::Stack
a la plantilla de pila principal con unaRetain
DeletionPolicy. En el siguiente ejemplo, la plantilla principalMyNestedStack
es el destino de la importación.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
-
Componga una cadena JSON tal como se muestra en el siguiente ejemplo, con estas modificaciones:
-
Sustituya
MyNestedStack
por el ID lógico del recurso de destino tal como se especifica en la plantilla. -
Sustituya
arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
por el ARN de la pila que desee importar.
[{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"
MyNestedStack
","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
"}}]Si lo desea, también puede especificar los parámetros en un archivo de configuración.
Por ejemplo, para importar
MyNestedStack
, puede crear un archivoResourcesToImport.txt
que contenga la siguiente configuración.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 crear un conjunto de cambios, utilice el siguiente comando create-change-set y sustituya el texto del marcador de posición. Para la opción
--change-set-type
, especifique un valor deIMPORT
. Para la opción--resources-to-import
, reemplace la cadena JSON de muestra por la cadena JSON real que acaba de crear.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
--resources-to-import
no es compatible con YAML insertado. Los requisitos para escapar las comillas en la cadena JSON varían dependiendo de su terminal. Para obtener más información, consulte Using quotation marks inside strings en la Guía del usuario de la AWS Command Line Interface.Como alternativa, también puede usar la URL de un archivo como entrada para la opción
--resources-to-import
, tal como se muestra en el siguiente ejemplo.--resources-to-import
file://ResourcesToImport.txt
Si se ejecuta correctamente, este comando devuelve la siguiente salida de muestra.
{ "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 el conjunto de cambios para asegurarse de que se está importando la pila correcta.
aws cloudformation describe-change-set --change-set-name
ImportChangeSet
-
Para iniciar el conjunto de cambios e importar la pila a la pila principal de origen, utilice el siguiente comando execute-change-set y sustituya el texto del marcador de posición. En este momento, se aplican todas las etiquetas de nivel de pila a los recursos importados. Una vez completada correctamente la operación de importación
(IMPORT_COMPLETE)
, la pila se anidará correctamente.aws cloudformation execute-change-set --change-set-name
ImportChangeSet
nota
No es necesario ejecutar la detección de desviación en la pila principal después de esta operación de importación porque el recurso
AWS::CloudFormation::Stack
ya está administrado por AWS CloudFormation.