Guia de início rápido: criar e implantar uma função do Cloud em HTTP usando PHP

Criar e implantar uma função do Cloud em HTTP usando PHP

Este guia explica o processo de criação de uma função do Cloud usando o ambiente de execução PHP. Há dois tipos de Cloud Functions:

  • Uma função HTTP, que você invoca a partir de solicitações HTTP padrão.
  • Uma função direcionada a eventos, que você usa para processar eventos da infraestrutura do Cloud, como mensagens em um tópico do Cloud Pub/Sub ou alterações em um bucket do Cloud Storage.

O exemplo mostra como criar uma função HTTP simples.

.

Estrutura do guia

  1. Como criar um projeto do Google Cloud usando a CLI gcloud
  2. Como criar uma função
  3. Como especificar dependências
  4. Como criar e testar localmente
  5. Como implantar a função
  6. Como testar a função implantada

Como criar um projeto do Google Cloud usando a CLI gcloud

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs Cloud Functions and Cloud Build.

    Ative as APIs

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative as APIs Cloud Functions and Cloud Build.

    Ative as APIs

  8. Instale e inicialize a CLI gcloud.
  9. Atualize e instale os componentes gcloud:
    gcloud components update
  10. Prepare seu ambiente de desenvolvimento.

    Acessar "Como usar o PHP no Google Cloud"

Como criar uma função

  1. Crie um diretório no seu sistema local para o código de função:

    Linux ou macOS

    mkdir ~/helloworld_http
    cd ~/helloworld_http
    

    Windows

    mkdir %HOMEPATH%\helloworld_http
    cd %HOMEPATH%\helloworld_http
    
  2. Crie um arquivo index.php no diretório helloworld_http com o seguinte conteúdo:

    <?php
    
    use Google\CloudFunctions\FunctionsFramework;
    use Psr\Http\Message\ServerRequestInterface;
    
    // Register the function with Functions Framework.
    // This enables omitting the `FUNCTIONS_SIGNATURE_TYPE=http` environment
    // variable when deploying. The `FUNCTION_TARGET` environment variable should
    // match the first parameter.
    FunctionsFramework::http('helloHttp', 'helloHttp');
    
    function helloHttp(ServerRequestInterface $request): string
    {
        $name = 'World';
        $body = $request->getBody()->getContents();
        if (!empty($body)) {
            $json = json_decode($body, true);
            if (json_last_error() != JSON_ERROR_NONE) {
                throw new RuntimeException(sprintf(
                    'Could not parse body: %s',
                    json_last_error_msg()
                ));
            }
            $name = $json['name'] ?? $name;
        }
        $queryString = $request->getQueryParams();
        $name = $queryString['name'] ?? $name;
    
        return sprintf('Hello, %s!', htmlspecialchars($name));
    }
    

    Esse exemplo de função recebe um nome fornecido na solicitação HTTP e retorna uma saudação, ou "Hello World!", quando nenhum nome é fornecido.

Como especificar dependências

Use o Composer (em inglês) para gerenciar dependências em PHP. Se você ainda não tiver o Composer instalado, faça o seguinte:

  1. Faça o download do Composer em qualquer local que você escolher.

  2. Depois de fazer o download, mova o arquivo composer.phar para um diretório que esteja no caminho do sistema. Por exemplo:

    mv composer.phar /usr/local/bin/composer
    

Em seguida, especifique as dependências da função:

  1. Adicione um arquivo composer.json contendo dependências ao diretório de código da função, em que FUNCTION_TARGET=FUNCTION_NAME indica o nome da função. Neste exemplo, FUNCTION_NAME é helloHttp:

    {
        "require": {
            "php": ">= 7.4",
            "google/cloud-functions-framework": "^1.1"
        },
        "scripts": {
            "start": [
               "Composer\\Config::disableProcessTimeout",
               "FUNCTION_TARGET=helloHttp php -S localhost:${PORT:-8080} vendor/google/cloud-functions-framework/router.php"
            ]
        }
    }
    
  2. No diretório que contém o código da função (que também precisa conter o arquivo composer.json que você acabou de criar), execute o seguinte comando:

    composer require google/cloud-functions-framework
    

    Isso adiciona o Functions Framework ao seu composer.json e cria um diretório vendor/ no diretório de código da função que contém as dependências.

Como criar e testar localmente

Depois de concluir as etapas em Como especificar dependências, será possível criar e testar sua função localmente.

O comando a seguir cria um servidor da Web local executando a função helloHttp:

export FUNCTION_TARGET=helloHttp
php -S localhost:8080 vendor/bin/router.php

Se a função for criada com sucesso, ela exibirá um URL. Acesse este URL com seu navegador da Web: http://localhost:8080/. Você verá uma mensagem Hello World!.

Como alternativa, envie solicitações para essa função usando curl de outra janela de terminal:

curl localhost:8080
# Output: Hello World!

Como implantar a função

Para implantar a função com um gatilho HTTP, execute o seguinte comando no diretório helloworld_http:

gcloud functions deploy helloHttp --runtime php82 --trigger-http --allow-unauthenticated

A flag --allow-unauthenticated permite que você atinja a função sem autenticação. Para exigir autenticação, omita a sinalização.

Como testar a função implantada

  1. Quando a implantação da função estiver concluída, anote a propriedade httpsTrigger.url ou encontre-a usando o seguinte comando:

    gcloud functions describe helloHttp
    

    A aparência será semelhante a esta:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloHttp
  2. Visite este URL no navegador. Você verá uma mensagem "Hello World!".

    Tente transmitir um nome na solicitação HTTP, conforme mostrado neste URL de exemplo:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloHttp?name=NAME

    Você verá uma mensagem "Hello NAME!"

Como visualizar registros

Como usar a ferramenta de linha de comando

Os registros do Cloud Functions são visíveis na IU do Cloud Logging e na Google Cloud CLI.

Para ver os registros da função com a gccloud CLI, use o comando gcloud logs read, seguido pelo nome da função:

gcloud functions logs read helloHttp

A saída será semelhante a esta:

LEVEL  NAME       EXECUTION_ID  TIME_UTC                 LOG
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:25.983  Function execution started
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:26.001  Function execution took 19 ms, finished with status code: 200

Como usar o painel do Logging

Também é possível ver os registros do Cloud Functions no console do Google Cloud.