Criar e implantar uma função do Cloud Run em HTTP com o Node.js

Esse documento explica o processo de criação de uma função HTTP simples do Cloud Run functions. Veja a seguir um dos dois tipos de Cloud Run functions:

  • Uma função HTTP, que você invoca a partir de solicitações HTTP padrão.
  • Uma função orientada a eventos, que é acionada por eventos em sua infraestrutura do Cloud, como mensagens em um tópico do Pub/Sub ou alterações em um bucket do Cloud Storage.

Para mais detalhes, leia Como escrever funções HTTP e Como escrever funções orientadas a eventos.

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, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging 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, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

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

    Acessar o guia de configuração do Node.js

Criar a função

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

    Linux ou macOS

    mkdir ~/helloworld
    cd ~/helloworld
    

    Windows

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

    const functions = require('@google-cloud/functions-framework');
    
    // Register an HTTP function with the Functions Framework that will be executed
    // when you make an HTTP request to the deployed function's endpoint.
    functions.http('helloGET', (req, res) => {
      res.send('Hello World!');
    });

    Esta função de exemplo retorna um "Hello World!" animado a todas as solicitações.

Especificar as dependências

Dependências no Node.js são gerenciadas com npm e expressas em um arquivo de metadados chamado package.json. É possível criar esse arquivo manualmente ou com o comando npm.

  • Para criar o arquivo package.json com o comando npm:

    1. Execute o comando npm init no diretório helloworld. Pressione Enter para aceitar a resposta padrão às perguntas.

      npm init
      
    2. Edite o arquivo package.json para adicionar uma dependência de framework de funções:

      "dependencies": {
        "@google-cloud/functions-framework": "^3.1.0"
      }
      
  • Se você preferir criar o arquivo package.json manualmente, copie o seguinte conteúdo para ele:

{
  "name": "nodejs-docs-samples-functions-hello-world-get",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git"
  },
  "engines": {
    "node": ">=16.0.0"
  },
  "scripts": {
    "test": "c8 mocha -p -j 2 test/*.test.js --timeout=6000 --exit"
  },
  "dependencies": {
    "@google-cloud/functions-framework": "^3.1.0"
  },
  "devDependencies": {
    "c8": "^10.0.0",
    "gaxios": "^6.0.0",
    "mocha": "^10.0.0",
    "wait-port": "^1.0.4"
  }
}

Muitas bibliotecas de cliente do Node.js estão disponíveis para uso com produtos do Google Cloud e podem ser instaladas como dependências.

Criar e testar a função localmente

Para testar a função localmente antes de implantá-la, instale o Functions Framework localmente e execute a função.

  1. Execute o seguinte comando no diretório helloworld para instalar o Functions Framework na máquina local:

    npm install @google-cloud/functions-framework
    
  2. Execute este comando no diretório helloworld para executar a função localmente:

    npx @google-cloud/functions-framework --target=helloGET
    
  3. Acesse http://localhost:8080 em um navegador ou execute curl localhost:8080 em outra janela para testar sua função.

    Saiba mais em Como enviar solicitações para funções locais.

A função retorna a mensagem "Hello World!".

implante a função

Para implantar a função, execute o comando gcloud functions deploy no diretório helloworld:

gcloud functions deploy hello-node-function \
  --gen2 \
  --runtime=nodejs20 \
  --region=REGION \
  --source=. \
  --entry-point=helloGET \
  --trigger-http \
  --allow-unauthenticated

Substitua REGION pelo nome da região do Google Cloud em que você quer implantar a função (por exemplo, us-west1).

Isso implanta a função de amostra com o ambiente de execução nodejs20 na região escolhida.

A flag --allow-unauthenticated opcional permite que você acesse a função sem autenticação.

Testar a função implantada

  1. Depois que a função for implantada, observe a propriedade uri na saída do comando gcloud functions deploy ou recupere-a com o seguinte comando:

      gcloud functions describe hello-node-function \
        --region=REGION
    

    Substitua REGION pelo nome da região do Google Cloud em que você implantou a função (por exemplo, us-west1).

  2. Acesse este URL no navegador ou com o seguinte comando curl:

    curl FUNCTION_URL
    

    Substitua FUNCTION_URL pela propriedade uri que você acabou de recuperar.

    A função retorna uma mensagem "Hello World!".

Ver os registros da função

Conferir os registros com a ferramenta de linha de comando

É possível analisar os registros da função com a IU do Cloud Logging ou usando a Google Cloud CLI.

Para ver os registros da função com a CLI gcloud, use o comando gcloud functions logs read:

    gcloud functions logs read \
      --gen2 \
      --region=REGION \
      --limit=10 \
      hello-node-function

Substitua REGION pelo nome da região do Google Cloud em que você implantou a função (por exemplo, us-west1).

A saída será assim:

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:42:24.956
LOG:

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:42:01.692
LOG:

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:31:47.711
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello--node--function-1" on port 8080.

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:31:46.542
LOG:

LEVEL: I
NAME: hello-node-function
TIME_UTC: 2023-06-16 18:31:27.390
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello--node--function-1" on port 8080.

Conferir os registros com o painel do Logging

Para ver os registros da função com o painel do Logging, abra a página de visão geral do Cloud Run functions e clique no nome da função na lista. Em seguida, clique na guia Registros.