Serverless em Swift: quando um desenvolvedor mobile vai para a nuvem
\n\nVocê escreve em Swift para iOS, macOS ou watchOS. Seu código é bonito, seguro e rápido. Mas, mais cedo ou mais tarde, surge a pergunta: e se eu pudesse colocar a lógica de backend na mesma linguagem? Não criar entidades com Python, Node.js ou Go, mas simplesmente escrever uma função na nuvem em Swift nativo?
\n\nA boa notícia: isso já é realidade. Funções Serverless em Swift funcionam no AWS Lambda, Google Cloud Run e até no Vercel. Sim, o ecossistema não é tão maduro quanto o do JavaScript, mas para desenvolvedores mobile que querem controlar tanto o cliente quanto o servidor, isso é uma mina de ouro.
\n\nNeste artigo, vamos analisar como executar Swift em ambiente serverless, quais são as armadilhas e onde encontrar modelos prontos. Vamos nessa.
\n\nPor que Swift e não Python ou Node.js?
\n\nVamos ser honestos: se você precisa criar rapidamente um parser ou uma API simples, Python ou Node.js serão mais convenientes. Mas o Swift tem trunfos que pesam mais para cargas de produção:
\n\n- \n
- Desempenho — Swift é compilado para código nativo. No AWS Lambda, isso proporciona um ganho de velocidade de até 2 a 3 vezes em comparação com o Node.js com os mesmos orçamentos de memória. \n
- Tipagem e segurança — Optionals, tipagem forte, ausência de objetos nil. Erros que em Python apareceriam em tempo de execução, em Swift são detectados em tempo de compilação. \n
- Stack unificada — se você é desenvolvedor iOS, não precisa aprender uma segunda linguagem para o backend. Uma base de código, as mesmas estruturas, a mesma lógica. \n
- Ecossistema Vapor — o framework Swift mais popular para servidor, que se adapta perfeitamente ao serverless. \n
Claro, existem desvantagens: o tamanho do binário (cerca de 15-30 MB contra 500 KB para Node.js) e menos bibliotecas prontas. Mas para microsserviços e gateways de API, isso não é crítico.
\n\nBase técnica: como o Swift funciona no AWS Lambda
\n\nA Amazon oferece suporte oficial ao Swift através do Custom Runtime. Você não usa o runtime embutido do Node.js ou Python — você empacota seu arquivo executável em um ZIP e o envia para o Lambda.
\n\nVeja como isso funciona no nível da arquitetura:
\n\n- \n
- O Lambda chama seu binário como um comando shell. \n
- Seu código lê o evento do stdin (JSON), processa e escreve a resposta no stdout. \n
- A API Runtime (via HTTP) é usada para enviar relatórios e erros. \n
Parece complicado? Na prática, usamos o modelo pronto Swift AWS Lambda Runtime da Apple. Ele cuida de todo o trabalho pesado.
\n\nExemplo: um handler Lambda simples em Swift
\n\nVamos criar uma função que recebe o nome de um usuário e retorna uma saudação. Este é o clássico hello-world para serverless.
\n\n// Importa a biblioteca da Apple\nimport AWSLambdaRuntime\nimport AWSLambdaEvents\n\n// Estruturas para entrada e saída\nstruct GreetingRequest: Codable {\n let name: String\n}\n\nstruct GreetingResponse: Codable {\n let message: String\n}\n\n// Handler principal\nLambda.run { (context, request: GreetingRequest, callback: @escaping (Result<GreetingResponse, Error>) -> ()) in\n let response = GreetingResponse(message: "Olá, \\(request.name)! Bem-vindo ao serverless em Swift.")\n callback(.success(response))\n}\n\n\nEste código é compilado em um binário. Você o empacota em um ZIP junto com as bibliotecas (linkagem estática) e o envia para o AWS Lambda. O runtime encontra o ponto de entrada automaticamente.
\n\nImportante: para produção, use uma imagem Docker baseada no Amazon Linux 2, caso contrário, podem ocorrer problemas com glibc.
\n\nBuild e deploy: plano passo a passo
\n\nPara não perder tempo com complicações, use a ferramenta pronta aws-lambda-swift-sam. É uma extensão do AWS SAM (Serverless Application Model).
\n\n- \n
- Instale o Swift 5.7+