我正在嘗試在云運行中部署一個 rest api,其中一個端點啟動異步作業。作業在代碼中的函式內定義。
似乎一種方法是使用 Cloud Task,但這意味著對已部署 api 的另一個端點進行自我呼叫。具體來說,要創建一個包含作業代碼(例如/run-my-function)的輔助端點和另一個將佇列設定為啟動/run-my-function?
這是正確的方法還是我誤解了什么?如果/run-my-function沒有明確硬編碼云運行部署的 url 名稱,如何指定端點的 url 是正確的方法?
使用代碼啟動端點的端點run-my-function代碼為:
from google.cloud import tasks_v2
client = tasks_v2.CloudTasksClient()
project = 'myproject'
queue = 'myqueue'
location = 'mylocation'
url = 'https://cloudrunservice-abcdefg-ca.b.run.app/run-my-function'
service_account_email = '[email protected]'
parent = client.queue_path(project, location, queue)
task = {
"http_request": {
"http_method": tasks_v2.HttpMethod.POST,
'url': url,
"oidc_token": {"service_account_email": service_account_email},
}
}
response = client.create_task(parent=parent, task=task)
但是,這需要對服務名稱進行硬編碼https://cloudrunservice-abcdefg-ca.b.run.app并定義一個/run-my-function可以通過 http 呼叫的輔助端點
uj5u.com熱心網友回復:
在您的代碼中,您無需硬編碼或將其設定在環境變數中即可獲取 Cloud Run URL。
你可以看看我之前寫的一篇文章,在優雅的術語部分。我在 Go 中提供了一個作業代碼,在 Python 中重新實作并不難。
這里的原則:
- 從元資料服務器獲取區域和專案編號。請記住,Cloud Run 具有特定的元資料,例如區域
- 獲取 K_SERVICE 環境變數(它是標準的 Cloud Run 環境變數)
- 呼叫Cloud Run Rest API 以獲取服務詳細資訊并使用之前獲取的資料自定義請求
status.url從回應中提取JSON 條目。
現在你擁有了!
如果您在實作這一目標時遇到困難,請告訴我。我不擅長 Python,但我將能夠撰寫那段代碼!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/369156.html
