8

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

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

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

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

4

2 回答 2

4

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

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

AppAssertionCredentials使用以下代码处理访问令牌:

# 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)
于 2013-07-01T17:21:06.107 回答
3

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

有关服务帐户的文档建议以下 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 上看到它。有许多使用 AppEngine 来控制 GCE 的演示,但它们中的大多数似乎使用用户的项目和凭据,而不是应用程序自己的凭据。

显然,您可能不想在直接用户输入的情况下启动 VM,除非您有非常大的预算或某种形式的速率限制,但是当您不时启动 VM 非常有帮助有很多计算要做。(转码等)

于 2013-07-01T00:15:25.957 回答