Criar e implantar uma função do Cloud HTTP com o Ruby

Criar e implantar uma função do Cloud HTTP com o Ruby

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

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

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

Antes de começar

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

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

    Ative as APIs

  8. Instale e inicialize o Google Cloud SDK.
  9. Atualize e instale os componentes gcloud com o comando a seguir.
    gcloud components update
  10. Prepare seu ambiente de desenvolvimento.

    Acessar o guia de configuração do Ruby

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 app.rb no diretório helloworld com o seguinte conteúdo:

    require "functions_framework"
    require "cgi"
    require "json"
    
    FunctionsFramework.http "hello_http" do |request|
      # The request parameter is a Rack::Request object.
      # See https://www.rubydoc.info/gems/rack/Rack/Request
      name = request.params["name"] ||
             (request.body.rewind && JSON.parse(request.body.read)["name"] rescue nil) ||
             "World"
      # Return the response body as a string.
      # You can also return a Rack::Response object, a Rack response array, or
      # a hash which will be JSON-encoded into a response.
      "Hello #{CGI.escape_html name}!"
    end

    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

Dependências no Ruby são gerenciadas com o Bundler (em inglês) e expressas em um arquivo chamado Gemfile.

Quando você implanta a função, o Cloud Functions faz o download e instala as dependências declaradas em Gemfile e Gemfile.lock usando bundler.

O Gemfile lista os pacotes exigidos pela função, além das restrições de versão opcionais. Para uma função do Cloud, um desses pacotes precisa ser o gem functions_framework.

Neste exercício, crie um arquivo chamado Gemfile no mesmo diretório que o app.rb que contém o código da função, com o seguinte conteúdo:

source "https://rubygems.org"
gem "functions_framework", "~> 0.7"

Execute o seguinte comando para instalar o gem functions_framework e outras dependências:

bundle install
.

Criar e testar a função localmente

Antes de implantar a função, é possível criá-la e testá-la localmente.

  1. Execute o seguinte comando para usar o executável functions-framework-ruby para iniciar um servidor da Web local executando sua função hello_http:

    bundle exec functions-framework-ruby --target hello_http
    
  2. 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.

Consulte também Como testar funções na documentação do framework de funções do Ruby.

implante a função

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

  gcloud functions deploy ruby-http-function \
    --gen2 \
    --runtime=ruby32 \
    --region=REGION \
    --entry-point=hello_http \
    --source=. \
    --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).

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 ruby-http-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. A função retorna uma mensagem "Hello World!".

Conferir os registros da função

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

Conferir os registros com a ferramenta de linha de comando

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

    gcloud functions logs read \
      --gen2 \
      --limit=10 \
      --region=REGION \
      ruby-http-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-http
TIME_UTC: 2023-06-01 00:09:41.477
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello__http-1" on port 8080.

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.451
LOG: I, [2023-06-01T00:09:41.451784 #1]  INFO -- : FunctionsFramework: Serving function "hello_http" on port 8080...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.364
LOG: I, [2023-06-01T00:09:41.363923 #1]  INFO -- : FunctionsFramework: Starting server...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.363
LOG: I, [2023-06-01T00:09:41.363855 #1]  INFO -- : FunctionsFramework: Looking for function name "hello_http"...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.354
LOG: I, [2023-06-01T00:09:41.354150 #1]  INFO -- : FunctionsFramework: Loading functions from "./app.rb"...

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