Para llamar o invocar un Google Cloud servicio, como funciones de Cloud Run
o Cloud Run desde Workflows, se utiliza una solicitud HTTP. Los métodos de solicitud HTTP más habituales tienen un acceso directo de llamada (como http.get y http.post), pero puedes hacer cualquier tipo de solicitud HTTP configurando el campo call
en http.request
y especificando el tipo de solicitud mediante el campo method
. Para obtener más información, consulta Hacer una solicitud HTTP.
Para enviar solicitudes autenticadas, sigue estos pasos:
Tu flujo de trabajo debe estar asociado a una cuenta de servicio a la que se le hayan concedido uno o varios roles de gestión de identidades y accesos (IAM) que contengan los permisos necesarios.
Debes añadir explícitamente la 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 Conceder permiso a un flujo de trabajo para acceder a recursos 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 o una función de Cloud Run) para hacer el trabajo?
Crea servicios para realizar cualquier trabajo que sea demasiado complejo para los flujos de trabajo. Por ejemplo, implementar lógica empresarial reutilizable, cálculos complejos o transformaciones que no sean compatibles con las expresiones de los flujos de trabajo y su biblioteca estándar. Normalmente, es más fácil implementar un caso complejo en el código que usar YAML o JSON y la sintaxis de Workflows.
Invocar servicios restringidos a la entrada interna
Los workflows pueden invocar funciones o servicios de Cloud Run del mismo Google Cloud proyecto que tengan el tráfico de entrada restringido al tráfico interno. Con esta configuración, no se puede acceder a tus servicios desde Internet, pero sí desde los flujos de trabajo.
Para aplicar estas restricciones, debe ajustar la configuración de entrada de su servicio o función. Ten en cuenta que se debe acceder al servicio de Cloud Run a través de su URL run.app
y no a través de un dominio personalizado. Para obtener más información, consulta Restringir el acceso de red (en Cloud Run) y Configurar los ajustes de red (en Cloud Functions). No es necesario que hagas ningún otro cambio en tu flujo de trabajo.
Usar una cuenta de servicio con los permisos necesarios
Cuando hagas solicitudes a otros servicios de Google Cloud , tu flujo de trabajo debe estar asociado a una cuenta de servicio que tenga los permisos correctos para acceder a los recursos solicitados. Para saber qué cuenta de servicio está asociada a un flujo de trabajo, consulta Verificar la cuenta de servicio asociada a un flujo de trabajo.
Al configurar una cuenta de servicio, asocias la identidad solicitante al recurso al que quieres darle acceso (es decir, conviertes la identidad solicitante en un principal del recurso) y, a continuación, le asignas el rol adecuado. El rol define los permisos que tiene la identidad en el contexto del recurso.
Por ejemplo, para configurar una función de Cloud Run receptora de forma que acepte solicitudes de una función o un servicio de llamada específicos, debes añadir la cuenta de servicio de la función o el servicio de llamada como principal en la función receptora y conceder a ese principal el rol Invocador de funciones de Cloud Run (roles/cloudfunctions.invoker
). Del mismo modo, para configurar una cuenta de servicio para Cloud Run, debes concederle el rol Invocador de Cloud Run (roles/run.invoker
). Para obtener más información, consulta Control de acceso con IAM o la introducción a la autenticación de Cloud Run.
Invocar funciones de Cloud Run
En Cloud Run Functions, los permisos de invocación se pueden gestionar mediante el servicio de Cloud Run subyacente. Si tu flujo de trabajo invoca un servicio de funciones de Cloud Run, no es necesario que concedas a la cuenta de servicio del llamador el rol Invocador de Cloud Functions (roles/cloudfunctions.invoker
). En su lugar, debe conceder el rol Invocador de Cloud Run (roles/run.invoker
).
Para obtener más información, consulta Comparar funciones de Cloud Run.
Añadir información de autenticación a tu flujo de trabajo
Cuando hagas solicitudes a funciones de Cloud Run o a Cloud Run, usa OIDC para autenticarte.
Para hacer una solicitud HTTP mediante OIDC, añade 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 la audiencia de OIDC del token.
De forma predeterminada, tiene el mismo valor que url
, pero debería ser la URL raíz de tu servicio. Por ejemplo: https://region-project.cloudfunctions.net/hello_world
.
Especifica el tipo de contenido multimedia de los datos de respuesta
Si el encabezado Content-Type
de la respuesta especifica un tipo de medio application/json
, la respuesta JSON almacenada 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 Acceder a los datos de respuesta HTTP guardados en una variable.
Ejecutar tareas de Cloud Run
A diferencia de los servicios de Cloud Run, las tareas de Cloud Run no escuchan ni atienden solicitudes HTTP. Para ejecutar tareas de Cloud Run desde un flujo de trabajo, usa el conector de la API Admin de Cloud Run.
Para ver un ejemplo completo de cómo ejecutar una tarea de Cloud Run que procesa datos transferidos a la tarea como variables de entorno, consulta Ejecutar una tarea de Cloud Run con Workflows.
Para ver un ejemplo completo de cómo ejecutar un trabajo de Cloud Run que procesa datos almacenados en un segmento de Cloud Storage y te permite cifrar los datos con claves de cifrado gestionadas por el cliente (CMEK), consulta Ejecutar un trabajo de Cloud Run que procesa datos de eventos en Cloud Storage.
Siguientes pasos
- Invocar con una solicitud HTTPS
- Tutorial sobre el uso de Workflows con Cloud Run y Cloud Run Functions