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

Este guia explica o processo de escrita de uma função do Cloud Run usando o tempo de execução do Go. 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 Go

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

      
      // Package helloworld provides a set of Cloud Functions samples.
      package helloworld
      
      import (
      	"encoding/json"
      	"fmt"
      	"html"
      	"net/http"
      
      	"github.com/GoogleCloudPlatform/functions-framework-go/functions"
      )
      
      func init() {
      	functions.HTTP("HelloHTTP", HelloHTTP)
      }
      
      // HelloHTTP is an HTTP Cloud Function with a request parameter.
      func HelloHTTP(w http.ResponseWriter, r *http.Request) {
      	var d struct {
      		Name string `json:"name"`
      	}
      	if err := json.NewDecoder(r.Body).Decode(&d); err != nil {
      		fmt.Fprint(w, "Hello, World!")
      		return
      	}
      	if d.Name == "" {
      		fmt.Fprint(w, "Hello, World!")
      		return
      	}
      	fmt.Fprintf(w, "Hello, %s!", html.EscapeString(d.Name))
      }
      

      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

    Esta função de exemplo usa apenas pacotes da biblioteca padrão do Go, pelo que não precisa de declarar dependências além de importar os pacotes.

    Para funções que requerem dependências fora da biblioteca padrão, tem de fornecer as dependências através de um ficheiro go.mod ou de um diretório vendor. Para mais detalhes, leia o artigo Especificar dependências em Go.

    Implemente a função

    Para implementar a função com um acionador HTTP, execute o seguinte comando no diretório helloworld, especificando go113 ou go111 como o valor da flag --runtime, consoante a versão que estiver a usar:

    gcloud functions deploy HelloHTTP --no-gen2 --runtime go121 --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

    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 HelloHTTP
      

      Deve ter esta forma:

      https://GCP_REGION-PROJECT_ID.cloudfunctions.net/HelloHTTP
    2. Visite este URL no seu navegador ou use o cURL executando o comando:

      curl https://GCP_REGION-PROJECT_ID.cloudfunctions.net/HelloHTTP

      Deverá ver a mensagem "Olá, mundo!". Experimente transmitir um nome no pedido HTTP executando o seguinte comando:

      curl -X POST https://GCP_REGION-PROJECT_ID.cloudfunctions.net/HelloHTTP -H "Content-Type:application/json"  -d '{"name":"NAME"}'

      Deve ver a mensagem "Olá, NAME!"

    Ver registos

    Os registos das funções do Cloud Run são visíveis através da CLI gcloud e na IU do Cloud Logging.

    Use 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 HelloHTTP

    O resultado deve ser semelhante ao seguinte:

    LEVEL  NAME        EXECUTION_ID  TIME_UTC                 LOG
    D      HelloHTTP  buv9ej2k1a7r  2019-09-20 13:23:18.910  Function execution started
    D      HelloHTTP  buv9ej2k1a7r  2019-09-20 13:23:18.913  Function execution took 4 ms, finished with status code: 200

    Use o painel de controlo de registo

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