Introdução: Por que Serverless e PHP não são um oximoro
Por muito tempo, acreditou-se que PHP e arquitetura serverless eram incompatíveis. O PHP era associado a processos eternos do Apache ou Nginx, enquanto serverless era associado a Node.js ou Python. No entanto, com o surgimento de ferramentas como Bref e o suporte oficial a ambientes de execução personalizados (Custom Runtimes) no AWS Lambda, o PHP ganhou um novo fôlego.
As funções Serverless permitem executar código PHP sem gerenciar servidores. Você paga apenas pelo tempo de execução real (com precisão de milissegundos). Esta é a solução ideal para:
- Manipuladores de webhooks (Telegram, Stripe, Slack);
- Microsserviços com baixa carga;
- Tarefas periódicas (cron) via CloudWatch Events;
- Proxies de API e backends leves.
Neste artigo, vamos detalhar como configurar PHP no AWS Lambda do zero: desde a criação de funções IAM até o deploy de uma função funcional.
1. Arquitetura PHP no AWS Lambda
Como funciona o Custom Runtime
O AWS Lambda suporta nativamente apenas Java, Go, PowerShell, Node.js, C#, Python e Ruby. Para executar PHP, usamos um Custom Runtime — um arquivo executável especial (bootstrap) que se comunica com a Lambda Runtime API.
A maneira mais popular é o framework Bref. Ele vem com uma camada (Layer) pronta contendo PHP 8.x, Composer e um conjunto de extensões padrão.
// Estrutura do projeto para Brefproject/├── index.php // Ponto de entrada├── composer.json├── serverless.yml // Configuração de deploy└── vendor/Três formas de deploy
- Bref (recomendado) — o mais simples. Usa serverless.yml e camadas prontas.
- Compilação manual — você compila o PHP para Amazon Linux 2 e empacota em ZIP.
- Imagem Docker — você usa Lambda Container Image (suportado desde 2020).
Vamos considerar a primeira opção — ela atende 90% dos casos.
2. Configuração passo a passo: da instalação à primeira requisição
Passo 1. Preparação do ambiente
Certifique-se de ter instalado:
- PHP 8.0+ (localmente)
- Composer
- Node.js e npm (para Serverless Framework)
- Utilitário
aws-clicom credentials configuradas
Instale o Serverless Framework globalmente:
npm install -g serverlessPasso 2. Crie o projeto
composer create-project bref/bref my-php-lambdacd my-php-lambdaApós a inicialização, você verá o arquivo serverless.yml. Vamos editá-lo:
service: my-php-app
provider: name: aws region: eu-central-1 # Escolha a região mais próxima runtime: provided.al2 # Amazon Linux 2
plugins: - ./vendor/bref/bref
functions: hello: handler: index.php description: 'Função PHP simples' layers: - ${bref:layer.php-80} # Camada com PHP 8.0Passo 3. Escreva a função
Abra o arquivo index.php:
<?php
require __DIR__ . '/vendor/autoload.php';
/** * Manipulador da função Lambda * @param array $event Dados de entrada do AWS (API Gateway, SQS, etc.) * @return array Resposta em formato JSON */function handler(array $event): array{ // Registra no CloudWatch error_log('Requisição recebida: ' . json_encode($event));
$name = $event['queryStringParameters']['name'] ?? 'Convidado';
return [ 'statusCode' => 200, 'headers' => [ 'Content-Type' => 'application/json', ], 'body' => json_encode([ 'message' => "Olá, {$name}!", 'timestamp' => time(), ]), ];}