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

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

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

      
      import functions_framework
      
      
      from markupsafe import escape
      
      @functions_framework.http
      def hello_http(request):
          """HTTP Cloud Function.
          Args:
              request (flask.Request): The request object.
              <https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data>
          Returns:
              The response text, or any set of values that can be turned into a
              Response object using `make_response`
              <https://flask.palletsprojects.com/en/1.1.x/api/#flask.make_response>.
          """
          request_json = request.get_json(silent=True)
          request_args = request.args
      
          if request_json and "name" in request_json:
              name = request_json["name"]
          elif request_args and "name" in request_args:
              name = request_args["name"]
          else:
              name = "World"
          return f"Hello {escape(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

    As dependências em Python são geridas com o pip e expressas num ficheiro de metadados denominado requirements.txt. Este ficheiro tem de estar no mesmo diretório que o ficheiro main.py que contém o código da função.

    Não precisa de criar um requirements.txt para executar este exemplo específico, mas suponhamos que quer adicionar as suas próprias dependências. Veja como o fazer:

    1. Crie um ficheiro requirements.txt no diretório helloworld.

    2. Adicione a dependência da função ao ficheiro requirements.txt, por exemplo:

      # An example requirements file, add your dependencies below
      sampleproject==2.0.0
      

    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 python312 --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 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

    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 hello_http

    O resultado deve ser semelhante ao seguinte:

    LEVEL  NAME        EXECUTION_ID  TIME_UTC                 LOG
    D      hello_http  pdb5ys2t022n  2019-09-18 23:29:09.791  Function execution started
    D      hello_http  pdb5ys2t022n  2019-09-18 23:29:09.798  Function execution took 7 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.