如何获取App Engine实例的长格式instance_id?

时间:2017-02-18 01:45:07

标签: python google-app-engine google-app-engine-python

我可以通过调用modules.get_current_instance_id()为正在运行的进程获取一个短整数instance_id,但这会将整数索引返回到当前版本的应用程序的实例列表中。我可以创建一个rpc来获取完整的十六进制instance_id,如下所示:

from google.appengine.api.app_identity import app_identity
from googleapiclient.discovery import build
from oauth2client.client import GoogleCredentials

credentials = GoogleCredentials.get_application_default()
service = build('appengine', 'v1', credentials=credentials)
appsId = app_identity.get_application_id()

rpc_result = service.apps().services().versions().instances().list(versionsId='23', servicesId='default', appsId=appsId).execute()

print rpc_result['instances'][int(modules.get_current_instance_id())]

这给了我一个dict,其中包含一个'id'键值对,其值如下所示:00c61b117cb3c50973d6a73225b3d807eb8e873e96abc59c46ebba168897b8dbd9a443af962df5

这就是我需要的。

这种方法有两个明显的缺点。首先是我正在做RPC以获得必须在本地可用的东西 - 某处。第二个是竞争条件。如果modules.get_current_instance_id()返回,比如说3,但是实例#2在为该进程分配索引之间关闭,当我得到rpc响应时,我将在我的索引中关闭一个rpc_result

如何在应用引擎中获取此ID?

1 个答案:

答案 0 :(得分:0)

您应该能够从INSTANCE_ID环境变量中获取它。

你可以通过以下方式获得:

os.eniron["INSTANCE_ID"]