有沒有辦法從 Cloud Foundry 任務(命令)呼叫在 Cloud Foundry 中運行的服務實體的 REST API。
例如,我有一個名為my-rest-apprunning in PCF的 Spring Boot 應用程式實體。它有一個端點/sayHello。使用cf run-task my-test-app curl /sayHello?
uj5u.com熱心網友回復:
您可以這樣做,但您需要告訴任務如何定位給定的服務。
您的任務在與應用程式不同的容器中運行,因此您無法使用,http://localhost:$PORT因為它們是分開的。這意味著您需要獲取該任務的應用程式的 URL。您可以通過幾種不同的方式做到這一點。
訪問不同的應用程式時
要訪問不同的應用程式(即應用程式 1 的任務 -> 應用程式 2),您需要傳入目標應用程式的 URL。這可以通過環境變數或系結服務來完成。
任務和服務共享相同的環境變數和系結服務,因此只需在您的應用程式上設定一個 env 變數或將服務系結到您的應用程式,您就可以通過任務訪問它。
例如:
cf set-env my-cool-app URL 'http://www.example.com/'
cf restart my-cool-app
cf run-task my-cool-app 'curl "$URL"'
確保正確參考最后一個命令,以便$URL不會在本地評估。
或者
cf cups my-service -p url # populate the url when prompted
cf bind-service my-cool-app my-service
cf restart my-cool-app
cf run-task my-cool-app 'curl $(echo "$VCAP_SERVICES" | jq -r ".[\"user-provided\"][0].credentials.url")'
這有點復雜,但VCAP_SERVICES會從系結服務資訊所在的 env 變數中提取 URL 以進行請求。
訪問同一個應用程式時
如果您嘗試訪問同一個應用程式(即 app1 的任務 -> app1),您可以從中提取 URL,VCAP_APPLICATION這樣您就不需要環境變數或系結服務。
例如:
cf run-task my-cool-app 'curl https://$(echo "$VCAP_APPLICATION" | jq -r ".uris[0]")'
這將拉取映射到應用程式的第一個 URI。如果您有多個路由系結到您的應用程式,您可能需要調整它以選擇不同的 URI。如果您的路線有與之關聯的路徑,則這應該包括一個路線路徑。
如果您需要訪問/actuator/health或應用程式下的特定子路徑,您可以將其附加到此處獲取的 URI 的末尾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/345488.html
