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.
Fn::GetStackOutput
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
JSON
{ "Fn::GetStackOutput": { "StackName": "stack-name", "OutputName": "output-name", "Region": "region", "RoleArn": "role-arn" } }
YAML
Puede utilizar el nombre de la función completa:
Fn::GetStackOutput: StackName:stack-nameOutputName:output-nameRegion:regionRoleArn:role-arn
También puede utilizar la forma abreviada:
!GetStackOutput StackName:stack-nameOutputName:output-nameRegion:regionRoleArn: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
- 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:DescribeStacksen 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
El valor de la salida especificada de la pila a la que se hace referencia.
Ejemplos
Misma cuenta, misma región
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
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId
Misma cuenta, diferente región
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
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "Region": "us-west-2" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId Region: us-west-2
Entre cuentas
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
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole
Entre cuentas y entre regiones
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
{ "Fn::GetStackOutput": { "StackName": "ProducerStack", "OutputName": "VpcId", "RoleArn": "arn:aws:iam::111111111111:role/GetStackOutputRole", "Region": "us-west-2" } }
YAML
Fn::GetStackOutput: StackName: ProducerStack OutputName: VpcId RoleArn: arn:aws:iam::111111111111:role/GetStackOutputRole Region: us-west-2
Configurar el rol de IAM
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
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 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
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::GetStackOutputdentro de un valor de mapaFn::Subvariable -
Fn::GetStackOutputdentro deFn::Base64 -
Fn::GetStackOutputcomo un valor directo de secciónOutputs -
Fn::GetStackOutputdentro deFn::Equalsde la secciónConditions -
Fn::GetStackOutputdentro deFn::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
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
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.
Uso de Fn::GetStackOutput con AWS Cloud Development Kit (AWS CDK)
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.
Comparación con Fn::ImportValue
| 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
-
Proteja las pilas y salidas a las que se hace referencia. Como
Fn::GetStackOutputcrea 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
RoleArnpara el acceso entre cuentas, restrinja el permiso deDescribeStacksal 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.