OAuth:从Google App Engine中启动Google Compute实例

时间:2013-06-30 18:33:31

标签: google-app-engine oauth-2.0 google-compute-engine

我有一个运行我网站大部分内容的Google App Engine网络应用。但是,对于某些功能,我需要一台linux机器。我希望我的Google App Engine应用能够在某些事件中自动启动Google Compute Instance。

我了解您可以使用Compute Engine REST API添加Google Compute实例。但是,要访问Google Compute REST API,您需要使用OAuth2身份验证过程获取访问令牌。

如何以编程方式从Google App Engine中获取访问令牌?

似乎所有身份验证方法都需要显示一个窗口,因此您可以输入用户名和密码,这在Google App Engine中是不切实际的。

2 个答案:

答案 0 :(得分:4)

以下是使用服务帐户和App Engine cron任务在实例运行一段时间后停止实例的完整示例: (与启动实例相反,但授权代码将相同)

https://github.com/GoogleCloudPlatform/compute-appengine-timeout-python

AppAssertionCredentials处理访问令牌using this code

# Obtain App Engine AppAssertion credentials and authorize HTTP connection.
# https://developers.google.com/appengine/docs/python/appidentity/overview
credentials = AppAssertionCredentials(
    scope='https://www.googleapis.com/auth/compute')
HTTP = credentials.authorize(httplib2.Http(memcache))

# Build object for the 'v1beta15' version of the GCE API.
# https://developers.google.com/compute/docs/reference/v1beta13/
compute = build('compute', 'v1beta15', http=HTTP)

答案 1 :(得分:3)

您应该能够使用与项目关联的服务帐户对Compute Engine API进行身份验证并启动VM。

Documentation on service accounts建议以下python代码应该获取服务帐户令牌。

import httplib2

import discovery
from oauth2client.appengine import AppAssertionCredentials
...
credentials = AppAssertionCredentials(
    scope='https://www.googleapis.com/auth/compute')
auth_http = credentials.authorize(httplib2.Http())
compute_service = discovery.build('compute', 'v1beta15', http=auth_http)

我认为今年他们建立视频共享网站的Google I / O演示将会可用,但我还没有在GitHub上看到它。有a number of demos使用AppEngine来控制GCE,但大多数似乎都使用用户的项目和凭据,而不是应用程序自己的凭据。

显然,你可能不希望在直接用户输入上启动虚拟机,除非你有一个非常大的预算或某种形式的速率限制,但是偶尔启动一个虚拟机是非常有帮助的当你有很多计算要做的时候。 (转码等)