我想获取特定项目的服务的URL,我该怎么做?
我需要像 .appspot.com
这样的网址我尝试了 App Engine 管理员 api,但它只能提供服务的名称。
API 调用获取 App Engine 服务版本的网址,只需 3 个步骤:
1( 验证并获取 App Engine 管理 API 的访问权限令牌:
gcloud auth application-default print-access-token
2( 使用访问令牌,列出 App Engine 中的所有服务,并获取其版本 ID(在嵌套字段"分配"中(和服务 ID:
curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services
3( 使用版本 ID 和服务 ID,获取版本的完整数据:
curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/[SERVICE_ID]/versions/[VERSION_ID]/?view=FULL
字段versionUrl
以以下形式提供此特定版本的应用程序 URL:
默认服务:
https://[VERSION_ID]-dot-[PROJECT_ID].appspot.com
其他服务:
https://[SERVICE_ID]-dot-[VERSION_ID]-dot-[PROJECT_ID].appspot.com
从那里,您可以构建自己的服务发现。
默认服务以外的 URL 遵循以下模式:
service-dot-projectID.appspot.com
例如,如果服务的名称为 helloworld
,项目 ID 为myprojectid
则 URL 将helloworld-dot-myprojectid.appspot.com
如果您在同一项目中手动构造服务的 url,您可能会发现设置一些调度规则更容易。
https://cloud.google.com/appengine/docs/standard/python3/reference/dispatch-yaml
dispatch.yaml 允许您覆盖路由规则。您可以使用 dispatch.yaml 根据 URL 中的路径或主机名将传入请求发送到特定服务(以前称为模块(。
根据您的需要,您可以构建app_identity.get_default_version_hostname()
的 url,而不必担心基础服务,因为调度规则将通过 url 路径路由到服务。