Invoca Cloud Functions o Cloud Run

La llamada o la invocación de un servicio de Google Cloud, como Cloud Functions o Cloud Run desde Workflows, se realizan a través de una solicitud HTTP. Los métodos de solicitud HTTP más comunes tienen un atajo de llamada (como http.get y http.post), pero puedes realizar cualquier tipo de solicitud HTTP si configuras el campo call en http.request y especificas el tipo de solicitud con el campo method. Para obtener más información, consulta Realiza una solicitud HTTP.

Para enviar solicitudes autenticadas, haz lo siguiente:

  • Tu flujo de trabajo debe estar asociado con una cuenta de servicio a la que se le hayan otorgado una o más funciones de Identity and Access Management (IAM) que contengan los permisos necesarios.

  • Debes agregar información de autenticación de forma explícita a la definición de tu flujo de trabajo. De forma predeterminada, las solicitudes HTTP no contienen tokens de identidad ni de acceso por motivos de seguridad.

Si deseas obtener más información, consulta Otorga permiso a un flujo de trabajo para acceder a los recursos de Google Cloud.

Cuándo llamar a un servicio

¿Cómo sabes cuándo crear pasos en YAML o JSON mediante la sintaxis de Workflows o cuándo crear un servicio, por ejemplo, un servicio de Cloud Run o una Cloud Function, para que realice el trabajo en su lugar?

Usa Workflows para llamar a servicios desde el flujo de trabajo y controlar los resultados, y ejecutar tareas simples, como hacer una llamada HTTP. Workflows pueden invocar servicios, analizar respuestas y crear entradas para otros servicios conectados. Llamar a un servicio te permite evitar las complicaciones de invocaciones adicionales, dependencias adicionales y servicios de llamada de servicios.

Crea servicios para realizar cualquier trabajo que sea demasiado complejo para Workflows; por ejemplo, con la implementación de lógica empresarial reutilizable, cálculos complejos o transformaciones que no son compatibles con las expresiones de Workflows y su biblioteca estándar. Por lo general, un caso complicado es más fácil de implementar en código que usar YAML o JSON y la sintaxis de Workflows.

Invoca servicios que estén restringidos a entradas internas

Workflows pueden invocar servicios de Cloud Functions o Cloud Run en el mismo proyecto de Google Cloud que tengan una entrada restringida al tráfico interno. Con esta configuración, no se puede acceder a los servicios desde Internet, pero se puede acceder a ellos desde Workflows.

Para aplicar estas restricciones, debes ajustar la configuración de entrada de tu servicio o función. Ten en cuenta que se debe acceder al servicio de Cloud Run en su URL run.app y no en un dominio personalizado. Si deseas obtener más información, consulta Restringe la entrada (para Cloud Run) y Establece la configuración de red (para Cloud Functions). No es necesario realizar otros cambios en tu flujo de trabajo.

Usa una cuenta de servicio con los permisos necesarios

Cuando realices solicitudes a otros servicios de Google Cloud, tu flujo de trabajo debe estar asociado con una cuenta de servicio que tenga los permisos correctos para acceder a los recursos solicitados. Para saber qué cuenta de servicio está asociada con un flujo de trabajo existente, consulta Verifica la cuenta de servicio asociada de un flujo de trabajo.

Cuando configuras una cuenta de servicio, asocias la identidad solicitante con el recurso al que deseas darle acceso (haces que la identidad solicitante sea una principal del recurso y, luego, le asignas el rol adecuado. El rol define qué permisos tiene la identidad en el contexto del recurso.

Por ejemplo, si deseas configurar una Cloud Function receptora para que acepte solicitudes de una función o un servicio de llamada específicos, debes agregar la cuenta de servicio del emisor como principal en la función receptora y otorgarle la función de invocador de Cloud Functions (roles/cloudfunctions.invoker). De manera similar, si quieres configurar una cuenta de servicio para Cloud Run, debes otorgarle el rol de Invocador de Cloud Run (roles/run.invoker). Si quieres obtener más información, consulta la información de autenticación para Cloud Functions o la descripción general de la autenticación de Cloud Run.

Invoca Cloud Functions (2nd gen)

En Cloud Functions (2nd gen), los permisos de invocación están disponibles mediante la administración del servicio subyacente de Cloud Run. Si tu flujo de trabajo invoca un servicio de Cloud Function (2ª gen..), no es necesario que le otorgues a la cuenta de servicio del llamador la función de Invocador de Cloud Functions (roles/cloudfunctions.invoker). En su lugar, debes otorgar la función de Invocador de Cloud Run (roles/run.invoker).

Para obtener más información, consulta Comparación de versiones de Cloud Functions.

Agrega información de autenticación a tu flujo de trabajo

Cuando realices solicitudes a Cloud Functions o Cloud Run, usa OIDC para la autenticación.

Para realizar una solicitud HTTP con OIDC, agrega una sección auth a la sección args de la definición de tu flujo de trabajo después de especificar la URL. En este ejemplo, se envía una solicitud para invocar una Cloud Function:

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"
            }
          }
        }
      }
    ]
      
Se puede usar el parámetro audience a fin de especificar el público de OIDC para el token. De forma predeterminada, se establece con el mismo valor que url. Sin embargo, se debe establecer como la URL raíz de tu servicio. Por ejemplo: https://region-project.cloudfunctions.net/hello_world.

Cómo especificar el tipo de medio para los datos de respuesta

Si el encabezado Content-Type de la respuesta especifica un tipo de medio application/json, la respuesta JSON que se almacena en una variable se convierte automáticamente en un mapa al que se puede acceder.

Si es necesario, modifica la API a la que se llama para especificar un tipo de medio application/json para el encabezado de respuesta Content-Type. De lo contrario, puedes usar las funciones json.decode y text.encode para convertir el cuerpo de la respuesta en un mapa. Por ejemplo:

json.decode(text.encode(RESPONSE_FROM_API))

Para obtener más información, consulta Accede a los datos de respuesta HTTP guardados en una variable.

Ejecuta trabajos de Cloud Run

A diferencia de los servicios de Cloud Run, los trabajos de Cloud Run no detectan ni entregan solicitudes HTTP. Si deseas ejecutar trabajos de Cloud Run desde un flujo de trabajo, usa el conector de la API de Cloud Run Admin.

Para ver un ejemplo de extremo a extremo de la ejecución de un trabajo de Cloud Run que procesa datos que se pasaron como variables de entorno al trabajo, consulta Ejecuta un trabajo de Cloud Run mediante Workflows.

Para ver un ejemplo de extremo a extremo de la ejecución de un trabajo de Cloud Run que procesa datos almacenados en un bucket de Cloud Storage, lo que te permite encriptar los datos con claves de encriptación administradas por el cliente (CMEK), consulta Ejecuta un trabajo de Cloud Run que procesa datos de eventos en Cloud Storage.

¿Qué sigue?