es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cloud Run: punto de conexión que ejecuta una función como trabajo en segundo plano.

Estoy intentando implementar una API REST en Cloud Run en la que un endpoint lance un trabajo asíncrono. El trabajo está definido dentro de una función en el código.

Parece que una manera de hacerlo es utilizando Cloud Task, pero esto significaría hacer una llamada a sí mismo a otro endpoint de la API desplegada. Específicamente, crear un endpoint auxiliar que contenga el código del trabajo (como /run-my-function) y otro para establecer la cola a Cloud Task que lanza /run-my-function.

¿Es esta la forma correcta de hacerlo o he entendido algo mal? En caso de que sea la manera correcta, ¿cómo especifico la URL del endpoint /run-my-function sin codificar de manera explícita el nombre de la URL del servicio de Cloud Run desplegado?

El código para el endpoint que lanza el endpoint con el código run-my-function sería:

from google.cloud import tasksv2
client = tasksv2.CloudTasksClient()
project = 'myproject'
queue = 'myqueue'
location = 'mylocation'
url = 'https://cloudrunservice-abcdefg-ca.b.run.app/run-my-function'
serviceaccountemail = '12345@cloudbuild.gserviceaccount.com'

parent = client.queuepath(project, location, queue)
task = {
            "httprequest": {
                "httpmethod": tasksv2.HttpMethod.POST,
                'url': url,
                "oidctoken": {"serviceaccountemail": serviceaccountemail},
            }
        }
response = client.createtask(parent=parent, task=task)

Sin embargo, esto requiere codificar de manera explícita el nombre del servicio https://cloudrunservice-abcdefg-ca.b.run.app y definir un endpoint auxiliar /run-my-function que se pueda llamar mediante http.

Tags:  , , ,

Answer

Comments are closed.