Importación de recursos existentes en una pila
En este tema se muestra cómo importar los recursos de AWS existentes a una pila existente al describirlos en una plantilla. Para buscar en su lugar los recursos existentes y generar automáticamente una plantilla que se pueda utilizar para importar los recursos existentes a CloudFormation o replicar los recursos en una cuenta nueva, consulte Generar plantillas de los recursos existentes con el generador IaC.
Requisitos previos
Antes de comenzar, debe disponer de lo siguiente:
-
Una plantilla que describa toda la pila, incluidos los recursos que ya forman parte de la pila y los recursos que se van a importar. Guarde la plantilla de manera local o en un bucket de Amazon S3.
Obtención de una copia de la plantilla de una pila en ejecución
-
Abra la consola de CloudFormation en https://console.aws.amazon.com/cloudformation/
. -
En la lista de pilas, seleccione la pila de la que desea recuperar la plantilla.
-
En el panel de detalles de la pila, seleccione la pestaña Plantilla y, a continuación, seleccione Copiar en el portapapeles.
-
Pegue el código en un editor de texto para empezar a agregar otros recursos a la plantilla.
-
-
Para cada recurso que se desee importar, incluya lo siguiente:
-
Las propiedades y los valores de las propiedades que definen la configuración actual del recurso.
-
El identificador único por cada recurso; por ejemplo, por cada nombre. Para obtener más información, consulte Identificadores de recursos.
-
Temas
Plantilla de ejemplo
En este tutorial, se supone que utiliza la siguiente plantilla de ejemplo, llamada TemplateToImport.json
, la cual especifica dos tablas de DynamoDB. ServiceTable
actualmente forma parte de la pila y GamesTable
es la tabla que desea importar.
nota
Esta plantilla es solo un ejemplo. Para utilizarla en las pruebas propias, sustituya los recursos de ejemplo con los recursos de su cuenta.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Import test",
"Resources": {
"ServiceTable": {
"Type": "AWS::DynamoDB::Table",
"Properties": {
"TableName": "Service",
"AttributeDefinitions": [
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 1
}
}
},
"GamesTable": {
"Type": "AWS::DynamoDB::Table",
"DeletionPolicy": "Retain",
"Properties": {
"TableName": "Games",
"AttributeDefinitions": [
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 1
}
}
}
}
}
Importar un recurso existente a una pila mediante la AWS Management Console
nota
La consola de AWS CloudFormation no admite el uso de la función intrínseca Fn::Transform al importar recursos. Puede usar AWS Command Line Interface para importar recursos que usen la función intrínseca Fn::Transform.
Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation
. -
En la página Pilas, elija la pila a la que desea importar recursos.
-
Elija Acciones de pila, y, a continuación, elija Importar recursos en la pila.
-
Revise la página Información general de importación y, a continuación, elija Siguiente.
-
En la página Especificar plantilla proporcione la plantilla actualizada utilizando uno de los métodos siguientes y, a continuación, elija 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 Identificar recursos, identifique cada recurso de destino. Para obtener más información, consulte Identificadores de recursos.
-
En Propiedad del identificador, elija el tipo de identificador de recurso. Por ejemplo, el recurso
AWS::DynamoDB::Table
se puede identificar mediante la propiedadTableName
. -
En Valor del identificador, escriba el valor de la propiedad real. Por ejemplo, el
TableName
para el recursoGamesTable
en el ejemplo de plantilla es
.Games
-
Elija Siguiente.
-
-
En la página Especificar detalles de pila actualice los parámetros y, a continuación, elija Siguiente. Esto crea automáticamente un conjunto de cambios.
nota
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
nombre de pila
revise los recursos que desea importar 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. Para obtener más información, consulte Configurar las opciones la pila.Aparece la página Eventos de la pila.
-
(Opcional) Ejecute la detección de desviaciones en la pila para asegurarse de que la plantilla y la configuración real de los recursos importados coinciden. Para obtener más información sobre la detección de desviaciones, consulte Detección de desviaciones en una pila de CloudFormation completa.
-
(Opcional) Si los recursos importados no coinciden con las configuraciones de plantilla esperadas, corrija las configuraciones de plantilla o actualice los recursos directamente. Para obtener más información acerca de la importación de recursos desviados, consulte Resolver desviaciones con una operación de importación.
Importar un recurso existente a una pila mediante la AWS CLI
-
Para saber qué propiedades identifican cada tipo de recurso en la plantilla, ejecute el comando get-template-summary y especifique la URL de S3 de la plantilla. Por ejemplo, el recurso
AWS::DynamoDB::Table
se puede identificar mediante la propiedadTableName
. Para el recursoGamesTable
del ejemplo de plantilla, el valor deTableName
esGames
. Necesitará esta información en el siguiente paso.aws cloudformation get-template-summary \ --template-url
https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
Para obtener más información, consulte Identificadores de recursos.
-
Redacte una lista de recursos reales para importar y sus identificadores únicos en el siguiente formato de cadena JSON.
[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
Si lo desea, también puede especificar los parámetros con formato JSON en un archivo de configuración.
Por ejemplo, para importar
GamesTable
, puede crear un archivoResourcesToImport.txt
que contenga la siguiente configuración.[ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
-
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
TargetStack
--change-set-nameImportChangeSet
\ --change-set-typeIMPORT
\ --template-urlhttps://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
\ --resources-to-import'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'
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
-
Revise el conjunto de cambios para asegurarse de que se importarán los recursos correctos.
aws cloudformation describe-change-set \ --change-set-name
ImportChangeSet
--stack-nameTargetStack
-
Para iniciar el conjunto de cambios e importar los recursos, 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. Para obtener más información, consulte Configurar las opciones la pila. Una vez finalizada correctamente la operación
(IMPORT_COMPLETE)
, los recursos se importan correctamente.aws cloudformation execute-change-set \ --change-set-name
ImportChangeSet
--stack-nameTargetStack
-
(Opcional) Ejecute la detección de desviaciones en la pila
IMPORT_COMPLETE
para asegurarse de que la plantilla y la configuración real de los recursos importados coinciden. Para obtener más información sobre la detección de desviaciones, consulte Detección de desviaciones en una pila de CloudFormation completa.-
Ejecute la detección de desviaciones en la pila especificada.
aws cloudformation detect-stack-drift --stack-name
TargetStack
Si se ejecuta correctamente, este comando devuelve la siguiente salida de muestra.
{ "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }
-
Vea el progreso de una operación de detección de desviaciones para el ID de detección de desviaciones de pila especificado.
aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id
624af370-311a-11e8-b6b7-500cexample
-
Vea la información de desviaciones de los recursos en los que se han comprobado las desviaciones de la pila especificada.
aws cloudformation describe-stack-resource-drifts --stack-name
TargetStack
-
-
(Opcional) Si los recursos importados no coinciden con las configuraciones de plantilla esperadas, corrija las configuraciones de plantilla o actualice los recursos directamente. Para obtener más información acerca de la importación de recursos desviados, consulte Resolver desviaciones con una operación de importación.