Introdução: por que Serverless e PHP?
\n\nPor muito tempo, acreditou-se que PHP e computação serverless eram incompatíveis. No entanto, com o surgimento dos runtimes personalizados do AWS Lambda e o desenvolvimento de ferramentas como Bref, a situação mudou drasticamente. Hoje, você pode executar aplicações PHP em uma infraestrutura totalmente gerenciada do AWS Lambda, pagando apenas pelo tempo real de execução do código.
Neste artigo, vamos abordar como criar, configurar e implantar uma função Serverless em PHP usando AWS Lambda. Você aprenderá sobre conceitos-chave, problemas típicos e melhores práticas. O material é voltado para desenvolvedores PHP familiarizados com os fundamentos da AWS, mas tentaremos explicar tudo da forma mais detalhada possível.
\n\nAo final do guia, você será capaz de executar seu primeiro endpoint PHP na nuvem sem um único servidor dedicado.
\n\n1. Arquitetura do PHP Serverless no AWS Lambda
\n\n1.1. Como o AWS Lambda executa PHP?
\n\nO ambiente nativo do Lambda não suporta PHP diretamente. Para executar código PHP, é usada uma camada especial — o Custom Runtime. Ele consiste em um arquivo executável (geralmente em Python ou Bash) que inicia o interpretador PHP, passa o evento (event) e retorna o resultado.
\n\nA ferramenta mais popular para isso é o Bref (Bare-metal PHP for AWS Lambda). Ele fornece uma imagem PHP pronta com configurações otimizadas para o ambiente serverless.
\n\nO processo básico é o seguinte:
\n- \n
- O cliente envia uma requisição HTTP para o API Gateway. \n
- O API Gateway converte a requisição em um evento JSON e o encaminha para o Lambda. \n
- O Lambda inicia o Custom Runtime, que inicializa o PHP-FPM. \n
- O script PHP processa o evento e retorna a resposta. \n
1.2. Componentes-chave da stack
\n- \n
- AWS Lambda — unidade de computação. \n
- API Gateway — interface HTTP para chamar a função. \n
- Bref — runtime PHP para Lambda. \n
- Serverless Framework (opcional) — ferramenta para deploy. \n
- Amazon S3 / DynamoDB — armazenamento de dados (se necessário). \n
2. Configuração passo a passo: do projeto ao deploy
\n\n2.1. Instalação das ferramentas
\nPara trabalhar, você precisará de:
\n- \n
- PHP 8.1+ com as extensões
mbstring,curl,json. \n - Composer — gerenciador de dependências. \n
- Node.js e npm (para o Serverless Framework). \n
- Uma conta AWS com um usuário IAM configurado. \n
Instale o Serverless Framework globalmente:
\nnpm install -g serverless\n\n2.2. Criando o projeto com Bref
\nCrie um diretório para o projeto e inicialize-o:
\nmkdir php-lambda-demo\ncd php-lambda-demo\ncomposer require bref/bref\n\nCrie o arquivo index.php — esta será nossa função:
<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nreturn function ($event) {\n $name = $event['queryStringParameters']['name'] ?? 'World';\n \n return [\n 'statusCode' => 200,\n 'headers' => ['Content-Type' => 'text/plain'],\n 'body' => "Hello, {$name}! This is Serverless PHP on AWS Lambda."\n ];\n};\n\nObserve: a função deve retornar um array com as chaves statusCode, headers e body. Este é o formato padrão de resposta para integração com o API Gateway.
2.3. Configuração do serverless.yml
\nCrie o arquivo serverless.yml na raiz do projeto:
service: php-lambda-demo\n\nprovider:\n name: aws\n region: eu-central-1\n runtime: provided.al2\n\nplugins:\n - ./vendor/bref/bref\n\nfunction