PHP e Serverless: uma união que você não esperava
\n\nQuando ouvimos "Serverless" (ou "computação sem servidor"), a primeira associação é JavaScript, Python ou Go. O PHP nesse contexto parece um "dinossauro" que ficou preso na era das hospedagens compartilhadas e WordPress monolíticos. Mas vamos encarar a verdade: o PHP está vivo, saudável e mais flexível do que você imagina.
\n\nHoje vamos analisar como executar código PHP no AWS Lambda e suas alternativas. Você descobrirá por que o serverless PHP não é mágica, mas sim uma ferramenta funcional para APIs, manipuladores de webhooks e microsserviços. Spoiler: você não precisará abandonar sua linguagem favorita.
\n\nO que é Serverless na prática?
\n\nVamos desfazer o mito imediatamente. "Serverless" não significa "sem servidor". Significa que você não precisa se preocupar com o servidor. A plataforma (AWS, Google Cloud, Vercel) gerencia a infraestrutura: escala, atualiza, corrige. Você apenas envia o código e paga pelo tempo de execução.
\n\nPara o PHP, isso parece um desafio. Afinal, o PHP tradicionalmente requer um servidor web (Apache, Nginx) e o módulo PHP-FPM. Mas a tecnologia não para.
\n\nComo o PHP funciona em um ambiente serverless?
\n\nO problema principal: as funções Lambda (e suas alternativas) são contêineres stateless que duram alguns segundos ou minutos. Elas não "mantêm" sessão na memória, nem executam o Apache. Portanto, um script PHP padrão que espera $_GET ou escreve em $_SESSION precisa ser adaptado.
A solução veio na forma de runtimes especiais. Eles transformam um evento Lambda (por exemplo, uma requisição HTTP do API Gateway) em um contexto PHP familiar. A ferramenta mais popular para isso é o Bref.
\n\nBref: motor PHP para AWS Lambda
\n\nBref é um projeto open-source que permite executar PHP no AWS Lambda "pronto para uso". Ele vem com camadas (layers) prontas que incluem PHP 8.x e extensões populares (PDO, Redis, gd, mbstring).
\n\nInstalação e primeira execução
\n\nPara trabalhar, você precisará de:
\n- \n
- Uma conta AWS \n
composereaws-cliinstalados \n - Node.js (para o Serverless Framework) \n
Vamos criar uma função simples que retorna um JSON com a hora atual:
\n\n// index.php\n<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Bref\\Context\\Context;\nuse Bref\\Event\\Http\\HttpHandler;\n\nclass TimeHandler extends HttpHandler\n{\n public function handleRequest($request, Context $context): array\n {\n return [\n 'statusCode' => 200,\n 'headers' => ['Content-Type' => 'application/json'],\n 'body' => json_encode([\n 'server_time' => date('Y-m-d H:i:s'),\n 'php_version' => PHP_VERSION,\n 'message' => 'Hello from Serverless PHP!'\n ]),\n ];\n }\n}\n\nreturn new TimeHandler();\n\nAgora vamos configurar o deploy. Crie o arquivo serverless.yml:
# serverless.yml\nservice: php-time-api\n\nprovider:\n name: aws\n region: eu-central-1\n runtime: provided.al2\n\nplugins:\n - ./vendor/bref/bref\n\nfunctions:\n api:\n handler: index.php\n timeout: 28\n layers:\n - ${bref:layer.php-81}\n events:\n - httpApi: 'GET /time'\n\nExecute o deploy:
\ncomposer require bref/bref\nserverless deploy\n\nEm um minuto, você receberá uma URL como: https://xxx.execute-api.eu-central-1.amazonaws.com/time. Abra no navegador — você verá o JSON. Parabéns, você acabou de executar uma função serverless PHP no AWS Lambda!
Alternativas ao AWS Lambda para PHP
\n\nNão quer se prender à AWS? Existem alternativas que também funcionam com PHP.
\n\nGoogle Cloud Functions (com adaptação)
\n\nO Google não oferece suporte nativo ao PHP, mas você pode