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, sigue estos pasos:
Tu flujo de trabajo debe estar asociado con una cuenta de servicio a la que se le haya otorgado uno o más roles 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.
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 construir entradas para otros servicios conectados. Llamar a un servicio te permite evitar las complicaciones de invocaciones adicionales, dependencias adicionales y servicios que llaman a 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 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 al acceso interno
Workflows pueden invocar funciones o servicios de Cloud Run en el mismo proyecto de Google Cloud que tenga 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 estar asociado con una cuenta de servicio que tenga los permisos correctos para acceder a los recursos solicitados. Para obtener información sobre qué cuenta de servicio está asociada con un flujo de trabajo existente, consulta Cómo verificar la cuenta de servicio asociada a un flujo de trabajo.
Cuando configuras una cuenta de servicio, asocias la identidad solicitante con el recurso al que deseas darle acceso (la conviertes en una identidad 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 receptora de Cloud Run que acepte
solicitudes de una función o un servicio de llamada específicos, debes agregar la
cuenta de servicio del llamador como principal en la función receptora y otorgarle a ese
principal el rol de invocador de funciones de Cloud Run (roles/cloudfunctions.invoker
). 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 de 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 servicio de función de Cloud Run (2ª gen.), no necesitas otorgarle a la cuenta de servicio del llamador el rol de invocador de funciones de Cloud Run (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 la comparación de versiones de funciones de Cloud Run.
Agrega 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, 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" } } } } ]
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 contenido multimedia 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 media 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 Cómo acceder 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 los datos que se pasan como variables de entorno al trabajo, consulta Cómo ejecutar 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?
- Crea un extremo HTTP para tu función
- Activa un servicio alojado en Cloud Run
- Instructivo para usar Workflows con Cloud Run y Cloud Functions