|

SAM CLI procesa CloudFormation Extensions en local

AWS SAM CLI ahora procesa las CloudFormation Language Extensions en memoria durante operaciones locales, según el anuncio oficial de AWS del 18 de mayo de 2026. Antes, usar transformaciones como Fn::ForEach o Fn::Length en templates SAM obligaba a desplegar a AWS para validar el comportamiento real. Ahora todo eso corre en tu máquina.

En 30 segundos

  • SAM CLI procesa Language Extensions (AWS::LanguageExtensions) localmente desde el 18 de mayo de 2026, sin necesidad de desplegar a AWS.
  • Los comandos sam build, sam local invoke, sam sync, sam local start-api y sam validate expanden automáticamente las extensions.
  • Funciones soportadas: Fn::ForEach, Fn::Length, Fn::ToJsonString, Fn::FindInMap con valor por defecto, y políticas condicionales de borrado.
  • Los templates originales se mantienen intactos para CloudFormation: la expansión es solo local.
  • El cambio permite detectar errores de template antes del deploy, achicando los ciclos de debug.

¿Qué son las CloudFormation Language Extensions?

AWS CloudFormation Language Extensions es una transformación (AWS::LanguageExtensions) que te da acceso a funciones intrínsecas que el lenguaje base de CloudFormation no tiene. Podés usarlas declarando la transformación al inicio del template:

Transform: AWS::LanguageExtensions

A partir de ahí, el motor de CloudFormation las procesa antes de evaluar el resto del stack. El problema hasta ahora era ese: solo el motor de AWS las procesaba. SAM CLI no sabía qué hacer con ellas localmente.

Ponele que querías crear cinco funciones Lambda con configuraciones similares, variando solo el nombre y el handler. Con Language Extensions podías escribir una definición y usar Fn::ForEach para generar las cinco. Pero si intentabas correr sam local invoke, SAM se confundía porque el template no estaba expandido. ¿Solución hasta mayo de 2026? Deployar a AWS para probar. (Sí, en serio, cada vez que querías validar el template.)

Anuncio del 18 de mayo de 2026: expansión local en SAM CLI

SAM CLI suma procesamiento en memoria de las Language Extensions durante todas las operaciones locales. Según el anuncio oficial, el equipo de AWS resolvió el conflicto que tenían los equipos de desarrollo entre dos opciones: o usaban Language Extensions y perdían el flujo local, o mantenían templates repetitivos para poder iterar en su máquina.

No hay configuración adicional que hacer. Si tu template tiene la transformación AWS::LanguageExtensions, SAM CLI la detecta y expande todo antes de ejecutar el comando que pediste.

Funciones de Language Extensions que SAM CLI soporta ahora

No es soporte parcial. La documentación de SAM confirma las siguientes funciones:

Fn::ForEach

La más útil del grupo. Itera sobre una lista y genera recursos o propiedades por cada ítem. Si tenés diez lambdas con la misma estructura, escribís una y la multiplicás. El resultado de la expansión es exactamente lo que CloudFormation recibe cuando deployás. Esto se conecta con lo que analizamos en automatizar el deployment de funciones.

Fn::Length

Devuelve la longitud de una lista. Útil cuando necesitás saber cuántos recursos genera un ForEach para configurar otra parte del template dinámicamente.

Fn::ToJsonString

Convierte un objeto CloudFormation a string JSON. Sirve para meter configuraciones complejas dentro de parámetros de recursos que esperan un string.

Fn::FindInMap con DefaultValue

La versión extendida de FindInMap que te permite especificar un valor por defecto si la clave no existe en el Mapping. Antes, si la clave faltaba, el template fallaba en validación. Ahora podés manejar ese caso sin condicionales extra.

DeletionPolicy y UpdateReplacePolicy condicionales

Podés definir políticas de borrado y reemplazo que cambien según parámetros. Por ejemplo: en producción conservar el recurso al borrarlo, en staging directo a la basura. Todo en el mismo template, sin duplicar stacks.

Comandos de SAM CLI con expansión automática

Todos estos procesan Language Extensions sin que hagas nada especial:

ComandoQué hace con Language Extensions
sam buildExpande el template antes de compilar las funciones
sam local invokeExpande y ejecuta la función específica localmente
sam local start-apiExpande el template y levanta el API Gateway local
sam syncExpande localmente antes de sincronizar con AWS
sam validateValida el template expandido, no el raw
aws sam cli cloudformation extensions diagrama explicativo

El punto clave del sam validate: antes, el comando validaba el template sin expandir. Ahora valida lo que CloudFormation realmente va a ver, entonces los errores de lógica de transformación los encontrás en tu máquina. En estándares técnicos internacionales profundizamos sobre esto.

Ejemplo práctico: Fn::ForEach con sam local invoke

Supongamos que tenés que crear tres funciones Lambda para procesar eventos de tres queues distintas. Sin Language Extensions, repetís el bloque tres veces con leves diferencias. Con Fn::ForEach, el template queda así (simplificado):

Transform: AWS::LanguageExtensions
Parameters:
 Queues:
 Type: CommaDelimitedList
 Default: "orders,payments,notifications"

Resources:
 Fn::ForEach::ProcessorFunctions:
 - QueueName
 - !Ref Queues
 - ProcessorFunction&{QueueName}:
 Type: AWS::Serverless::Function
 Properties:
 Handler: handler.process
 Runtime: python3.12
 Environment:
 Variables:
 QUEUE_NAME: !Sub "${QueueName}"

SAM CLI expande esto a tres recursos concretos antes de ejecutar el build o el invoke. Si querés testear la función de pagos:

sam local invoke ProcessorFunctionpayments --event events/payment.json

Antes de este cambio, ese comando te tiraba un error porque SAM no sabía qué era Fn::ForEach. Ahora lo expande en memoria y ejecuta la función correcta. ¿Y qué pasó cuando lo implementaron en producción? Lo testearon con templates reales de clientes antes del release (según los commits del repositorio oficial de SAM CLI en GitHub).

Ciclos de desarrollo más cortos: errores que antes tardaban minutos ahora aparecen en segundos

Cualquiera que haya trabajado con CloudFormation sabe el ciclo de dolor: escribís el template, mandás el deploy, esperás tres o cuatro minutos, CloudFormation te dice que hay un error de sintaxis en una transformación, corregís, volvés a esperar. Con templates grandes con muchos recursos, ese ciclo puede ser de diez minutos o más.

Con la expansión local, SAM detecta los errores de Language Extensions en el momento del build o del validate. Sin conectarse a AWS, sin esperar rollbacks.

El impacto es concreto para equipos que usan Fn::ForEach para generar muchos recursos: una sola corrida de sam validate te dice si la lógica de iteración está bien antes de gastar tiempo en el deploy. La “velocidad de desarrollo serverless” que AWS siempre prometió ahora cierra un poco más con la realidad. Te puede servir nuestra cobertura de ejecutar aplicaciones sin dependencias remotas.

Compatibilidad con templates CloudFormation existentes

El flujo de trabajo no cambia para el lado de AWS. SAM CLI expande las Language Extensions solo en memoria, para sus operaciones locales. El template que sube a CloudFormation es el original, con la transformación declarada, y CloudFormation lo procesa como siempre.

Dicho esto, hay un matiz importante: si tenés templates que usan AWS::LanguageExtensions y estás en una versión vieja de SAM CLI, vas a necesitar actualizar. El soporte está disponible desde la versión que salió el 18 de mayo de 2026. Para chequear tu versión:

sam --version

Si está desactualizada, un pip install --upgrade aws-sam-cli o la actualización desde el instalador oficial de AWS te resuelve.

Errores comunes al usar Language Extensions con SAM CLI

Olvidar declarar la transformación en el template

Si usás Fn::ForEach sin agregar Transform: AWS::LanguageExtensions al inicio del template, SAM CLI no sabe que tiene que expandir nada y el comportamiento es indefinido. CloudFormation te rechaza el template. La transformación va en la raíz del template, no dentro de un recurso.

Referenciar el recurso generado con el nombre incorrecto

Cuando Fn::ForEach genera recursos, el nombre del recurso combina el prefijo que definiste con el valor del iterador. Si no conocés el nombre exacto del recurso expandido, sam local invoke te va a decir que no encuentra la función. Corré sam validate primero para ver todos los nombres que genera la expansión. Relacionado: seguridad en tu pipeline de CI/CD.

Esperar que sam local start-lambda soporte la expansión

Los cinco comandos que mencionamos arriba soportan expansión. sam local start-lambda todavía no está en la lista según la documentación actual. Si tu flujo depende de ese comando, usá sam local invoke como alternativa mientras AWS extiende el soporte.

Asumir que el template expandido es el que se sube a CloudFormation

La expansión es solo local. CloudFormation recibe el template original con la declaración Transform y lo expande por su cuenta. Si modificás la lógica de la transformación y funcionó localmente, no des por sentado que CloudFormation va a producir el mismo resultado en todos los edge cases sin probarlo.

Preguntas Frecuentes

¿Cómo usar CloudFormation Language Extensions localmente en SAM?

Declarás Transform: AWS::LanguageExtensions en la raíz del template SAM y usás las funciones extendidas normalmente. Con la versión de SAM CLI del 18 de mayo de 2026 en adelante, comandos como sam build y sam local invoke expanden las extensions automáticamente sin configuración adicional.

¿Qué es Fn::ForEach y cómo funciona en SAM CLI?

Fn::ForEach es una función de AWS CloudFormation Language Extensions que itera sobre una lista y genera múltiples recursos o propiedades a partir de una plantilla común. SAM CLI ahora la expande localmente antes de ejecutar el build o el invoke, por lo que podés testear cada recurso generado sin deployal a AWS primero.

¿Cómo testear templates con Language Extensions sin desplegar a AWS?

Con sam validate verificás la estructura del template expandido en tu máquina. Con sam local invoke NombreRecursoGenerado ejecutás una función específica del template expandido. Ambos comandos procesan las Language Extensions localmente desde la actualización de mayo de 2026.

¿Qué nuevas funciones trae SAM CLI en mayo de 2026?

El cambio central es el soporte de procesamiento local para toda la suite de AWS CloudFormation Language Extensions: Fn::ForEach, Fn::Length, Fn::ToJsonString, Fn::FindInMap con DefaultValue, y políticas condicionales DeletionPolicy y UpdateReplacePolicy. No es una función nueva de SAM, sino la capacidad de procesar transformaciones que antes solo corrían en la nube.

¿Cómo evitar duplicación en templates SAM con Language Extensions?

Usás Fn::ForEach con una lista de parámetros para generar múltiples recursos desde una definición única. La clave es definir los valores variables como lista en Parameters y referenciarlos con &{IteratorName} dentro del bloque ForEach. SAM CLI expande el template antes del build, entonces lo que compilás y desplegás son los recursos ya generados.

Conclusión

El soporte de Language Extensions en SAM CLI cierra un hueco real que existía desde que AWS introdujo estas transformaciones. Hasta ahora, adoptar Fn::ForEach para reducir duplicación en templates tenía un costo oculto: perdías la capacidad de iterar localmente. Ese tradeoff ya no existe.

Para equipos que trabajan con infraestructura serverless a escala, el impacto es inmediato: templates más limpios, ciclos de debug más cortos, y validación local de la lógica de transformación antes de que CloudFormation la vea. Si ya usaban Language Extensions tolerando el costo, ahora pueden optimizar el flujo. Si las evitaban por ese motivo, ahora tienen razón para reconsiderar.

La actualización está disponible desde el 18 de mayo de 2026. Un pip install --upgrade aws-sam-cli es todo lo que hace falta para empezar a usarla.

Fuentes

Te puede interesar...