https://a.storyblok.com/f/270183/129277/6fb7102e3c/e_aws-lambda_1200x600.png

AWS Lambda com PHP usando Bref e Serverless Framework

Publicado em March 16, 2020

Tempo de leitura: 9 minutos

O uso do PHP em ambientes sem servidor costumava ser um desafio devido à falta de ambientes de execução padrão oferecidos pelos diversos provedores de nuvem. No entanto, isso mudou recentemente com a adição de bibliotecas e funcionalidades, tornando o uso do PHP mais acessível.

Este exemplo criará um função do AWS Lambda para PHP usando o Bref. A adição da API de Runtime do AWS Lambda e a possibilidade de adicionar AWS Lambda Layers facilitaram a criação de um runtime personalizado em PHP. Por isso, surgiram pacotes como o Bref para facilitar a vida dos desenvolvedores de PHP.

Pré-requisitos

Aqui estão os itens de que você vai precisar para este exemplo:

Estrutura sem servidor

O Bref utiliza o Serverless Framework , que é uma “solução completa para criar e operar aplicativos sem servidor”. Portanto, nosso primeiro passo é instalar essa estrutura no sistema de desenvolvimento que você está usando. Recomendamos instalá-la globalmente, para permitir o uso de qualquer lugar por meio da CLI.

npm install -g serverless

Credenciais da AWS

Após instalar o Serverless, certifique-se de também ter configurado as credenciais da AWS necessárias para que o Serverless interaja com os diversos serviços da AWS. (S3, Lambda e, eventualmente, EC2 ou bancos de dados, conforme necessário.) Neste exemplo, usaremos apenas o S3 e o Lambda. Você pode ler mais sobre isso em serverless.com e bref.sh , por isso não entraremos em detalhes aqui.

Instalar o Bref

Você também deve instalar o Bref como dependência em cada projeto que o utilize. Com isso em mente, usaremos o Composer para instalá-lo por meio da CLI, a partir do diretório do projeto.

composer require bref/bref

Início do Projeto Bref

Depois que o Composer concluir a adição do Bref ao projeto, a melhor maneira de começar é init configurar o Bref para uso. Ao fazer isso, init será exibida uma solicitação perguntando se você deseja uma função, HTTP ou função de console, resultando na criação de serverless.yml e, possivelmente, index.php dependendo da sua seleção, que você pode editar para se adequar às necessidades do aplicativo.

vendor/bin/bref init

Exemplo de arquivo YML

A título de exemplo, segue abaixo um arquivo de amostra serverless.yml :

service: app

provider:
    name: aws
    region: us-east-1
    runtime: provided

plugins:
    - ./vendor/bref/bref

functions:
    function:
        handler: index.php
        description: ''
        layers:
            - ${bref:layer.php-73}

# Exclude files from deployment
package:
    exclude:
        - 'tests/**'

No arquivo, observe o nome do serviço, que você pode alterar para se adequar às convenções de nomenclatura desejadas para suas funções. Por padrão, ele se chama app.

Em seguida, podemos ver as informações do provedor do AWS Lambda.

Há uma seção dedicada a plugins e à integração do Bref.

Em seguida, há a seção que descreve os detalhes da função. Estão incluídos o manipulador, a descrição desejada a ser adicionada à AWS e quaisquer camadas necessárias, como PHP. Observe que, no exemplo acima, php-73 está especificado. Se você selecionasse HTTP, por exemplo, isso especificaria php-73-fpm e forneceria um servidor web na camada, em vez de uma versão do PHP apenas para CLI. A imagem a ser usada é o motivo pelo qual o init processo é essencial para garantir que o Lambda crie a camada correta.

Implantação no AWS Lambda

Tanto para casos de uso de Função quanto de HTTP, o padrão init fornece uma estrutura suficiente para fazer a implantação diretamente no AWS Lambda e testar usando o Serverless. Aproveitando a configuração de credenciais da AWS adicionada anteriormente, o Serverless fará a implantação diretamente no Lambda usando o conteúdo de serverless.yml como critérios.

serverless deploy

IMPORTANTE: O aplicativo de exemplo, da forma como está, não possui nenhum mecanismo de autenticação ou verificação. Qualquer pessoa com acesso à URL fornecida após a implantação poderá acessá-lo. Isso pode resultar em cobranças inesperadas em seus Accounts. Portanto, proteja o aplicativo caso pretenda mantê-lo ativo.

Testando a função

No caso de uma função, há duas maneiras de testá-la. Uma delas é usar o Console da AWS, enquanto a segunda é usar o Serverless por meio da CLI do sistema utilizado para a implantação.

Console da AWS

Ao navegar pelo Console da AWS, selecione o item Lambda na lista de serviços de computação.

AWS Console-Lambda DashboardAWS Console-Lambda Dashboard

No painel do Lambda, você pode selecionar a função criada e criar um novo teste clicando em Configure test events. Como alternativa, você pode clicar no Test botão para receber a mesma solicitação.

Lambda Function Create Test ExampleLambda Function Create Test Example

Para testar o esboço criado, adicione um nome e altere ligeiramente o JSON no corpo da mensagem.

Configure Lambda Test EventsConfigure Lambda Test Events

Ao clicar no Create botão na parte inferior da caixa de diálogo, você poderá clicar no Test botão para executar o teste. A execução deve resultar em uma área verde na caixa de diálogo que você pode expandir para exibir os resultados.

Lambda Test ResultsLambda Test Results

Execução de funções sem servidor

Conforme mencionado acima, você também pode usar a CLI do Serverless para testar a função, executando o seguinte comando a partir da raiz do aplicativo local:

serverless invoke -f function --data='{"name": "Adam"}'

Exemplo de resultado:

Serverless Lambda Function ExecutionServerless Lambda Function Execution

Testando uma função HTTP

Se você tivesse implantado uma função HTTP, os dois métodos de teste acima não funcionariam. Nesse caso, você pode usar um cliente HTTP ou um navegador comum para realizar o teste, utilizando a URL fornecida nos resultados da implantação.

E agora?

Depois de criar uma função do AWS Lambda, você pode continuar adicionando mais código e criando aplicativos PHP mais robustos, aproveitando as tecnologias sem servidor disponíveis atualmente. Fique atento às próximas publicações, que mostrarão como criar funções úteis para aproveitar as APIs e os serviços da Vonage usando o AWS Lambda.

Compartilhar:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpEx-funcionários da Vonage

Adam é um desenvolvedor e consultor que gosta de corridas de ultramaratona, escrever em blogs e gravar vlogs, além de ajudar outras pessoas a dominar a tecnologia para realizar coisas incríveis, movido por um desejo insaciável de orientar e ajudar.