Implantar no AWS Lambda com o BRef
Visão geral
Ref permite implantar PHP aplicativos sem servidor no Amazon Web Services Lambda. Neste tutorial, você implantará um aplicativo PHP simples com a extensão MongoDB PHP e se conectará a um cluster Atlas usando a autenticação IAM do Amazon Web Services.
Pré-requisitos
Para implantar no AWS Lambda usando breve, você deve ter os seguintes componentes configurados:
Conta do Amazon Web Services com chaves de acesso
Framework sem servidor
Para saber como configurá-los, siga o Tutorial de configuração na documentação oficial da bref.
Instalar a extensão MongoDB
A bref usa camadas lambda para fornecer o tempo de execução do PHP. A camada bref
é compilada com PHP e algumas extensões. Outras extensões, como mongodb
, estão disponíveis em camadas adicionais.
Comece criando um novo diretório para seu projeto e instale as dependências MongoDB e bref necessárias.
$ mkdir bref-mongodb-app && cd bref-mongodb-app $ composer init $ composer require bref/bref bref/extra-php-extensions mongodb/mongodb
Em seguida, inicialize a configuração sem servidor usando o comando bref
.
$ vendor/bin/bref init
Após esta série de comandos, você deve ter estes arquivos:
composer.json
para dependências PHP instaladas no diretóriovendor
index.php
uma página da web de exemploserverless.yml
para a configuração do sistema
Para validar sua configuração, tente implantar este aplicativo padrão. Isso gera um URL que renderiza uma página da web com o logotipo BRF:
$ serverless deploy
Agora que inicializou o projeto, você adicionará a mongodb
extensão . Localize o nome "Configuração sem servidor" na lista de extensões fornecidas por bref/extra-php-extention. Adicione ao layers
da função em serverless.yaml
, este arquivo ficará assim:
plugins: - ./vendor/bref/bref - ./vendor/bref/extra-php-extensions functions: api: handler: index.php runtime: php-83-fpm layers: - ${bref-extra:mongodb-php-83}
Vamos usar o driver do MongoDB com uma página da Web que liste os planetas do conjunto de dados de exemplo do Atlas. Substitua o conteúdo de index.php
pelo seguinte:
use MongoDB\Client; require_once __DIR__ . '/vendor/autoload.php'; $uri = getenv('MONGODB_URI'); try { $client = new Client($uri); $planets = $client ->selectCollection('sample_guides', 'planets') ->find([], ['sort' => ['orderFromSun' => 1]]); } catch (Throwable $exception) { exit($exception->getMessage()); } <!DOCTYPE html> <html lang="en"> <head> <title>MongoDB Planets</title> </head> <body> <ul> foreach ($planets as $planet) : <li>$planet->name </li> endforeach </ul> </body> </html>
Reimplante o aplicativo com o novo index.php
:
$ serverless deploy
O aplicativo exibirá uma mensagem de erro porque a variável de ambiente do MONGODB_URI
ainda não foi definida. Veremos como definir essa variável na próxima seção.
Credenciais AWS
O Atlas permite autenticação sem senha com credenciais da AWS. Em qualquer função do Lambda, a AWS define variáveis de ambiente que contêm o token de acesso e o token secreto com a função atribuída à função distribuída.
Abra a função Lambda no console do Amazon Web Services
Em Configuration > Permission, copie o Role name
Adicione esta função ao seu cluster Atlas com a função integrada: "Leia e escreva qualquer banco de dados"
Para saber como configurar o acesso unificado da AWS, consulte Configurar o acesso unificado da AWS na documentação do MongoDB Atlas.
Agora que as permissões foram configuradas, a função Lambda tem permissão para acessar seu cluster Atlas. Você pode configurar seu aplicativo com o endpoint Atlas.
O acesso aos clusters do Atlas também é restrito pelo endereço IP. Como o intervalo de IP fornecido com a Amazon Web Services é muito amplo, você pode permitir o acesso de qualquer lugar.
Observação
O uso de emparelhamento VPC é recomendado para isolar seu Atlas cluster da Internet. Isso exige que a função Lambda seja implantada nessa VPC do Amazon Web Services.
Encontre o URI de conexão na UI Atlas > Deployment > Database > Connect do Atlas. Selecione 3. AWS IAM. Remova a parte <AWS access key>:<AWS secret key>
do URI, as credenciais serão lidas a partir das variáveis de ambiente.
Atualize o arquivo serverless.yml
para passar a variável de ambiente MONGODB_URI
.
provider: environment: MONGODB_URI: "mongodb+srv://cluster0.example.mongodb.net/?authSource=%24external&authMechanism=MONGODB-AWS&retryWrites=true&w=majority"
Finalmente, implemente com a nova configuração. Após a conclusão da implantação, você pode acessar o URL da função e ver a lista de planetas do seu Atlas cluster.
$ serverless deploy