Invocar o Cloud Functions ou o Cloud Run

Para chamar ou invocar um serviço do Google Cloud, como o Cloud Functions ou o Cloud Run, pelos fluxos de trabalho, é necessário fazer uma solicitação HTTP. Os métodos de solicitação HTTP mais comuns têm um atalho de chamada (como http.get e http.post), mas é possível fazer qualquer tipo de solicitação HTTP definindo o campo call como http.request e especificando o tipo de solicitação usando o campo method. Para mais informações, consulte Fazer uma solicitação HTTP.

Para enviar solicitações autenticadas:

  • O fluxo de trabalho precisa estar associado a uma conta de serviço que tenha recebido um ou mais papéis do Identity and Access Management (IAM) com as permissões necessárias.

  • É necessário adicionar as informações de autenticação à definição do fluxo de trabalho explicitamente. Por padrão, as solicitações HTTP não contêm tokens de identidade ou acesso por motivos de segurança.

Para mais informações, consulte Conceder permissão a um fluxo de trabalho para acessar os recursos do Google Cloud.

Quando chamar um serviço

Como você sabe quando criar etapas em YAML ou JSON usando a sintaxe do Workflows ou quando criar um serviço, por exemplo, um serviço do Cloud Run ou uma função do Cloud, para fazer o trabalho?

Use o Workflows para chamar serviços do próprio fluxo de trabalho, processar os resultados e executar tarefas simples, como fazer uma chamada HTTP. Workflows podem invocar serviços, analisar respostas e construir entradas para outros serviços conectados. Chamar um serviço permite que você evite as complicações de invocações extras, dependências extras e serviços de chamada de serviços.

Crie serviços para realizar qualquer trabalho complexo demais no Workflows, por exemplo, implementando lógica de negócios reutilizável, cálculos complexos ou transformações que não são compatíveis com as expressões do Workflows e a biblioteca padrão correspondente. Um caso complicado geralmente é mais fácil de implementar no código, em vez de usar YAML ou JSON e a sintaxe do Workflows.

Invocar serviços que são restritos à entrada interna

Workflows podem invocar serviços do Cloud Functions ou do Cloud Run no mesmo projeto do Google Cloud que têm a entrada restrita ao tráfego interno. Com essa configuração, seus serviços ficam inacessíveis pela Internet, mas podem ser acessados no Workflows.

Para aplicar essas restrições, é preciso ajustar as configurações de entrada do serviço ou da função. O serviço do Cloud Run precisa ser acessado no URL run.app, e não em um domínio personalizado. Para mais informações, consulte Como restringir a entrada (no Cloud Run) e Como definir configurações de rede (no Cloud Functions). Nenhuma outra alteração é necessária no fluxo de trabalho.

Usar uma conta de serviço com as permissões necessárias

Ao fazer solicitações a outros serviços do Google Cloud, seu fluxo de trabalho precisa estar associado a uma conta de serviço com as permissões corretas para acessar os recursos solicitados. Para saber qual conta de serviço está associada a um fluxo de trabalho atual, consulte Verificar uma conta de serviço associada a um fluxo de trabalho.

Ao configurar uma conta de serviço, você associa a identidade do solicitante ao recurso a que você quer conceder acesso. A identidade do solicitante é transformada em um principal do recurso e, em seguida, o papel apropriado é atribuído. O papel define quais permissões a identidade tem no contexto do recurso.

Por exemplo, para configurar uma função do Cloud de recebimento para aceitar solicitações de uma função ou serviço de chamada específico, você precisa adicionar a conta de serviço do autor da chamada como principal na função de recebimento e conceder a esse principal o papel de Invocador do Cloud Functions (roles/cloudfunctions.invoker). Da mesma forma, para configurar uma conta de serviço para o Cloud Run, você concede a ela o papel de Invocador do Cloud Run (roles/run.invoker). Para saber mais, consulte as informações de autenticação do Cloud Functions ou a visão geral de autenticação do Cloud Run.

Invocar o Cloud Functions (2nd gen)

No Cloud Functions (2nd gen), as permissões de invocação estão disponíveis pelo gerenciamento do serviço subjacente do Cloud Run. Se o fluxo de trabalho estiver invocando um serviço do função do Cloud (2a geração), não será necessário conceder o papel de Invocador do Cloud Functions (roles/cloudfunctions.invoker) à conta de serviço do autor da chamada. Em vez disso, é necessário conceder o papel de invocador do Cloud Run (roles/run.invoker).

Para mais informações, consulte Comparação de versões do Cloud Functions.

Adicionar informações de autenticação ao fluxo de trabalho

Ao fazer solicitações ao Cloud Functions ou ao Cloud Run, use o OIDC para fazer a autenticação.

Para fazer uma solicitação HTTP usando o OIDC, adicione uma seção auth à seção args da definição do fluxo de trabalho, depois de especificar o URL. Neste exemplo, uma solicitação é enviada para invocar uma função do Cloud:

YAML

  - step_A:
      call: http.get
      args:
          url: https://us-central1-project.cloudfunctions.net/functionA
          query:
              firstNumber: 4
              secondNumber: 6
              operation: sum
          auth:
              type: OIDC
              audience: OIDC_AUDIENCE
    

JSON

    [
      {
        "step_A": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-project.cloudfunctions.net/functionA",
            "query": {
              "firstNumber": 4,
              "secondNumber": 6,
              "operation": "sum"
            },
            "auth": {
              "type": "OIDC",
              "audience": "OIDC_AUDIENCE"
            }
          }
        }
      }
    ]
      
O parâmetro audience pode ser usado para especificar o público-alvo do OIDC para o token. Por padrão, ele é definido como o mesmo valor de url. No entanto, ele precisa estar definido para o URL raiz do serviço. Por exemplo: https://region-project.cloudfunctions.net/hello_world.

Especificar o tipo de mídia para os dados de resposta

Se o cabeçalho Content-Type da resposta especificar um tipo de mídia application/json, a resposta JSON armazenada em uma variável será convertida automaticamente em um mapa que pode ser acessado.

Se necessário, modifique a API que está sendo chamada para especificar um tipo de mídia application/json para o cabeçalho de resposta Content-Type. Caso contrário, use as funções json.decode e text.encode para converter o corpo da resposta em um mapa. Exemplo:

json.decode(text.encode(RESPONSE_FROM_API))

Para mais informações, consulte Acessar dados de resposta HTTP salvos em uma variável.

Executar jobs do Cloud Run

Ao contrário dos serviços do Cloud Run, os jobs do Cloud Run não detectam nem veiculam solicitações HTTP. Para executar jobs do Cloud Run em um fluxo de trabalho, use o conector da API Cloud Run Admin.

Para ver um exemplo completo de execução de um job do Cloud Run que processa dados transmitidos como variáveis de ambiente para o job, consulte Executar um job do Cloud Run usando Workflows.

Para ver um exemplo completo de execução de um job do Cloud Run que processa dados armazenados em um bucket do Cloud Storage e permite criptografar os dados usando chaves de criptografia gerenciadas pelo cliente (CMEK), consulte Executar um job do Cloud Run que processa dados de eventos no Cloud Storage.

A seguir