Introducción
Hasta ahora, los equipos que gestionaban entornos multi-cuenta en AWS enfrentaban un problema recurrente: cómo compartir valores críticos entre stacks sin caer en dependencias circulares o configuraciones estáticas. Por ejemplo, ¿cómo hacer que un stack en la cuenta A acceda a la salida de un stack en la cuenta B (por ejemplo, un VPC ID o un ARN de base de datos) sin copiar manualmente los valores entre templates o coordinar actualizaciones entre equipos?
La solución tradicional implicaba:
- Parámetros estáticos en CloudFormation, que requerían actualizaciones manuales y generaban drift de configuración.
- Recursos personalizados (Custom Resources) con lambdas, que añadían complejidad y costo operativo.
- Parámetros de SSM Parameter Store, que requerían sincronización entre cuentas y regiones.
Con la introducción de Fn::GetStackOutput, AWS CloudFormation resuelve este problema de raíz. Esta función intrínseca permite referenciar salidas de stacks en otras cuentas y regiones directamente desde un template de CloudFormation o desde una aplicación CDK, asumiendo un rol de IAM con los permisos necesarios y resolviendo el valor durante el procesamiento del template.
Qué ocurrió
En mayo de 2026, AWS anunció el lanzamiento de Fn::GetStackOutput, una función intrínseca de CloudFormation que habilita la referencia cruzada de salidas de stacks entre cuentas y regiones sin necesidad de recursos personalizados. La funcionalidad está disponible en todas las regiones donde CloudFormation está soportado, según la tabla de regiones de AWS.
Qué cambia para los equipos
| **Antes** | **Ahora** |
|---|---|
| Dependencia de parámetros estáticos o recursos personalizados | Referencia directa con BLOCK11 |
| Coordinación manual entre equipos para actualizar valores | Acceso automatizado con permisos de IAM |
| Bloqueos en despliegues por dependencias circulares | Eliminación de *deadlocks* en CDK |
| Uso de SSM Parameter Store (con sincronización) | Referencias débiles (*weak references*) entre stacks |
- Recursos personalizados (
CustomResource). - Parámetros de SSM.
- Lógica de coordinación manual.
Por ejemplo, en un stack CDK que crea un clúster de EKS en una cuenta B, pero necesita el VPC ID de un stack base en la cuenta A, antes se requería:
// Código anterior en CDK (con recursos personalizados)
const vpcId = new CustomResource(this, 'VpcLookup', {
serviceToken: 'arn:aws:lambda:us-east-1:123456789012:function:custom-lookup',
properties: { stackName: 'BaseStack', outputKey: 'VpcId' }
});Ahora, simplemente se usa:
// Código actualizado en CDK
const vpcId = Fn.getStackOutput({
stackName: 'BaseStack',
outputKey: 'VpcId',
accountId: '123456789012',
region: 'us-east-1'
});Impacto para DevOps / Infraestructura / Cloud / Seguridad
Para equipos de DevOps e Infraestructura
- Reducción de complejidad:
– Sin bloqueos en despliegues: Las dependencias entre stacks ya no generan deadlocks en CDK, lo que acelera los pipelines de CI/CD.
- Consistencia en entornos multi-cuenta:
– Un stack de Security Groups en la cuenta A puede usar el VPC ID de un stack base en la cuenta B.
– Un stack de RDS en la región us-east-1 puede usar el ARN de un KMS Key en la región eu-west-1.
- Menor riesgo de drift:
Para equipos de Seguridad
- Principio de mínimo privilegio:
Fn::GetStackOutput debe tener solo los permisos necesarios para leer la salida del stack remoto.– Ejemplo de política mínima:
# IAM Policy para el rol de cross-account
Version: '2012-10-17'
Statement:
- Effect: Allow
Action: cloudformation:DescribeStacks
Resource: arn:aws:cloudformation:us-east-1:123456789012:stack/BaseStack/*
- Effect: Allow
Action: cloudformation:ListStacks
Resource: '*'
- Effect: Allow
Action: cloudformation:DescribeStackResource
Resource: arn:aws:cloudformation:us-east-1:123456789012:stack/BaseStack/*
- Auditoría y trazabilidad:
Para equipos de Cloud
- Escalabilidad en entornos multi-región:
- Compatibilidad con CDK:
Detalles técnicos
Funcionamiento de Fn::GetStackOutput
La función tiene la siguiente sintaxis en CloudFormation:
Fn::GetStackOutput:
StackName: <nombre-del-stack>
OutputKey: <clave-de-la-salida>
AccountId: <ID-de-la-cuenta> # Opcional, si es la misma cuenta
Region: <región> # Opcional, si es la misma región
RoleArn: <ARN-del-rol-de-IAM> # Requerido para cross-accountParámetros clave:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
