Cloud Foundry 任务 - 从服务实例调用 REST API
Cloud Foundry Task - Call REST API from the service instance
有没有办法从 Cloud Foundry 任务(命令)调用 Cloud Foundry 中服务实例 运行 的 REST API。
例如,我在 PCF 中有一个名为 my-rest-app
运行 的 Spring 启动应用程序实例。它有一个端点 /sayHello
。使用 cf run-task my-test-app curl /sayHello
?
您可以这样做,但您需要告诉任务如何找到给定的服务。
您的任务在与应用程序不同的容器中运行,因此您不能使用 http://localhost:$PORT
,因为它们是独立的。这意味着您需要为您的任务获取 URL。您可以通过几种不同的方式做到这一点。
访问不同的应用程序时
要访问不同的应用程序(即 app1 的任务 -> 应用程序 2),您需要为目标应用程序传入 URL。这可以通过环境变量或绑定服务来完成。
任务和服务共享相同的环境变量和绑定服务,因此只需在您的应用上设置环境变量或将服务绑定到您的应用,您就可以通过任务访问它。
例如:
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
环境变量中提取 URL 请求,这是绑定服务信息所在的地方。
访问同一应用时
如果您尝试访问同一个应用程序(即 app1 的任务 -> app1),您可以从 VCAP_APPLICATION
中提取 URL,这样您就不需要 env 变量或绑定服务.
例如:
cf run-task my-cool-app 'curl https://$(echo "$VCAP_APPLICATION" | jq -r ".uris[0]")'
这将拉取映射到应用程序的第一个 URI。如果你有多个路由绑定到你的应用程序,你可能需要调整它以选择不同的 URI。如果您的路线有与之关联的路径,这应该包括路线路径。
如果您需要访问 /actuator/health
或应用程序下的特定子路径,您可以将其附加到此处获取的 URI 的末尾。
有没有办法从 Cloud Foundry 任务(命令)调用 Cloud Foundry 中服务实例 运行 的 REST API。
例如,我在 PCF 中有一个名为 my-rest-app
运行 的 Spring 启动应用程序实例。它有一个端点 /sayHello
。使用 cf run-task my-test-app curl /sayHello
?
您可以这样做,但您需要告诉任务如何找到给定的服务。
您的任务在与应用程序不同的容器中运行,因此您不能使用 http://localhost:$PORT
,因为它们是独立的。这意味着您需要为您的任务获取 URL。您可以通过几种不同的方式做到这一点。
访问不同的应用程序时
要访问不同的应用程序(即 app1 的任务 -> 应用程序 2),您需要为目标应用程序传入 URL。这可以通过环境变量或绑定服务来完成。
任务和服务共享相同的环境变量和绑定服务,因此只需在您的应用上设置环境变量或将服务绑定到您的应用,您就可以通过任务访问它。
例如:
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
环境变量中提取 URL 请求,这是绑定服务信息所在的地方。
访问同一应用时
如果您尝试访问同一个应用程序(即 app1 的任务 -> app1),您可以从 VCAP_APPLICATION
中提取 URL,这样您就不需要 env 变量或绑定服务.
例如:
cf run-task my-cool-app 'curl https://$(echo "$VCAP_APPLICATION" | jq -r ".uris[0]")'
这将拉取映射到应用程序的第一个 URI。如果你有多个路由绑定到你的应用程序,你可能需要调整它以选择不同的 URI。如果您的路线有与之关联的路径,这应该包括路线路径。
如果您需要访问 /actuator/health
或应用程序下的特定子路径,您可以将其附加到此处获取的 URI 的末尾。