Funções Serverless em PHP: AWS Lambda — da teoria à prática
O desenvolvimento web moderno está cada vez mais abandonando servidores monolíticos tradicionais em favor da computação em nuvem. A arquitetura Serverless permite que desenvolvedores se concentrem exclusivamente no código, sem se preocupar com o gerenciamento de infraestrutura. AWS Lambda é um dos serviços mais populares para implementar essa abordagem. No entanto, por muito tempo se acreditou que PHP não era adequado para serverless. Isso é um mito. Neste artigo, vamos explorar como executar funções PHP no AWS Lambda, quais ferramentas são necessárias e como otimizar o desempenho.
O que é AWS Lambda e como encaixar o PHP nele?
AWS Lambda é um serviço de computação que executa seu código em resposta a eventos e gerencia automaticamente os recursos computacionais. Você paga apenas pelo tempo de execução real e pelo número de requisições. O Lambda suporta nativamente Node.js, Python, Java, Go e .NET, mas o PHP não está nesta lista "de fábrica". No entanto, isso não é um problema: podemos usar Custom Runtimes ou wrappers prontos, como o Bref.
Bref é um projeto opensource que fornece um Runtime pronto para PHP no AWS Lambda, além de integração com frameworks (Laravel, Symfony). Com ele, você pode escrever handlers de eventos, endpoints de API ou até aplicações web completas operando em modo serverless.
Componentes principais para executar PHP no Lambda:
- Bref Runtime — uma camada contendo o interpretador PHP e as extensões necessárias.
- Evento (Event) — o gatilho que aciona a função (requisição HTTP, upload de arquivo no S3, alteração no DynamoDB).
- Handler — a função PHP ou método de classe que recebe e processa o evento.
Configuração do ambiente e primeiro exemplo
Para trabalhar, precisaremos de Composer, Docker (para build) e uma conta AWS. Vamos instalar o Bref:
composer require bref/brefO Bref usa uma imagem Docker para testes locais e build. Após a instalação, criaremos o arquivo serverless.yml — a configuração para deploy no AWS Lambda.
Exemplo de configuração serverless.yml:
service: my-php-function
provider: name: aws region: us-east-1 runtime: provided.al2
plugins: - ./vendor/bref/bref
functions: hello: handler: index.php layers: - ${bref:layer.php-81} events: - httpApi: 'GET /hello'Agora vamos escrever o handler mais simples — o arquivo index.php:
<?php
require __DIR__ . '/vendor/autoload.php';
return function ($event) { $name = $event['queryStringParameters']['name'] ?? 'World'; return [ 'statusCode' => 200, 'body' => "Hello, $name!", ];};Este código retorna uma resposta JSON com uma saudação. Para executar localmente, use o comando:
vendor/bin/bref local helloDeploy e gatilhos: de HTTP a S3
Após o teste local, você pode implantar a função na nuvem. Certifique-se de ter configurado as credentials AWS (via AWS CLI ou variáveis de ambiente). Execute:
serverless deployNo console, você verá a URL do seu API Gateway (se o gatilho HTTP estiver configurado). Agora você pode acessar a função pelo navegador ou curl.
Outros gatilhos populares para funções PHP:
- S3 Events — processamento de upload/remoção de arquivos.
- SQS/SNS — processamento assíncrono de filas de mensagens.
- CloudWatch Events — execução agendada (cron).
- DynamoDB Streams — reação a alterações no