

Esta es la nueva *Guía de referencia de plantillas de CloudFormation*. Actualice sus marcadores y enlaces. Para obtener ayuda sobre cómo empezar a usar CloudFormation, consulte la [Guía del usuario de AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

# `Fn::GetStackOutput`
<a name="intrinsic-function-reference-getstackoutput"></a>

La función intrínseca `Fn::GetStackOutput` devuelve el valor de una salida desde otra pila. A diferencia de `Fn::ImportValue`, esta función no requiere que la pila a la que se hace referencia exporte explícitamente el valor de salida. También admite las referencias entre cuentas y entre regiones.

Utilice esta función cuando necesite hacer referencia a las salidas de las pilas de distintas cuentas o regiones de AWS, o cuando desee hacer referencia a las salidas sin gestionar exportaciones explícitas.

**nota**  
`Fn::GetStackOutput` crea una referencia débil. El valor al que se hace referencia se resuelve en el momento de la creación o actualización de la pila. Si la pila o la salida a la que se hace referencia se borra o modifica posteriormente, la pila consumidora no se actualiza ni notifica automáticamente. Para garantizar la coherencia, proteja las pilas y salidas a las que se hace referencia de cambios imprevistos.

**nota**  
`Fn::GetStackOutput` no admite referencia entre particiones.

## Declaración
<a name="w2aac24c43c11"></a>

### JSON
<a name="intrinsic-function-reference-getstackoutput-syntax.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "{{stack-name}}",
    "OutputName": "{{output-name}}",
    "Region": "{{region}}",
    "RoleArn": "{{role-arn}}"
  }
}
```

### YAML
<a name="intrinsic-function-reference-getstackoutput-syntax.yaml"></a>

Puede utilizar el nombre de la función completa:

```
Fn::GetStackOutput:
  StackName: {{stack-name}}
  OutputName: {{output-name}}
  Region: {{region}}
  RoleArn: {{role-arn}}
```

También puede utilizar la forma abreviada:

```
!GetStackOutput
  StackName: {{stack-name}}
  OutputName: {{output-name}}
  Region: {{region}}
  RoleArn: {{role-arn}}
```

**importante**  
No se puede utilizar la forma abreviada de `!GetStackOutput` cuando contiene otras funciones de forma abreviada, tales como `!Sub` o `!Ref` como valores de parámetros. En ese caso, se debe utilizar el nombre completo de la función:  

```
# Do not use
!GetStackOutput
  StackName: !Ref MyStackNameParam
  OutputName: VpcId

# Use this instead
Fn::GetStackOutput:
  StackName: !Ref MyStackNameParam
  OutputName: VpcId
```

## Parameters
<a name="w2aac24c43c13"></a>

StackName  
Nombre de la pila que contiene la salida a la cual se desea hacer referencia.  
*Obligatorio*: sí

OutputName  
ID lógico de la salida a la cual se debe hacer referencia. Esta es la clave definida en la sección Salidas de la plantilla de la pila a la que se hace referencia.  
*Obligatorio*: sí

Región  
La región de AWS en la que se implementa la pila a la que se hace referencia. Se selecciona de manera predeterminada la región de la pila que se está creando o actualizando.  
*Obligatorio*: no

RoleArn  
El ARN de un rol de IAM con permisos `cloudformation:DescribeStacks` en la pila a la que se hace referencia. Este rol debe poder ser asumido por el rol de ejecución de la pila que se está creando o actualizando. Se selecciona de manera predeterminada el rol de la pila actual. Utilice este parámetro cuando haga referencia a una pila de otra cuenta de AWS.  
*Obligatorio*: no

## Valor devuelto
<a name="w2aac24c43c15"></a>

El valor de la salida especificada de la pila a la que se hace referencia.

## Ejemplos
<a name="w2aac24c43c17"></a>

### Misma cuenta, misma región
<a name="intrinsic-function-reference-getstackoutput-example-same-account-region"></a>

El siguiente ejemplo hace referencia a la salida `VpcId` de una pila nombrada como `ProducerStack` en la misma cuenta y región. Como no se especifica ni `Region` ni `RoleArn`, CloudFormation usa la función de región y ejecución de la pila actual.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-same.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "ProducerStack",
    "OutputName": "VpcId"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-same.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
```

### Misma cuenta, diferente región
<a name="intrinsic-function-reference-getstackoutput-example-cross-region"></a>

El siguiente ejemplo hace referencia a la salida `VpcId` de la pila `ProducerStack` implementada en `us-west-2`, mientras que la pila consumidora se encuentra en una región diferente. El parámetro `Region` indica a CloudFormation que busque el valor al que se hace referencia en `us-west-2`.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-cross-region.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "ProducerStack",
    "OutputName": "VpcId",
    "Region": "us-west-2"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-region.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
  Region: us-west-2
```

### Entre cuentas
<a name="intrinsic-function-reference-getstackoutput-example-cross-account"></a>

El siguiente ejemplo hace referencia a la salida de `VpcId` de la `ProducerStack` en una cuenta `111111111111`. La pila consumidora está en la cuenta `222222222222`. `RoleArn` especifica un rol en la cuenta `111111111111` con permisos `cloudformation:DescribeStacks`, que debe ser asumida por el rol de ejecución de la pila consumidora.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-cross-account.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "ProducerStack",
    "OutputName": "VpcId",
    "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-account.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
  RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole
```

### Entre cuentas y entre regiones
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region"></a>

El siguiente ejemplo hace referencia a la salida de una pila en una cuenta diferente y en una región también diferente. Se especifican los dos parámetros `RoleArn` y `Region`.

#### JSON
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region.json"></a>

```
{
  "Fn::GetStackOutput": {
    "StackName": "ProducerStack",
    "OutputName": "VpcId",
    "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole",
    "Region": "us-west-2"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getstackoutput-example-cross-account-region.yaml"></a>

```
Fn::GetStackOutput:
  StackName: ProducerStack
  OutputName: VpcId
  RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole
  Region: us-west-2
```

## Configurar el rol de IAM
<a name="intrinsic-function-reference-getstackoutput-iam"></a>

Al utilizar el parámetro `RoleArn` para referencias entre cuentas, el rol de IAM debe tener permiso para describir las pilas de la cuenta que contiene la pila a la que se hace referencia:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:DescribeStacks"
      ],
      "Resource": "*"
    }
  ]
}
```

**sugerencia**  
Para una política más restrictiva, aplique el `Resource` al ARN de pila específico al que desee hacer referencia.

El rol debe tener una política de confianza que otorgue permisos de `AssumeRole` al rol de ejecución de la pila consumidora:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:role/CloudFormationExecutionRole"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

## Funciones compatibles
<a name="w2aac24c43c21"></a>

Las siguientes funciones se pueden usar dentro de los valores de los parámetros de `Fn::GetStackOutput` (por ejemplo, para construir `StackName` o `RoleArn`). El valor de estas funciones no puede depender de un recurso.
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

`Fn::GetStackOutput` se puede utilizar en las siguientes posiciones de plantilla:
+ Valor directo de la propiedad del recurso
+ Dentro de `Fn::Join`
+ Dentro de `Fn::If`
+ Dentro de `Fn::Select`

Consulte [Limitaciones conocidas](#intrinsic-function-reference-getstackoutput-limitations) debajo para ver qué posiciones todavía no se admiten.

Por ejemplo, se puede utilizar `Ref` para pasar un valor de parámetro como nombre de la pila:

```
Parameters:
  SourceStackName:
    Type: String

Resources:
  MyResource:
    Type: AWS::EC2::Instance
    Properties:
      SubnetId:
        Fn::GetStackOutput:
          StackName: !Ref SourceStackName
          OutputName: SubnetId
```

## Limitaciones conocidas
<a name="intrinsic-function-reference-getstackoutput-limitations"></a>

Esta versión no admite los siguientes patrones de uso. Todas devuelven un error `InternalFailure`. Se agregará compatibilidad para estos patrones en una actualización futura.
+ `Fn::GetStackOutput` dentro de un valor de mapa `Fn::Sub` variable
+ `Fn::GetStackOutput` dentro de `Fn::Base64`
+ `Fn::GetStackOutput` como un valor directo de sección `Outputs`
+ `Fn::GetStackOutput` dentro de `Fn::Equals` de la sección `Conditions`
+ `Fn::GetStackOutput` dentro de `Fn::ImportValue`

Use `Fn::GetStackOutput` directamente como valor de propiedad de un recurso o envuélvalo dentro de `Fn::Join`, `Fn::If` o `Fn::Select`.

## Gestión de errores
<a name="intrinsic-function-reference-getstackoutput-errors"></a>

CloudFormation valida las referencias `Fn::GetStackOutput` durante las operaciones de creación o actualización de pilas. A continuación, se enumeran errores comunes que puede encontrar:
+ *No se puede asumir el rol de IAM*: la operación de pila falla y se produce un error de acceso denegado. Compruebe que el rol pueda asumirlo el rol de ejecución de la pila consumidora.
+ El *rol de IAM carece del permiso DescribeStacks*: la operación de apilado falla y se produce un error de acceso denegado. Compruebe que la política de permisos del rol incluya `cloudformation:DescribeStacks`.
+ *La pila a la que se hace referencia no existe*: la operación de pila falla y se produce un error de validación que indica que no se encontró la pila. Si se ha incluido el parámetro `Region`, compruebe que es la región correcta para la pila a la que desea hacer referencia.
+ *La clave de salida no existe en la pila a la que se hace referencia*: la operación de pila falla y se produce un error de validación que indica que no se encontró la salida.
+ *La pila a la que se hace referencia se encuentra en una región que no está habilitada para la cuenta de destino*: se produce un error en la operación de la pila. Asegúrese de que la región de destino esté habilitada en la cuenta propietaria de la pila a la que se hace referencia.
+ *La región a la que se hace referencia no es válida*: la operación de pila falla y se produce un error de validación.

### Referencias entre regiones us-east-1 y regiones de suscripción voluntaria
<a name="intrinsic-function-reference-getstackoutput-errors-optin"></a>

Es posible que se produzca un error al implementar una referencia entre la región `us-east-1` y una región de suscripción voluntaria. Para evitar este tipo de errores, siga [esta guía para actualizar la compatibilidad de los tokens para el punto de conexión STS global](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html).

## Uso de Fn::GetStackOutput con AWS Cloud Development Kit (AWS CDK)
<a name="intrinsic-function-reference-getstackoutput-cdk"></a>

El AWS Cloud Development Kit (AWS CDK) (CDK) admite `Fn::GetStackOutput` a través del método `Fn.getStackOutput()`. Si tiene referencias entre regiones o entre cuentas entre pilas de CDK, ahora CDK puede utilizar `Fn::GetStackOutput` de forma nativa en lugar de generar recursos personalizados con parámetros de SSM. Esto simplifica las plantillas sintetizadas y elimina la necesidad de recurrir a la solución anterior `crossRegionReferences`.

Para obtener más información, consulte la [Referencia de la API de CDK](https://docs.aws.amazon.com/cdk/api/v2/).

## Comparación con Fn::ImportValue
<a name="intrinsic-function-reference-getstackoutput-comparison"></a>


| Funcionalidad | `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 | Sí | No | 

Use `Fn::ImportValue` cuando necesite una sólida integridad referencial dentro de la misma cuenta y región. Use `Fn::GetStackOutput` cuando necesite referencias entre cuentas o regiones, o cuando desee evitar la gestión de exportaciones explícitas.

## Prácticas recomendadas
<a name="intrinsic-function-reference-getstackoutput-best-practices"></a>
+ *Proteja las pilas y salidas a las que se hace referencia.* Como `Fn::GetStackOutput` crea una referencia débil, eliminar la pila a la que se hace referencia no impide que se cree o actualice la pila consumidora. Sin embargo, las operaciones posteriores que vuelvan a resolver la referencia fallarán. Utilice políticas de pila, protección contra la eliminación o políticas de IAM para evitar la eliminación accidental de las pilas a las que se hace referencia.
+ *Limite el alcance de los roles de IAM.* Al configurar `RoleArn` para el acceso entre cuentas, restrinja el permiso de `DescribeStacks` al ARN de pila específico siempre que sea posible.
+ *Tenga en cuenta el tiempo de resolución.* El valor al que se hace referencia se resuelve en el momento de la creación o actualización de la pila. Si el valor de origen cambia, la pila consumidora no se actualiza automáticamente. Para detectar los cambios, realice una actualización en la pila consumidora.