Obtención de salidas exportadas de una pila implementada de CloudFormation
Si tiene varias pilas en la misma Cuenta de AWS y región, es posible que desee compartir información entre ellas. Esto resulta útil cuando una pila necesita usar recursos creados por otra pila.
Por ejemplo, puede tener una pila que cree recursos de red, como subredes y grupos de seguridad, para sus servidores web. Luego, otras pilas que crean los servidores web reales pueden utilizar los recursos de red creados por la primera pila. No es necesario codificar de forma rígida los IDs de recursos en la plantilla de la pila ni pasar los IDs como parámetros de entrada.
Para compartir información entre pilas, exporta los valores de salida de una pila y los importa a otra pila. Así es como funciona:
-
En la plantilla de la primera pila (p. ej., la pila de redes), se definen determinados valores para la exportación mediante el campo
Exportde la secciónOutputs. Para obtener más información, consulte Sintaxis de Outputs de la plantilla de CloudFormation. -
Al crear o actualizar esa pila, CloudFormation exporta los valores de salida y los pone a disposición de otras pilas de la misma Cuenta de AWS y región.
-
En la plantilla de la otra pila, se utiliza la función Fn::ImportValue para importar los valores exportados de la primera pila.
-
Al crear o actualizar la segunda pila (p. ej., la pila del servidor web), CloudFormation recupera automáticamente los valores exportados de la primera pila y los utiliza.
Para obtener un tutorial y plantillas de ejemplo, consulte Consulta de las salidas de recursos en otra pila de CloudFormation.
Exportación de valores de salida de pilas en comparación con el uso de pilas anidadas
Una pila anidada es un pila que crea en otra pila con el recurso AWS::CloudFormation::Stack. Con pilas anidadas, se implementan y administran todos los recursos desde una sola pila. Se pueden usar salidas desde una pila en el grupo de pilas anidadas como entradas a otra pila del grupo. Esto difiere de la exportación de valores.
Si desea que solo se intercambie información dentro de un grupo de pilas anidadas, le sugerimos que utilice pilas anidadas. Para compartir información con otras pilas (no solo dentro del grupo de pilas anidadas), exporte valores. Por ejemplo, puede crear una sola pila con una subred y, a continuación, exportar su ID. Otras pilas pueden utilizar dicha subred importando su ID. Cada pila no tiene por qué crear su propia subred. Mientras las pilas importen el ID de la subred, no se puede cambiar ni eliminar.
Para obtener más información sobre las pilas anidadas, consulte División de una plantilla en piezas reutilizables utilizando pilas anidadas.
Consideraciones
Las siguientes restricciones se aplican a las referencias cruzadas entre pilas:
-
Para cada Cuenta de AWS, los nombres
Exportdeben ser únicos dentro de una región. -
Cuando se usan
ExportyFn::ImportValue, las referencias entre pilas se limitan a la misma cuenta y región. Para hacer referencia a las salidas de las pilas de todas las cuentas o regiones, utiliceFn::GetStackOutput. -
Para las salidas, el valor de la propiedad
Namede unExportno puede usar las funcionesRefoGetAttque dependen de un recurso.Del mismo modo, la función
ImportValueno puede incluir funcionesRefoGetAttque dependen de un recurso. -
Después de que otra pila importe un valor de salida, no se puede eliminar la pila que exporta el valor de salida ni modificar el valor de salida exportado. Todas las importaciones deben eliminarse antes de poder eliminar la pila de exportación o modificar el valor de salida.
Listado de valores de salida exportados
Si necesita ver los valores de las salidas exportadas de sus pilas, utilice uno de los siguientes métodos:
Para obtener una lista de valores de salida exportados (consola)
-
Abra la consola de CloudFormation en https://console.aws.amazon.com/cloudformation
. -
En la barra de navegación de la parte superior de la pantalla, elija la Región de AWS.
-
En el panel de navegación izquierdo, seleccione Exportaciones.
Para obtener una lista de los valores de salida exportados (AWS CLI)
Use el siguiente comando list-exports. Sustituya us-east-1 por su Región de AWS.
aws cloudformation list-exports --regionus-east-1
A continuación, se muestra un ejemplo del resultado.
{
"Exports": [
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-subnet-a",
"Value": "subnet-07b410xmplddcfa03"
},
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-subnet-b",
"Value": "subnet-075ed3xmplebd2fb1"
},
{
"ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
"Name": "private-vpc-vpcid",
"Value": "vpc-011d7xmpl100e9841"
}
]
}
CloudFormation muestra los nombres y los valores de las salidas exportadas para la región actual y la pila desde la que se esperaban. Para usar un valor de salida exportado en otra plantilla de pila, puede referenciarla con el nombre de exportación y la función Fn::ImportValue.
Enumeración de pilas que importan un valor de salida exportado
Para eliminar o cambiar los valores de salida exportados, primero debe averiguar qué pilas los importan.
Para ver las pilas que importan un valor de salida exportado, utilice uno de los siguientes métodos:
Enumeración de pilas que importan un valor de salida exportado (consola)
-
Abra la consola de CloudFormation en https://console.aws.amazon.com/cloudformation
. -
En el panel de navegación izquierdo, seleccione Exportaciones.
-
Para ver qué pilas importan un valor de exportación determinado, elija Export Name (Nombre de la exportación) para ese valor de exportación. CloudFormation muestra la página de detalles de exportación, que enumera todas las pilas que están importando el valor.
Para obtener una lista de pilas que importan un valor de salida exportado (AWS CLI)
Utilice el comando list-imports. Sustituya us-east-1 por su Región de AWS y por el nombre del valor de salida exportado.private-vpc-vpcid
aws cloudformation list-imports --regionus-east-1\ --export-nameprivate-vpc-vpcid
CloudFormation devuelve una lista de pilas que están importando el valor.
{
"Imports": [
"my-app-stack"
]
}
Una vez que sepa qué pilas importan un valor exportado en particular, debe modificar esas pilas para eliminar las funciones Fn::ImportValue que refieren a los valores de salida. Debe eliminar todas las importaciones que hacen referencia a valores de salida exportados antes de poder eliminar o modificar los valores de salida exportados.
Hacer referencia a las salidas sin exportaciones
Además de utilizar Export y Fn::ImportValue para referencias cruzadas entre pilas, se puede utilizar Fn::GetStackOutput para hacer referencia directamente a las salidas de las pilas. Este enfoque no requiere que la pila a la que se hace referencia declare una exportación y admita referencias entre cuentas y regiones.
En la tabla siguiente se comparan las dos opciones:
| Funcionalidad | Exportación + Fn::ImportValue |
Fn::GetStackOutput |
|---|---|---|
| Misma cuenta, misma región | Soportado | Compatible |
| Entre cuentas | No admitido | Compatible |
| Entre regiones | No admitido | Compatible |
| Exige exportación explícita | Sí | No |
| Tipo de referencia | Fuerte (bloquea la eliminación de la pila de exportación) | Débil (resuelto en el momento de la implementación) |
| Integridad referencial | Forzada | No se aplica |
Cuándo usar cada enfoque:
-
Utilice
ExportyFn::ImportValuecuando necesite una integridad referencial fuerte. Con este enfoque, CloudFormation evita que elimine una pila que exporta valores consumidos por otras pilas, lo que protege de que se rompan dependencias accidentalmente. -
Utilice
Fn::GetStackOutputcuando necesite hacer referencia a las salidas de distintas cuentas o regiones, o cuando desee hacer referencia a las salidas sin gestionar exportaciones explícitas. Tenga en cuenta queFn::GetStackOutputcrea una referencia débil. Si se elimina la pila o la salida a la que se hace referencia, no se notifica a la pila consumidora y las operaciones posteriores que vuelvan a resolver la referencia fallarán.
Para obtener más información, consulte Fn::GetStackOutput en la Guía de referencia de plantillas de CloudFormation.