Crie e implemente uma função HTTP do Cloud Run com o Ruby (1.ª geração)

Este guia explica o processo de escrita de uma função do Cloud Run usando o tempo de execução do Ruby. Existem dois tipos de funções do Cloud Run:

  • Uma função HTTP, que invoca a partir de pedidos HTTP padrão.
  • Uma função orientada por eventos, que usa para processar eventos da sua infraestrutura do Google Cloud, como mensagens num tópico Pub/Sub ou alterações num contentor 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions and Cloud Build APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions and Cloud Build APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Aceda ao guia de configuração do Ruby

  11. Crie uma função

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

      Linux ou Mac OS X

      mkdir ~/helloworld
      cd ~/helloworld
      

      Windows

      mkdir %HOMEPATH%\helloworld
      cd %HOMEPATH%\helloworld
      
    2. Crie um ficheiro 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

      Esta função de exemplo recebe um nome fornecido no pedido HTTP e devolve uma saudação ou "Olá, mundo!" quando não é fornecido nenhum nome.

    Especifique dependências

    As dependências no Ruby são geridas com o bundler e expressas num ficheiro denominado Gemfile.

    Quando implementa a sua função, as funções do Cloud Run transferem e instalam as dependências declaradas em Gemfile e Gemfile.lock através do bundler.

    O ficheiro Gemfile lista os pacotes necessários para a sua função, juntamente com quaisquer restrições de versão opcionais. Para uma função do Cloud Run, um destes pacotes tem de ser a gem functions_framework.

    Para este exercício, crie um ficheiro denominado Gemfile no mesmo diretório que o ficheiro 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 a gem functions_framework e outras dependências:

    bundle install
    

    Crie e teste localmente

    Antes de implementar a função, pode criá-la e testá-la localmente. Execute o seguinte comando para usar o executável functions-framework-ruby para iniciar um servidor Web local que execute a 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 êxito, é apresentado o URL que pode visitar no seu navegador de Internet para ver a função em ação: http://localhost:8080/. Deverá ver uma mensagem Hello World!.

    Em alternativa, pode enviar pedidos para esta função através de curl a partir de outra janela de terminal:

    curl localhost:8080
    # Output: Hello World!
    

    Consulte Testar funções na documentação do framework de funções do Ruby.

    Implemente a função

    Para implementar a função com um acionador 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-lhe aceder à função sem autenticação. Para exigir a autenticação, omita a flag.

    Teste a função implementada

    1. Quando a implementação da função terminar, tome nota da propriedade httpsTrigger.url ou encontre-a através do seguinte comando:

      gcloud functions describe hello_http
      

      Deve ter esta forma:

      https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http
    2. Visite este URL no seu navegador. Deverá ver a mensagem "Hello World!".

      Experimente transmitir um nome no pedido HTTP, por exemplo, usando o seguinte URL:

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

      Deverá ver a mensagem "Olá NAME!"

    Ver registos

    Pode ver os registos das funções do Cloud Run na IU do Cloud Logging ou através da CLI gcloud.

    Veja registos com a ferramenta de linha de comandos

    Para ver os registos da sua função com a CLI gcloud, use o comando logs read, seguido do nome da função:

    gcloud functions logs read hello_http

    O resultado deve ser semelhante ao seguinte:

    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

    Veja os registos no painel de controlo de registos

    Também pode ver os registos das funções do Cloud Run a partir da Google Cloud consola.