如何通过Google App Engine Python API获取当前运行服务名称?
获取Google App Engine Python服务名称的方法
当然可以获取到app.yaml里指定的service名称!我之前做项目时也碰到过这个需求,google.appengine.api.app_identity模块确实没提供直接的方法,但有几个更直接的方式:
读取环境变量(推荐)
Google App Engine标准环境会自动把服务名注入到GAE_SERVICE环境变量里,你可以直接通过os模块读取:import os from google.appengine.api import app_identity # 获取服务名,默认值设为'default'(对应未指定service的默认服务) service_name = os.environ.get('GAE_SERVICE', 'default') # 获取应用ID app_id = app_identity.get_application_id() # 构建完整URL full_url = f"https://{service_name}.{app_id}.appspot.com/some/url/path/"这个方法既可靠又高效,不管是生产环境还是本地开发(本地开发时如果没设置环境变量,会自动用'default'兜底)都能正常工作。
从请求主机头解析(备选)
如果你的应用是处理HTTP请求的,也可以从请求的Host头里拆分出服务名,但这个方法不如环境变量稳定——比如使用自定义域名或者本地开发时,主机头格式可能不一样。示例代码(以Flask为例):from flask import request from google.appengine.api import app_identity host = request.host app_id = app_identity.get_application_id() # 拆分主机名,取app_id前面的部分作为服务名 if f".{app_id}.appspot.com" in host: service_name = host.split(f".{app_id}.appspot.com")[0] else: service_name = 'default'
总结一下,优先用环境变量的方式,这是官方隐含支持的方案,比解析主机头更靠谱。
内容的提问来源于stack exchange,提问作者FelixEnescu
相关产品推荐
相关产品推荐

