Guia de início rápido: criar e implantar uma função do Cloud em HTTP usando o Ruby

Criar e implantar uma função do Cloud em HTTP usando 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 Cloud Functions:

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

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

.

Estrutura do guia

  1. Como criar um projeto do GCP usando a CLI gcloud
  2. Como criar uma função
  3. Como especificar dependências
  4. Como criar e testar localmente
  5. Como implantar a função
  6. Como testar a função implantada

Como criar um projeto do GCP usando a CLI gcloud

  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 o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  4. Ative as APIs Cloud Functions and Cloud Build.

    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 o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  7. Ative as APIs Cloud Functions and Cloud Build.

    Ative as APIs

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

    Acessar o guia de configuração do Ruby

Como criar 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"] ||
             (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.

Como especificar 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
.

Como criar e testar localmente

Antes de implantar a função, é possível criá-la e testá-la localmente: Execute o comando a seguir para usar o executável functions-framework-ruby para ativar um servidor da Web local que executa a 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!

Como 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 --runtime ruby30 --trigger-http --allow-unauthenticated

A sinalização --allow-unauthenticated permite que você atinja a função sem autenticação. Para exigir autenticação, omita a sinalização.

Como testar a função implantada

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

Como visualizar registros

Como usar a ferramenta de linha de comando

Os registros do Cloud Functions são visíveis na IU do Cloud Logging e na Google Cloud CLI.

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

Como usar o painel do Logging

Você também pode ver os registros do Cloud Functions no Console do Cloud.