2013-06-30 2 views
8

У меня есть веб-приложение Google App Engine, которое запускает большую часть моего сайта. Однако для некоторых функций мне нужна машина linux. Я хочу, чтобы приложение Google App Engine автоматически разворачивало экземпляр Google Compute для определенных событий.OAuth: запуск экземпляра Google Compute из Google App Engine

Я понимаю, что вы можете добавлять экземпляры Google Compute с помощью API REST Compute Engine. Однако, чтобы получить доступ к API Google Compute REST, вам необходимо получить токен доступа, используя процесс аутентификации OAuth2.

Как я могу программно получить токен доступа из Google App Engine?

Кажется, что для всех методов аутентификации требуется окно, чтобы вы могли ввести свое имя пользователя и пароль, что нецелесообразно в рамках Google App Engine.

+0

Вы можете использовать учетную запись службы – voscausa

ответ

3

Вы должны иметь возможность использовать учетную запись службы, связанную с вашим проектом, для аутентификации API Compute Engine и запуска виртуальных машин.

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) 

Я думал, что/O демо Google я с этого года, где они построили сайт видео-обмена должен был быть доступны, но я не вижу его на GitHub еще. Есть a number of demos, которые используют AppEngine для управления GCE, но большинство из них, похоже, используют проект пользователя и учетные данные, а не собственные учетные данные приложения.

Очевидно, что вы, вероятно, не хотите разворачивать виртуальную машину при прямом вводе пользователя, если у вас нет очень большого бюджета или какой-либо формы ограничения скорости на месте, но весьма полезно развернуть виртуальную машину сейчас и то, когда у вас много вычислений. (Транскодирование и т. Д.)

4

Вот полный пример использования учетных записей служб и задач cron для App Engine для остановки экземпляров после того, как они были запущены на некоторое время: (напротив начальных экземпляров, но код авторизации будет то же самое)

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) 
Смежные вопросы