Terraform CDK con Go: Construyendo una API Serverless Completa (Parte 1)

Guía práctica paso a paso para construir una API serverless en AWS con Terraform CDKTF y Go, integrando Lambda, API Gateway, DynamoDB y S3, con estructura modular y despliegue completo.

2 sept 2025 • 6 min read • Q2BSTUDIO Team

Inteligencia-Artificial-

Infraestructura como código en acción

Si ya trabajas con Terraform y te gustaría sumar el poder de un lenguaje como Go, este tutorial te va a encantar. Te guío paso a paso para construir una API Serverless completa en AWS con Lambda, API Gateway, DynamoDB y S3 utilizando Terraform CDK CDKTF con Go.

Guía práctica archivo por archivo para crear una API de pedidos Orders API en AWS con Terraform CDK CDKTF y Go. Montaremos todas las carpetas y ficheros bajo terraform, entenderás qué hace cada pieza y desplegaremos el proyecto. En la Parte 2 añadiremos CI CD con GitHub Actions tanto para la API como para el código CDKTF siguiendo un enfoque GitOps.

Por qué CDKTF CDK for Terraform resulta tan potente

Define la infraestructura con tipos en Go y gana autocompletado, refactors y seguridad de tipos. Reutiliza módulos y constructs en lugar de mantener enormes ficheros tf. Todo sigue siendo Terraform bajo el capó plan apply, backends de estado, providers. Escala cómodamente a proyectos multi stack.

Qué vamos a construir

Una Orders API pequeña con AWS Lambda en Go, expuesta mediante API Gateway HTTP API, con datos en DynamoDB y un bucket S3 para alojar el artefacto de la Lambda api.zip. La aplicación podría exponer endpoints como orders, orders ordenId, orders ordenId items, etc. Aquí nos centraremos en la infraestructura.

Requisitos previos

Go 1.21 o 1.22. Node.js y npm para el CLI de CDKTF. Terraform CLI 1.5. AWS CLI configurada por perfil o variables de entorno. Instala CDKTF con npm i -g cdktf-cli y valida con cdktf --version.

Contexto del repositorio

Proyecto base go-serverless-api-terraform que contiene el código de la API en Go. Crearemos todos los ficheros de infraestructura bajo la carpeta terraform siguiendo la rama terraform-cdk-go. Clona el repositorio, entra en la carpeta y prepara el directorio terraform.

Estructura final de carpetas que crearás

Configurarás el proyecto con un fichero cdktf.json, el módulo go.mod, un .env de ejemplo, un main.go como punto de entrada que lee variables y sintetiza la infraestructura, un paquete infra para cablear provider, módulos y outputs, y un conjunto de módulos para DynamoDB, S3, IAM, Lambda y API Gateway.

Paso 1 Configuración del proyecto con cdktf.json

Define el lenguaje Go, el comando app go run main.go, el provider hashicorp aws con versión mayor o igual a 6 y una región por defecto como us-east-1. Podrás sobreescribir la región con la variable de entorno AWS_REGION.

Paso 2 Dependencias con go.mod

Crea el módulo terraform en Go 1.22 e incluye las dependencias de constructs v10, provider aws para CDKTF y el runtime de CDKTF. Ejecuta go mod tidy para descargar las librerías.

Paso 3 Variables de entorno con .env

Prepara un .env con AWS_REGION, AWS_PROFILE y ENV. Declara además los nombres de tablas de DynamoDB, la configuración del bucket S3 de artefactos prefijo, versioning, force destroy y cifrado NONE, AES256 o KMS además de un posible KMS key id. Añade los parámetros de la Lambda nombre, runtime provided.al2023, handler bootstrap, memoria, timeout y la clave de S3 donde subiremos api.zip.

Paso 4 Punto de entrada main.go

Lee variables de entorno con valores por defecto, instancia la app de CDKTF, crea la pila con una función NewStack que recibirá tu Config y ejecuta la síntesis. Al finalizar tendrás la carpeta cdktf.out con los ficheros de Terraform JSON listos para init y apply.

Paso 5 Cableado de la infraestructura en infra

En infra define la estructura Config, inicializa el provider de AWS con región y perfil, crea el bucket de S3 de artefactos con bloqueo de acceso público, versionado opcional y cifrado opcional. Crea las tablas de DynamoDB con modo on demand y recuperación point in time. Genera el rol de ejecución de Lambda con la política básica de logs. Declara la función Lambda desde un objeto de S3 y pasa variables de entorno como ENV, TABLE_ORDERS y TABLE_ORDER_ITEMS. Crea la API HTTP de API Gateway con integración proxy hacia la Lambda, define rutas mínimas como ANY orders y ANY orders orderId items, la stage con nombre ENV y el permiso para que API Gateway invoque la función. Expón salidas como api_url y artifact_bucket.

Paso 6 Módulos

Divide la infraestructura en módulos reutilizables dynamodb para tablas de pedidos e items con PITR activado, s3 para el bucket de artefactos con PAB, versionado y cifrado, iam para el rol de ejecución de Lambda con políticas mínimas, lambda para crear la función desde S3 y apigateway para el API HTTP, integración, rutas, stage y permiso de invocación.

Paso 7 Construcción y subida del artefacto api.zip

Desde la raíz del repo compila la binaria para Linux con GOOS linux y GOARCH amd64 y comprímela como bootstrap dentro de api.zip. Cuando el bucket exista, sube el artefacto con AWS CLI a s3 usando el patrón prefijo mas entorno por ejemplo go-lambda-artifacts-dev api.zip.

Paso 8 Sintetizar y aplicar con Terraform

Desde la carpeta terraform, ejecuta el comando go run main.go para sintetizar, entra en cdktf.out stacks infra y haz terraform init. Aplica primero el bucket de artefactos con un target para poder subir api.zip. Sube el artefacto y finalmente aplica el resto con terraform apply. Obtén la URL de la API desde los outputs o desde API Gateway en la consola de AWS en la stage del entorno.

Limpieza

Ejecuta terraform destroy cuando termines. Si el bucket contiene objetos, activa S3_FORCE_DESTROY en true y vuelve a aplicar para permitir el borrado completo.

Notas y consideraciones

Runtime de la Lambda provided.al2023 y handler bootstrap para un runtime de Go personalizado. Mantén políticas IAM con privilegio mínimo e itera según lo requiera tu handler. Los nombres de buckets S3 son globales, usa el patrón prefijo guion entorno para evitar colisiones. Para equipos, valora usar backend S3 y bloqueo con DynamoDB para el estado.

Ejemplo de backend

Cuando estés listo, configura un backend S3 con bucket para estado, clave ruta de estado, región y tabla de locks de DynamoDB directamente dentro de la pila antes de los recursos.

Enlace al proyecto completo

El código listo para ejecutar con la misma estructura descrita está disponible en la rama terraform-cdk-go del repositorio público. Puedes revisarlo en el repositorio de GitHub.

Qué vendrá en la Parte 2

Configuraremos pipelines de GitHub Actions para compilar, testear y publicar el artefacto de la API en Go, y para sintetizar y desplegar cambios de CDKTF. Además aplicaremos GitOps con planes como checks en PR, entornos y aprobaciones.

Cómo te ayuda Q2BSTUDIO

En Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida con foco en software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi. Si quieres llevar a producción una arquitectura serverless robusta con AWS, Terraform y Go o modernizar tus cargas en la nube, nuestro equipo puede acompañarte desde el diseño hasta la automatización del despliegue con CI CD y GitOps. Descubre nuestros servicios cloud en AWS y Azure y acelera la entrega de tus iniciativas.

Más allá de la nube, integramos IA en procesos críticos, construimos asistentes y agentes IA para automatizar tareas y mejoramos la toma de decisiones con analítica avanzada. Si necesitas evolucionar tus aplicaciones a medida o reforzar tu estrategia de ciberseguridad, podemos ayudarte con auditorías, pentesting, observabilidad y prácticas de ingeniería de plataforma.

Palabras clave recomendadas para tu estrategia

aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.

Live Chat