
Compartilhar:
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.
AWS Lambda com PHP usando Bref e Serverless Framework
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:
PHP instalado localmente (de preferência, versão 7.3 ou superior)
Account da AWS e chaves de acesso de um usuário com acesso ao AWS S3 , bem como AWS Lambda
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.
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.
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.
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.
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 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 Example
Para testar o esboço criado, adicione um nome e altere ligeiramente o JSON no corpo da mensagem.
Configure 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 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:
Exemplo de resultado:
Serverless 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.