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

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

Esse documento explica o processo de criação de uma função HTTP simples do Cloud Functions. Veja a seguir um dos dois tipos de Cloud 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. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run e 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. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run e 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": "^8.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.

Ver 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 Functions e clique no nome da função na lista. Em seguida, clique na guia Registros.