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 personalizadosReferencia directa con BLOCK11
Coordinación manual entre equipos para actualizar valoresAcceso automatizado con permisos de IAM
Bloqueos en despliegues por dependencias circularesEliminación de *deadlocks* en CDK
Uso de SSM Parameter Store (con sincronización)Referencias débiles (*weak references*) entre stacks
En el caso de CDK (AWS Cloud Development Kit), la función se integra automáticamente para referencias entre cuentas y regiones, eliminando la necesidad de:
  • 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

  1. Reducción de complejidad:
– Eliminación de recursos personalizados (lambdas, SSM, etc.), que implicaban mantenimiento y costos adicionales.

Sin bloqueos en despliegues: Las dependencias entre stacks ya no generan deadlocks en CDK, lo que acelera los pipelines de CI/CD.

  1. Consistencia en entornos multi-cuenta:
– Un stack puede referenciar salidas de otro stack en otra cuenta sin necesidad de sincronización manual. Por ejemplo:

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

  1. Menor riesgo de drift:
– Los valores se resuelven durante el despliegue, no en tiempo de ejecución, lo que reduce la posibilidad de que la infraestructura quede desincronizada.

Para equipos de Seguridad

  1. Principio de mínimo privilegio:
– El rol de IAM que se especifica en 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/*
     
  1. Auditoría y trazabilidad:
– Cada referencia genera un evento de CloudTrail al asumir el rol de IAM, lo que facilita el seguimiento de accesos entre cuentas.

Para equipos de Cloud

  1. Escalabilidad en entornos multi-región:
– Ideal para arquitecturas con alta disponibilidad global, donde recursos en diferentes regiones necesitan compartir configuraciones (ej: VPC peering, endpoints de bases de datos).
  1. Compatibilidad con CDK:
– Los equipos que usan CDK pueden refactorizar stacks sin romper dependencias, ya que las referencias son débiles (weak references).

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-account

Parámetros clave:

ParámetroTipoRequeridoDescripción
BLOCK15StringNombre del stack del que se quiere obtener la salida.
BLOCK16StringClave de la salida del stack (ej: BLOCK17).
BLOCK18StringNoID de la cuenta AWS (si es diferente a la actual).
BLOCK19StringNoRegión de la cuenta (ej: BLOCK20).
BLOCK21String**Sí** (si es cross-account)ARN del rol de IAM con permisos para leer la salida.
#### Ejemplo completo en CloudFormation:
Resources:
  MySecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !GetAtt
        - Fn::GetStackOutput
          StackName: BaseStack
          OutputKey: VpcId
          AccountId: '123456789012'
          Region: 'us-east-1'
          RoleArn: 'arn:aws:iam::123456789012:role/CrossAccountStackReader'
      GroupDescription: 'Security group para EKS'

Permisos de IAM requeridos

Para que Fn::GetStackOutput funcione en cross-account, el rol especificado en RoleArn debe tener los siguientes permisos mínimos:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:DescribeStacks",
        "cloudformation:DescribeStackResource",
        "cloudformation:ListStacks"
      ],
      "Resource": [
        "arn:aws:cloudformation:us-east-1:123456789012:stack/BaseStack/*",
        "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/*"
      ]
    }
  ]
}

Notas importantes:

  • El rol debe tener una política de confianza que permita a CloudFormation asumirlo:
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": { "Service": "cloudformation.amazonaws.com" },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  
  • Si el stack está en otra región, se debe configurar CloudFormation StackSets o un rol con permisos globales.

Limitaciones conocidas

  1. Solo para salidas estáticas:
– La salida del stack destino no puede cambiar dinámicamente durante el despliegue. Si se modifica, el stack que la referencia debe actualizarse.
  1. Tiempo de resolución:
– El valor se resuelve durante el procesamiento del template, pero no es un valor en tiempo real. Si la salida del stack remoto cambia, el stack que la referencia no se actualizará automáticamente.
  1. Regiones no soportadas:
– Aunque está disponible en la mayoría de regiones, AWS recomienda verificar la tabla de disponibilidad antes de implementar.

Qué deberían hacer los administradores y equipos técnicos

1. Verificar compatibilidad y permisos

Antes de implementar, asegúrense de:

  • Que CloudFormation esté actualizado a la última versión (la función se lanzó en mayo de 2026, pero verifiquen con aws cloudformation describe-account-limits).
  • Que el rol de IAM tenga los permisos mínimos descritos anteriormente.
Comando para verificar la versión de CloudFormation:
aws cloudformation get-template-summary --template-url <URL-del-template> --region us-east-1

2. Actualizar templates de CloudFormation

Reemplacen las referencias manuales por Fn::GetStackOutput. Por ejemplo, si antes usaban SSM Parameter Store:

# Antes (con SSM)
Parameters:
  VpcIdParam:
    Type: AWS::SSM::Parameter::Value<String>
    Default: '/vpc/base/vpc-id'
    Description: 'VPC ID desde Parameter Store'

# Después (con Fn::GetStackOutput)
Resources:
  MySecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !GetAtt
        - Fn::GetStackOutput
          StackName: BaseStack
          OutputKey: VpcId
          AccountId: '123456789012'
          Region: 'us-east-1'
          RoleArn: 'arn:aws:iam::123456789012:role/CrossAccountStackReader'

3. Configurar CDK para referencias cross-account

Si usan CDK, actualicen a la versión 2.120.0 o superior (lanzada en mayo de 2026). Luego, usen la nueva sintaxis:

// Ejemplo en CDK (TypeScript)
import { Fn, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class MyStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const vpcId = Fn.getStackOutput({
      stackName: 'BaseStack',
      outputKey: 'VpcId',
      accountId: '123456789012',
      region: 'us-east-1',
      roleArn: 'arn:aws:iam::123456789012:role/CrossAccountStackReader'
    });

    new ec2.SecurityGroup(this, 'MySecurityGroup', {
      vpc: ec2.Vpc.fromLookup(this, 'Vpc', { vpcId }),
      description: 'Security group para EKS'
    });
  }
}

4. Validar con CloudFormation Drift Detection

Después de implementar, ejecuten AWS CloudFormation Drift Detection para asegurarse de que la infraestructura no haya cambiado inesperadamente:

aws cloudformation detect-stack-drift --stack-name MyStack --region us-east-1

5. Documentar dependencias entre stacks

Actualicen la documentación de arquitectura para reflejar las nuevas referencias. Por ejemplo:

StackDepende deSalida usada
BLOCK26BLOCK27 (cuenta 123456789012)BLOCK28
BLOCK29BLOCK30 (región eu-west-1)BLOCK31
## Conclusión

La función Fn::GetStackOutput de AWS CloudFormation es un avance clave para gestionar infraestructura multi-cuenta y multi-región. Elimina la necesidad de recursos personalizados, reduce el drift de configuración y acelera los despliegues, especialmente en entornos con CDK.

Los equipos de DevOps e Infraestructura deberían:

  1. Actualizar sus templates a la última versión de CloudFormation/CDK.
  2. Configurar roles de IAM con permisos mínimos para acceder a salidas remotas.
  3. Validar con Drift Detection para asegurar consistencia.

Esta funcionalidad no solo simplifica la gestión diaria, sino que también reduce el riesgo de errores humanos al eliminar pasos manuales de sincronización. Para arquitecturas complejas, es una herramienta que vale la pena adoptar desde ya.

FIN

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *