2013-06-30 2 views
8

Ich habe eine Google App Engine-Webanwendung, die den Großteil meiner Website betreibt. Für bestimmte Funktionen benötige ich jedoch einen Linux-Rechner. Ich möchte, dass meine Google App Engine-App bei bestimmten Ereignissen automatisch eine Google Compute-Instanz hochlädt.OAuth: Starten einer Google Compute-Instanz über Google App Engine

Ich verstehe, dass Sie Google Compute-Instanzen mithilfe der Compute Engine-REST-API hinzufügen können. Um auf die Google Compute-REST-API zuzugreifen, müssen Sie jedoch mithilfe des OAuth2-Authentifizierungsprozesses ein Zugriffstoken abrufen.

Wie kann ich programmgesteuert ein Zugriffstoken aus Google App Engine beziehen?

Es scheint, dass für alle Authentifizierungsmethoden ein Fenster erforderlich ist, damit Sie Ihren Nutzernamen und Ihr Passwort eingeben können, was in Google App Engine nicht praktikabel ist.

+0

Sie können ein Dienstkonto verwenden – voscausa

Antwort

3

Sie sollten das mit Ihrem Projekt verknüpfte Dienstkonto verwenden können, um sich bei der Compute Engine-API zu authentifizieren und VMs zu starten.

Documentation on service accounts schlägt vor, dass der folgende Python-Code ein Dienstkonto-Token abrufen sollte.

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) 

hatte ich gedacht, dass die Google I/O-Demo von diesem Jahr, wo sie eine Video-Sharing-Site gebaut würde zur Verfügung stehen, aber ich sehe es nicht auf GitHub noch. Es gibt a number of demos, die AppEngine verwenden, um GCE zu steuern, aber die meisten von ihnen scheinen das Projekt und die Anmeldeinformationen des Benutzers zu verwenden, eher die eigenen Anmeldeinformationen der App.

Offensichtlich möchten Sie wahrscheinlich keine VM auf direkte Benutzereingabe hochdrehen, es sei denn, Sie haben ein sehr großes Budget oder irgendeine Form der Ratenbegrenzung, aber es ist ziemlich hilfreich, eine VM jetzt hochzufahren dann, wenn man viel rechnen muss. (Transcoding usw.)

4

Hier finden Sie ein vollständiges Beispiel für die Verwendung von Dienstkonten und App Engine-Cron-Tasks zum Stoppen von Instanzen nach einer bestimmten Laufzeit: (im Gegensatz zu Startinstanzen, aber der Autorisierungscode lautet das gleiche)

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

AppAssertionCredentials nimmt die Zugriffstoken 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)