Invoca Cloud Run Functions o Cloud Run

La llamada o invocación de un servicio de Google Cloud , como Cloud Run Functions o Cloud Run, desde Workflows se realiza a través de una solicitud HTTP. Los métodos de solicitud HTTP más comunes tienen un acceso directo de llamada (como http.get y http.post), pero puedes realizar cualquier tipo de solicitud HTTP si configuras el campo call como 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, sigue estos pasos:

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

  • Debes agregar de forma explícita información de autenticación 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 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 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 realizar el trabajo?

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

Crea servicios para realizar cualquier trabajo que sea demasiado complejo para Workflows, por ejemplo, implementar lógica empresarial reutilizable, cálculos complejos o transformaciones que no sean 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 el código, en lugar de usar YAML o JSON y la sintaxis de Workflows.

Tiempo de espera de la solicitud y límites de carga útil

Cuando llames a un servicio de Cloud Run o a una función de Cloud Run a través de HTTP, recuerda que las solicitudes HTTP síncronas (http.get, http.post, http.request) en Workflows tienen un tiempo de espera predeterminado de 5 minutos (300 segundos), admiten un tiempo de espera máximo de 30 minutos (1,800 segundos) y permiten un tamaño de respuesta máximo de 2 MB (sujeto al límite de memoria de variable de 512 KB si se almacena en variables).

Aunque los servicios de Cloud Run y las funciones de Cloud Run (2ª gen.) admiten tiempos de espera de solicitudes de hasta 60 minutos, cualquier paso síncrono de http.* en Workflows agota el tiempo de espera con un TimeoutError después de su tiempo de espera configurado (hasta 30 minutos). Para las cargas de trabajo que se ejecutan durante más de 30 minutos o que devuelven cargas útiles grandes, usa trabajos de Cloud Run o extremos de devolución de llamada. Para obtener una comparación de los límites y los patrones recomendados, consulta Alinea los tiempos de espera y los tamaños de las cargas útiles en los servicios.

Invoca servicios que están restringidos a la entrada interna

Workflows puede invocar funciones de Cloud Run o servicios de Cloud Run en el mismo proyecto de Google Cloud o perímetro de Controles del servicio de VPC que tienen 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 Restringe la entrada de red (para Cloud Run y Cloud Run Functions de 2ª gen.) y Establece la configuración de red (1ª gen.) (para Cloud Run Functions de 1ª gen.). No se necesitan otros cambios en tu flujo de trabajo.

Usa una cuenta de servicio con los permisos necesarios

Cuando realizas 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 otorgarle acceso (conviertes la identidad solicitante en 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, para configurar una función de Cloud Run (1ª gen.) 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 entidad principal en la función receptora y otorgarle a esa entidad principal el rol de invocador de Cloud Functions (roles/cloudfunctions.invoker). De manera similar, para configurar una cuenta de servicio para los servicios de Cloud Run o Cloud Run Functions (2ª gen.), debes otorgar a esa cuenta de servicio el rol de Invocador de Cloud Run (roles/run.invoker). Para obtener más información, consulta Control de acceso con IAM o la descripción general de la autenticación de Cloud Run.

Invoca funciones de Cloud Run

En Cloud Run Functions, los permisos de invocación están disponibles administrando el servicio de Cloud Run subyacente. Si tu flujo de trabajo invoca un servicio de Cloud Run Functions, no es necesario que otorgues a la cuenta de servicio del emisor el rol de IAM de Invocador de Cloud Functions (roles/cloudfunctions.invoker). En su lugar, debes otorgar el rol de IAM de Invocador de Cloud Run (roles/run.invoker).

Para obtener más información, consulta Compara Cloud Run Functions.

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

Cuando realices solicitudes a Cloud Run Functions o Cloud Run, usa OIDC para autenticarte.

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 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 opcional audience especifica el público de OIDC (OIDC_AUDIENCE) para el token. De forma predeterminada, se establece en el mismo valor que url. Sin embargo, si url incluye segmentos de ruta de acceso adicionales más allá de la URL raíz del servicio o de la función, establece audience en la URL raíz (por ejemplo, https://us-central1-project.cloudfunctions.net/functionA).

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 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 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. Si un trabajo tarda más de 30 minutos en completarse, configura el tiempo de espera de la tarea del trabajo (10 minutos de forma predeterminada, configurable hasta 168 horas o 7 días) y connector_params.timeout en la llamada del conector (que se establece de forma predeterminada en 1,800 segundos y se puede configurar hasta 31,536,000 segundos o 1 año).

Para ver un ejemplo de extremo a extremo de la ejecución de un trabajo de Cloud Run que procesa datos pasados como variables de entorno al trabajo, consulta Ejecuta un trabajo de Cloud Run con 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 que te permite encriptar los datos con claves de encriptación administradas por el cliente (CMEK), consulta Ejecuta un trabajo de Cloud Run que procese datos de eventos en Cloud Storage.

¿Qué sigue?