Introdução ao Serverless em Swift com AWS Lambda
A arquitetura Serverless está se tornando o padrão do desenvolvimento moderno em nuvem. Graças ao AWS Lambda, os desenvolvedores podem executar código sem gerenciar servidores, pagando apenas pelo tempo de execução real. Até recentemente, o Swift estava à margem do mundo serverless, mas com o surgimento do suporte oficial do Swift no AWS Lambda, a situação mudou drasticamente.
Neste artigo, abordaremos o ciclo completo de trabalho com funções serverless em Swift: desde a configuração do ambiente até o deploy em produção. Você aprenderá como usar sua experiência em desenvolvimento iOS/macOS para criar soluções eficientes em nuvem.
Por que Swift para Serverless?
Swift não é apenas uma linguagem para aplicativos móveis. Seus pontos fortes o tornam uma excelente escolha para serverless:
- Segurança de tipos — o compilador detecta erros na fase de compilação
- Alta performance — código nativo executa mais rápido que linguagens interpretadas
- Sintaxe moderna — código fácil de ler e manter
- Base de código compartilhada — é possível reutilizar modelos e lógica de projetos iOS/macOS
Para executar Swift no AWS Lambda, é usada a imagem oficial Amazon Linux 2 com Swift 5.10 pré-instalado. Isso garante total compatibilidade e inicialização a frio mínima.
Configuração do ambiente e criação da primeira função
Instalação das ferramentas necessárias
Antes de começar, verifique se você tem instalado:
- Swift 5.10 ou superior
- Docker (para compilação em ambiente Linux)
- AWS CLI com credentials configuradas
- Homebrew (para macOS)
# Instalação do Swift via Homebrewbrew install swift
# Verificação da versãoswift --version
# Instalação do AWS CLIbrew install awscli
# Configuração do AWSaws configureCriação do projeto Swift Package
Vamos criar um novo pacote executável Swift:
mkdir MyLambdaFunctioncd MyLambdaFunctionswift package init --type executableAgora, atualize o Package.swift para funcionar com o 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 da função handler
Substitua o conteúdo de Sources/MyLambdaFunction/main.swift:
import AWSLambdaRuntime
// Define a estrutura da requisiçãostruct Request: Codable { let name: String let age: Int}
// Define a estrutura da respostastruct Response: Codable { let message: String let isAdult: Bool}
// Handler 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: "Olá, \\(event.name)!", isAdult: isAdult ) }}Compilação e deploy no AWS Lambda
Compilação para Linux
Como o Swift no macOS compila binários para macOS, precisamos usar Docker:
# Cria o Dockerfilecat << EOF > DockerfileFROM swift:5.10-amazonlinux2 AS buildWORKDIR /appCOPY . .RUN swift build -c release --