Criar e implantar uma função HTTP do Cloud Run usando Ruby (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 Ruby. 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.

    Acessar o guia de configuração do Ruby

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
    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 sua função, as funções do Cloud Run faz o download e instala as dependências declaradas em Gemfile e Gemfile.lock usando bundler.

O Gemfile lista os pacotes obrigatórios para a função junto com as restrições de versão opcionais. Para uma função do Cloud Run, 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 localmente

Antes de implantar a função, é possível criá-la e testá-la localmente: 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
# ...starts the web server in the foreground

Se a função for criada com sucesso, ela exibirá o URL que você pode visitar no navegador da Web para ver a função em ação: 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!

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

implantar a função

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

gcloud functions deploy hello_http --no-gen2 --runtime ruby33 --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 hello_http
    

    A aparência será semelhante a esta:

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

    Tente passar um nome na solicitação HTTP, por exemplo, usando este URL:

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

    Você verá uma mensagem "Hello NAME!"

Ver registros

É possível visualizar os registros de funções do Cloud Run na UI do Cloud Logging ou na CLI do Google Cloud.

Conferir os registros com a ferramenta de linha de comando

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

gcloud functions logs read hello_http

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

Ver registros no painel do Logging

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