

# Obtención de salidas exportadas de una pila implementada de CloudFormation
<a name="using-cfn-stack-exports"></a>

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:

1. En la plantilla de la primera pila (p. ej., la pila de redes), se definen determinados valores para la exportación mediante el campo `Export` de la sección `Outputs`. Para obtener más información, consulte [Sintaxis de Outputs de la plantilla de CloudFormation](outputs-section-structure.md).

1. 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.

1. En la plantilla de la otra pila, se utiliza la función [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-importvalue.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-importvalue.html) para importar los valores exportados de la primera pila.

1. 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](walkthrough-crossstackref.md).

## Exportación de valores de salida de pilas en comparación con el uso de pilas anidadas
<a name="output-vs-nested"></a>

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](using-cfn-nested-stacks.md).

## Consideraciones
<a name="using-cfn-stack-exports-considerations"></a>

Las siguientes restricciones se aplican a las referencias cruzadas entre pilas:
+ Para cada Cuenta de AWS, los nombres `Export` deben ser únicos dentro de una región.
+ Cuando se usan `Export` y `Fn::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, utilice `Fn::GetStackOutput`.
+ Para las salidas, el valor de la propiedad `Name` de un `Export` no puede usar las funciones `Ref` o `GetAtt` que dependen de un recurso.

  Del mismo modo, la función `ImportValue` no puede incluir funciones `Ref` o `GetAtt` que 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
<a name="using-cfn-stack-exports-listing"></a>

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)**

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. En la barra de navegación de la parte superior de la pantalla, elija la Región de AWS.

1. 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 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-exports.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-exports.html). Sustituya {{us-east-1}} por su Región de AWS.

```
aws cloudformation list-exports --region {{us-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
<a name="using-cfn-stack-imports"></a>

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)**

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. En el panel de navegación izquierdo, seleccione **Exportaciones**.

1. 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 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-imports.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-imports.html). Sustituya {{us-east-1}} por su Región de AWS y `{{private-vpc-vpcid}}` por el nombre del valor de salida exportado.

```
aws cloudformation list-imports --region {{us-east-1}} \
    --export-name {{private-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
<a name="using-cfn-stack-exports-without-exports"></a>

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:


**Comparación de Export con Fn::ImportValue y Fn::GetStackOutput**  

| 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 `Export` y `Fn::ImportValue` cuando 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::GetStackOutput` cuando 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 que `Fn::GetStackOutput` crea 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](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-getstackoutput.html) en la *Guía de referencia de plantillas de CloudFormation*.