Serverless em PHP: AWS Lambda e alternativas para backend sem servidor

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

PHP sem servidor: mito ou realidade?

\n\n

Quando se ouve a expressão "Funções Serverless", a primeira associação geralmente é Node.js ou Python. O PHP parece um monólito que vive no eterno Apache ou Nginx. Mas os tempos estão mudando. Hoje, PHP em arquitetura serverless não é exótico, mas sim uma ferramenta de trabalho para milhares de projetos. Você pode escrever microsserviços, processar webhooks, redimensionar imagens e até executar APIs completas, sem se preocupar com servidores, escalabilidade e pagamento por recursos ociosos.

\n\n

Neste artigo, vamos explorar como funciona o PHP no AWS Lambda, quais são as alternativas (Bref, OpenFaaS, Vercel) e, principalmente, escrever código real que pode ser executado imediatamente. Se você é desenvolvedor PHP e quer dar um passo em direção ao desenvolvimento moderno em nuvem, está no lugar certo.

\n\n

O que é Serverless e por que um desenvolvedor PHP precisa disso?

\n\n

Serverless (ou FaaS — Functions as a Service) é um modelo onde você envia seu código, e o provedor decide quando e como executá-lo. Você paga apenas pelo tempo real de execução. Sem máquinas virtuais, sem "Apache" consumindo memória 24/7. Para o PHP, que por muito tempo foi considerado "a linguagem para hospedagem com FTP", isso é um sopro de ar fresco.

\n\n

Vantagens para projetos PHP:

\n
    \n
  • Economia — não é necessário manter um servidor inteiro para um único script.
  • \n
  • Autoescalabilidade — o Lambda cria cópias da função automaticamente quando a carga aumenta.
  • \n
  • Simplicidade de implantação — envie o código e ele funciona.
  • \n
  • Abordagem de microsserviços — é possível dividir um monólito em funções menores.
  • \n
\n\n

Problema: PHP nativamente não sabe ser Serverless

\n\n

O PHP clássico não é um daemon. Ele é iniciado, executa o script e morre. Para o Lambda, isso é um problema: a função precisa ser "fria" e iniciar em milissegundos. O PHP normal inicia lentamente (carregamento do framework, autoload, configurações). A solução é o Bref.

\n\n

Bref — a principal ferramenta para Serverless PHP

\n\n

Bref é um SDK e runtime open-source que transforma o PHP em uma função Lambda nativa. Ele compila o PHP em um binário estático (através de bref/bref), proporcionando uma inicialização a frio instantânea. O Bref suporta Laravel, Symfony, Slim e qualquer código personalizado.

\n\n

Como o Bref funciona?

\n

Você escreve uma classe PHP comum, implementa a interface Bref\\Context\\Context, e o Bref cuida do processamento HTTP. Para uma API, basta uma função.

\n\n

Exemplo: API Serverless em PHP para gerar QR Codes

\n

Suponha que precisamos receber uma requisição POST com um texto e retornar um QR Code no formato PNG. Escrevemos a função:

\n\n
<?php\n// handler.php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Bref\\Context\\Context;\nuse Bref\\Event\\Http\\HttpHandler;\nuse chillerlan\\QRCode\\QRCode;\nuse chillerlan\\QRCode\\QROptions;\n\nclass QrGenerator extends HttpHandler\n{\n    public function handleRequest($request, Context $context): array\n    {\n        $body = json_decode($request->getBody()->getContents(), true);\n        $text = $body['text'] ?? 'Hello, Serverless!';\n        \n        $options = new QROptions([\n            'outputType' => QRCode::OUTPUT_IMAGE_PNG,\n            'imageBase64' => false,\n        ]);\n        \n        $qrcode = new QRCode($options);\n        $imageData = $qrcode->render($text);\n        \n        return [\n            'headers' => ['Content-Type' => 'image/png'],\n            'statusCode' => 200,\n            'body' => base64_encode($imageData),\n            'isBase64Encoded' => true,\n        ];\n    }\n}\n\nreturn new QrGenerator();
\n\n

Implantação no AWS Lambda via Bref

\n

Instale o Bref CLI e execute:

\n
composer require bref/bref\n./vendor/bin/bref init\n./vendor/bin/bref deploy
\n

Pronto. Em um minuto, você terá um endpoint HTTPS,

Blogs

Book Recommendations