Introducción a Serverless en Swift con AWS Lambda
La arquitectura serverless se está convirtiendo en el estándar del desarrollo en la nube moderno. Gracias a AWS Lambda, los desarrolladores pueden ejecutar código sin gestionar servidores, pagando solo por el tiempo de ejecución real. Hasta hace poco, Swift se mantenía al margen del mundo serverless, pero con la llegada del soporte oficial de Swift en AWS Lambda, la situación ha cambiado drásticamente.
En este artículo, analizaremos el ciclo completo de trabajo con funciones serverless en Swift: desde la configuración del entorno hasta el despliegue en producción. Aprenderás a usar tu experiencia en desarrollo iOS/macOS para crear soluciones en la nube eficientes.
¿Por qué Swift para Serverless?
Swift no es solo un lenguaje para aplicaciones móviles. Sus puntos fuertes lo convierten en una excelente opción para serverless:
- Seguridad de tipos — el compilador detecta errores en la fase de compilación
- Alto rendimiento — el código nativo es más rápido que los lenguajes interpretados
- Sintaxis moderna — el código es fácil de leer y mantener
- Base de código compartida — se pueden reutilizar modelos y lógica de proyectos iOS/macOS
Para ejecutar Swift en AWS Lambda se utiliza la imagen oficial de Amazon Linux 2 con Swift 5.10 preinstalado. Esto garantiza compatibilidad total y un inicio en frío mínimo.
Configuración del entorno y creación de la primera función
Instalación de las herramientas necesarias
Antes de comenzar, asegúrate de tener instalado:
- Swift 5.10 o superior
- Docker (para compilar en entorno Linux)
- AWS CLI con credenciales configuradas
- Homebrew (para macOS)
# Instalación de Swift mediante Homebrewbrew install swift
# Verificar la versiónswift --version
# Instalación de AWS CLIbrew install awscli
# Configuración de AWSaws configureCreación del proyecto Swift Package
Creemos un nuevo paquete ejecutable de Swift:
mkdir MyLambdaFunctioncd MyLambdaFunctionswift package init --type executableAhora actualizamos Package.swift para trabajar con AWS Lambda Runtime:
// swift-tools-version:5.10import PackageDescription
let package = Package( name: "MyLambdaFunction", platforms: [.macOS(.v13)], dependencies: [ .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0") ], targets: [ .executableTarget( name: "MyLambdaFunction", dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ]), .testTarget( name: "MyLambdaFunctionTests", dependencies: ["MyLambdaFunction"]), ])Código de la función manejadora
Reemplazamos el contenido de Sources/MyLambdaFunction/main.swift:
import AWSLambdaRuntime
// Definimos la estructura de la solicitudstruct Request: Codable { let name: String let age: Int}
// Definimos la estructura de la respuestastruct Response: Codable { let message: String let isAdult: Bool}
// Manejador principal@mainstruct MyHandler: SimpleLambdaHandler { typealias Event = Request typealias Output = Response
func handle(_ event: Request, context: LambdaContext) async throws -> Response { let isAdult = event.age >= 18 return Response( message: "¡Hola, \\(event.name)!", isAdult: isAdult ) }}Compilación y despliegue en AWS Lambda
Compilación para Linux
Dado que Swift en macOS compila binarios para macOS, necesitamos usar Docker:
# Creamos el Dockerfilecat << EOF > DockerfileFROM swift:5.10-amazonlinux2 AS buildWORKDIR /appCOPY . .RUN swift build -c release --