Invoca funciones de Cloud Run o Cloud Run

Las llamadas o invocaciones a un servicio de Google Cloud, como las funciones de Cloud Run 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 configurando el campo call en http.request y especificando el tipo de solicitud con el campo method. Para obtener más información, consulta Cómo realizar una solicitud HTTP.

Para enviar solicitudes autenticadas, haz lo siguiente:

  • El flujo de trabajo debe estar asociado con una cuenta de servicio que se le haya otorgado uno o más roles de Identity and Access Management (IAM) que contengan los roles permisos.

  • 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.

Para obtener más información, consulta Cómo otorgar permiso a un flujo de trabajo para acceder a recursos de Google Cloud.

Cuándo llamar a un servicio

¿Cómo sabes cuándo crear pasos en YAML o JSON con la sintaxis de Workflows o cuándo crear un servicio (por ejemplo, un servicio de Cloud Run o una función de Cloud Run) para que haga el trabajo en su lugar?

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

Crea servicios para realizar cualquier trabajo que sea demasiado complejo para Workflows. Por ejemplo, implementar una 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, en lugar de usar YAML o JSON y la sintaxis de Workflows.

Invoca servicios que estén restringidos a entrada interna

Los flujos de trabajo pueden invocar funciones o servicios de Cloud Run en el mismo proyecto de Google Cloud que tiene la entrada restringida al tráfico interno. Con esta configuración, no se puede acceder a tus servicios desde Internet, pero sí 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. Para obtener más información, consulta Cómo restringir el ingreso (para Cloud Run) y Cómo configurar la configuración de red (para funciones de Cloud Run). 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 asociarse a una cuenta de servicio que tenga los permisos correctos para acceder 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, se asocia la identidad solicitante con el recurso al que deseas darle acceso; haces que la identidad solicitante sea una principal del recurso y, luego, asignarle el rol adecuado. El rol define qué permisos tiene la identidad en el contexto del recurso.

Por ejemplo, para configurar una función receptora de Cloud Run para que acepte solicitudes de una función o servicio de llamada específico, debes agregar el de servicio del emisor como una principal en la función receptora y otorga esa el invocador de funciones de Cloud Run (roles/cloudfunctions.invoker) en el área de la seguridad en la nube. Del mismo modo, para configurar una cuenta de servicio para Cloud Run, debes otorgarle el rol de Invocador de Cloud Run (roles/run.invoker). Para obtener más información, consulta la información de autenticación para las funciones de Cloud Run o la descripción general de la autenticación de Cloud Run.

Invoca funciones de Cloud Run (2ª gen.)

En las funciones de Cloud Run (2ª 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 Cloud Run (2ª gen..), no es necesario que otorgues a la cuenta de servicio del emisor. El invocador de Cloud Run Functions (roles/cloudfunctions.invoker). En su lugar, debes otorgar el rol de invocador de Cloud Run (roles/run.invoker).

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

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

Cuando realices solicitudes a funciones de Cloud Run o a 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, un para invocar una función de Cloud Run:

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

Especifica 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 Content-Type encabezado de respuesta. De lo contrario, puedes usar el json.decode y las funciones text.encode para y 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 escuchan ni entregan solicitudes HTTP. Para 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 al trabajo como variables de entorno, consulta Ejecuta un trabajo de Cloud Run con Workflows.

Si quieres ver un ejemplo de extremo a extremo de cómo ejecutar una tarea de Cloud Run que procesa datos almacenados en un bucket de Cloud Storage, lo que te permite encriptarlos con claves de encriptación administradas por el cliente (CMEK), consulta Cómo ejecutar una tarea de Cloud Run que procesa datos de eventos en Cloud Storage.

¿Qué sigue?