Criar e implantar uma função HTTP do Cloud Run usando PHP (1ª geração)

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

  • 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 Pub/Sub ou alterações em um bucket do Cloud Storage.

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

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

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

    Começar a usar PHP

crie 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.

Especificar as 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": ">= 8.1",
            "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.

Criar e testar localmente

Depois de concluir as etapas em 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!

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 --no-gen2 --runtime php83 --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.

Testar a função de implantação

  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!"

Ver registros

Os registros do Cloud Run functions são visíveis usando a CLI do Google Cloud e na interface do Cloud Logging.

Usar a ferramenta de linha de comando

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

Usar o painel do Logging

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