FAQ zu App Engine

Wie melde ich mich bei meinem App Engine-Konto an?

Bei normalen Google-Konten, zum Beispiel bei Gmail, können Sie sich durch Aufruf der Google Cloud Console in Ihrem App Engine-Konto anmelden.

Wie erstelle ich ein Cloud-Projekt für App Engine?

Verwenden Sie die Google Cloud Console, um ein Cloud-Projekt zu erstellen.

Welche Sprachen werden von Google App Engine unterstützt?

Derzeit unterstützt die App Engine-Standardumgebung Java, Python, PHP, Go und Node.js. Außerdem können Ihre Websitevorlagen in den HTML-Inhalten JavaScript-Elemente enthalten, durch die Sie unter anderem in der Lage sind, AJAX-fähige Webanwendungen zu erstellen.

Welche Arten von Zertifizierungen hat App Engine erhalten?

App Engine hat den Audit-Prozess für die Standards SAS70 Typ II, SSAE 16 Typ II, ISO 27001 und ISAE 3402 Typ II erfolgreich absolviert.

Welche Rechte habe ich an den von mir erstellten Projekten?

App Engine-Kunden sind Inhaber aller gewerblichen Schutzrechte an ihren gespeicherten Daten und ihrem Anwendungs- und Projektcode. Google ist Inhaber aller gewerblichen Grundrechte an den Diensten und der Software von App Engine und der Google Cloud Platform.

Weitere Informationen, einschließlich der Definitionen dieser Begriffe, finden Sie in den Google Cloud-Nutzungsbedingungen.

Kann ich eine App Engine-Anwendung entwickeln, wenn ich kein Konto habe?

Auf jeden Fall! Auch wenn Sie noch kein App Engine-Konto haben, können Sie jederzeit unser SDK herunterladen und mit der Entwicklung beginnen.

Wie viele Anwendungen kann ich mit App Engine erstellen?

Die Anzahl der App Engine-Projekte, die Sie erstellen können, hängt von verschiedenen Faktoren ab. Unter anderem kommt es auf Ihren Nutzungsverlauf für die Google Cloud Platform an sowie darauf, welche Ressourcen Sie verwenden. Die Kontingente der Kunden richten sich nach diesen und anderen Faktoren.

Wenn Sie Ihr Projektlimit überschreiten, werden Sie von der Cloud Console aufgefordert, ein Anfrageformular auszufüllen. Dies ist der Fall, wenn Sie ein Projekt erstellen, Ihr Kontingent aber bereits erschöpft ist. In diesem Formular müssen Sie die Anzahl der zusätzlichen benötigten Projekte sowie die zugehörigen E-Mail-Konten, Rechnungskonten und Verwendungszwecke angeben.

Weitere Informationen zur Anforderung höherer Kontingente finden Sie auf der Seite Anfragen zu Projektkontingenten.

Welche Inhaltstypen sind bei Google App Engine zulässig?

Falls Sie Fragen dazu haben, welche Inhalte mit App Engine zulässig sind, lesen Sie bitte unsere Nutzungsbedingungen.

Warum erhalte ich einen URI-Fehler für /favicon.ico?

Anwendungen ohne die Datei favicon.ico-Datei können den URI /favicon.ico enthalten, der in der Liste der fehlerhaften URIs enthalten ist Favicon.ico ist eine Datei, die vom Webbrowser eines Nutzers angefordert wird, wenn dieser die Seite lädt. Die Datei enthält das Symbol Ihrer Website, das normalerweise in der URL-Zeile des Browsers neben der Webadresse Ihrer Website angezeigt wird.

Bei Ihrer Anwendung sollte "favicon.ico" ein statisches Bild sein. Sie können eine Datei "favicon.ico" in Ihre Anwendung laden und in Ihrer Datei "app.yaml" die Anwendung so konfigurieren, dass das Bild bereitgestellt wird, wenn die URL "/favicon.ico" angefordert wird. Nachfolgend finden Sie Beispieleinträge in appengine-web.xml (Java) und app.yaml (Python/PHP/Go). Im Beispiel für Python/PHP/Go befindet sich favicon.ico in static/images. Zur Vereinfachung ist dieselbe Datei im Beispiel für Java im Stammverzeichnis (war) gespeichert.

Python/PHP/Go

app.yaml
- url: /favicon\.ico
  static_files: static/images/favicon.ico
  upload: static/images/favicon\.ico

Java

appengine-web.xml
<static-files>
  <include path="/favicon.ico" />
</static-files>

Was ist GQL?

GQL ist eine Abfragesprache, die mit dem Datenspeicher verwendet wird. Python-Anwendungen können mit ihr Entitäten abfragen. Die Sprache verwendet eine SQL-ähnliche Syntax, um ganze Entitäten aus dem Datenspeicher Ihrer Anwendung abzurufen, und ermöglicht die Filterung nach Attributen, die Festlegung der Sortierreihenfolge für die Ergebnisse und die Begrenzung der zurückgegebenen Entitäten. Hier finden Sie die vollständige GQL-Sprachreferenz.

Ist GQL für Java verfügbar?

GQL ist nicht im Java SDK enthalten, kann jedoch über die Cloud Datastore API verwendet werden. Wir empfehlen, dass Java-Entwickler JDO oder JPA anstelle von GQL verwenden, weil diese Optionen typsicher sind. Mit JDO/JPA hat der Entwickler die Möglichkeit, Fehler in der IDE und nicht in der Laufzeit zu erkennen. Außerdem sind SQL-Injection-Angriffe unwahrscheinlicher.

Warum müssen meine Abfragen durch Indexe abgedeckt sein und wie schließe ich diese ein?

Wenn Sie eine Abfrage ausführen, die nach mehreren Entitätsattributen filtert oder die Ergebnisse anhand mehrerer Attribute sortiert, benötigen Sie einen Index. Dies gilt für alle Abfragen dieser Art, die Sie mit Ihrer Anwendung ausführen. Der Datenspeicherindex für eine Abfrage verwaltet und aktualisiert eine Liste von Schlüsseln. Diese sind so sortiert, dass in der Abfrage schneller Zugriff auf die Daten im Datenspeicher ausdrücklich zugelassen wird. Eine vollständige Erläuterung zu Datastore-Indexen finden Sie in der Dokumentation (Java | Python | Go).

Wenn Sie Ihre Anwendung mit dem Cloud SDK entwickeln, wird jede Abfrage, die Sie ausführen, gegebenenfalls automatisch indexiert. Wenn Sie Ihre Anwendung gründlich testen, bevor Sie sie auf Ihre Website hochladen, sind alle Indexe, die Ihre Anwendung benötigt, in den index.yaml-Dateien Ihrer Anwendung enthalten. Sie können Indexe manuell einfügen, wenn Sie auf eine Abfrage stoßen, die durch den Entwicklungstest nicht abgedeckt wurde. Weitere Informationen zum Schreiben von Indexen für Ihre Anwendung finden Sie in der Indexdokumentation.

Warum wurden meine Indexe als Fehler gekennzeichnet?

Unter Umständen handelt es sich um explodierende Indexe (Python | Java | Go). Vielleicht sind auch beim Schreiben bestimmter Entitäten in Ihrem Datenspeicher andere ähnliche Probleme aufgetreten. Sie können die Indexe bereinigen und neu erstellen. Dazu folgen Sie den Anleitungen unter "Abfragen" (Python | Java | Go) und "Indexe" (Python | Java | Go).

Warum nimmt das Erstellen oder Löschen meiner Indexe so viel Zeit in Anspruch?

Auch wenn Sie nicht viele Entitäten der entsprechenden Art(en) haben, kann ihre Erstellung oder Löschung unterschiedlich lange dauern. Dabei kommt es unter anderem darauf an, wie viele Daten wegen Nutzeranfragen im Datenspeicher verarbeitet, wie viele Indexe gerade für andere Anwendungen erstellt und wie viele Datenspeicher-Ladevorgänge ausgeführt werden. In manchen Fällen können Indexjobs Stunden oder sogar Tage in Anspruch nehmen.

Dennoch können wir manchmal helfen, wenn Indexe offenbar hängen geblieben sind. Wenn Sie glauben, dass dies bei Ihnen der Fall ist, können Sie eine Frage an die Gruppe google-appengine senden.

Wie authentifiziere ich die Nutzer meiner Anwendung?

Mit dem Nutzerdienst (Java | Python | Go) haben Sie die Möglichkeit, Nutzer zu authentifizieren, die ein Google-Konto oder ein Konto in ihrer eigenen G Suite-Domain haben. Sie können eine dieser Authentifizierungsformen für Ihre Anwendung auswählen.

Falls Ihre Anwendung Google-Konten verwendet, wird der Nutzer auf eine Anmeldeseite bei Google geleitet. Dies gilt, sofern Ihre Anmeldung eine Nutzeranmeldung erfordert, bei der der Nutzername und das Passwort eingegeben werden müssen oder ein neues Konto erstellt werden muss. Nach der Anmeldung wird der Nutzer wieder auf Ihre Website geleitet und die Nutzerinformationen sind über das Attribut "Users" für Ihre Anwendung verfügbar.

Gibt es überhaupt Bibliotheken von Drittanbietern, die nicht von App Engine unterstützt werden?

Python

Ein kleiner Prozentsatz der systemeigenen C-Python-Module und Untergruppen der systemeigenen C-Python-Module sind bei App Engine nicht verfügbar. Die deaktivierten Module fallen in folgende Kategorien:

  • Bibliotheken, die Datenbanken auf Laufwerken verwalten, sind in Python für App Engine nicht aktiviert.
  • Das System lässt es nicht zu, dass Sie Unterprozesse aufrufen. Daher sind einige Modul-Betriebssystem-Methoden deaktiviert.
  • Threading ist nicht verfügbar.
  • Aus Sicherheitsgründen sind die meisten C-basierten Module deaktiviert.
  • Andere Funktionen sind eingeschränkt verfügbar:
    • "marshal" ist deaktiviert.
    • "cPickle" ist per Alias "pickle" zugeordnet.
    • Systemaufrufe wurden deaktiviert.

Pakete von Drittanbietern, die eine der oben genannten Funktionen verwenden, sind nicht mit App Engine kompatibel (zum Beispiel Pakete wie PostgreSQL).

Go

Die meisten reinen Go-Pakete sind mit App Engine kompatibel. Ein Paket kann aus den folgenden Gründen nicht funktionieren:

  • Das Paket importiert syscall oder unsafe.
  • Das Paket verwendet "cgo" oder "assembly".
  • Für das Paket sind Funktionen in Paketen erforderlich, die gesperrt sind, zum Beispiel das Schreiben auf ein Laufwerk oder der direkte Netzwerkzugriff.

Warum wurde meine Anwendung deaktiviert?

Eine Anwendung kann deaktiviert werden, wenn sie nicht unseren Nutzungsbedingungen entspricht. Außerdem wird eine Anwendung unter Umständen deaktiviert, falls sie aufgrund eines Fehlers oder anderen Problems die Systemressourcen ineffizient nutzt und daher in übermäßigem Ausmaß belastet. Der Entwickler kann den Entwicklungsfehler dann mit unserem SDK beheben und die Anwendung anschließend wieder in App Engine aktivieren.

Warum hat meine Anwendung das Kontingent überschritten?

App Engine legt mithilfe von Kontingentlimits den Umfang fest, in dem eine Anwendung die jeweilige Systemressource pro Tag nutzen darf. Für alle Anwendungen ist ein Standardkontingent konfiguriert, das sogenannte "kostenlose Kontingent". Dieses lässt bei einer effizienten Anwendung etwa fünf Millionen Seitenaufrufe pro Monat zu. Weitere Informationen zu Systemkontingenten finden Sie in der Kontingentdokumentation.

Wenn Ihre Anwendung wächst, benötigt sie wahrscheinlich mehr Ressourcen, als es im Rahmen der standardmäßigen Kontingentkonfiguration vorgesehen ist. Sie haben die Möglichkeit, zusätzliche Rechenressourcen zu erwerben, indem Sie für Ihre Anwendung die Abrechnung aktivieren. Mit der Abrechnung können Entwickler die Limits für alle Systemressourcen erhöhen und für noch höhere Limits für CPU, Bandbreite, Speicher und E-Mail-Nutzung bezahlen.

Wie melde ich eine Anwendung, die gegen die Nutzungsbedingungen verstößt?

Wenn Sie eine Anwendung melden möchten, die gegen die Nutzungsbedingungen von App Engine verstößt, kontaktieren Sie uns. Wir ermitteln dann, ob ein Verstoß vorliegt, und nehmen gegebenenfalls Kontakt mit dem Entwickler der Anwendung auf.

Soll ich das SDK für externe Anfragen verwenden?

Der Entwicklungsserver "dev_appserver" ist für lokale Testverfahren vorgesehen und lässt standardmäßig keine externen Verbindungen zu. Sie können diese Einstellung mit dem Flag --host <hostname> überschreiben, wenn Sie ihn ausführen. Dies wird jedoch nicht empfohlen, da die Sicherheitsvorkehrungen des SDK hierfür nicht vorgesehen sind und es zu Sicherheitslücken kommen kann.

Wie stelle ich komprimierte Inhalte bereit?

Siehe Antwortkomprimierung.

Unterstützt App Engine SSL (HTTPS)?

Mit App Engine können Sie SSL-Traffic (HTTPS) über Ihre appspot.com-Domain bereitstellen. Sie müssen Ihrem app.yaml-Handler für die URLs, über die sicherer Traffic unterstützt werden soll, lediglich den Parameter "secure" hinzufügen. Weitere Informationen zum Konfigurieren Ihrer Anwendung für sicheren Traffic finden Sie in der Dokumentation zur Anwendungskonfiguration (Java | Python | PHP | Go).

Sie können SSL-Traffic (HTTPS) auch über eine benutzerdefinierte Domain bereitstellen und haben die Möglichkeit, Grunddomains zu verwenden, wenn Sie eine benutzerdefinierte Domain mit SSL nutzen.

Kann ich in meinem Projekt Strict-Transport-Security-Header verwenden?

Es ist möglich, Strict-Transport-Security in App Engine zu verwenden. Wenn Sie Ihrer Anwendung HTTP-Strict-Transport-Security-Header (HSTS) hinzufügen möchten, müssen Sie die Header im Code Ihrer Anwendung implementieren, nicht in der Konfigurationsdatei Ihrer Anwendung (app.yaml oder appengine-web.xml).

Kann ich SSL (HTTPS) in App Engine mit meiner benutzerdefinierten Domain verwenden?

Sie können SSL über Ihre benutzerdefinierte Domain bereitstellen.

Verwenden Tools wie remote_api SSL (HTTPS)?

Die SDK-Tools, für die eine Anmeldung erforderlich ist (remote_api, appengine_rpc), verwenden SSL zur Übermittlung von E-Mail-Adresse und Passwort.

Das Python SDK und das Go SDK können das SSL-Zertifikat über die Remoteverbindung validieren. Dazu muss das Python-Modul ssl auf Ihrem System installiert sein. Wenn Sie Python 2.5 verwenden, können Sie das Modul von http://pypi.python.org/pypi/ssl/ installieren. Wenn beim Überprüfen des SSL-Zertifikats ein Fehler auftritt, wird von den Tools ein InvalidCertificateException ausgegeben, das den Fehler erklärt.

Das Java SDK aktiviert standardmäßig SSL. Falls während der Validierung des SSL-Zertifikats ein Fehler auftritt, wird eine javax.net.ssl.SSLHandshakeException ausgelöst.

Ich möchte meine Anwendung einer Grunddomain zuordnen (zum Beispiel http://example.com)

Mit einer "Grunddomain" können Nutzer direkt unter dem Domainnamen (http://example.com) auf Ihre Anwendung zugreifen, ohne dass eine Subdomain wie http://www.example.com oder http://myapp.example.com benötigt wird. Sie können Ihre App Engine-Anwendung mit einer Grunddomain in der Google Cloud-Projektkonsole einrichten. Hier finden Sie Informationen zur Verwendung benutzerdefinierter Domains.

Grunddomains werden auch unterstützt, wenn Sie eine benutzerdefinierte Domain mit SSL verwenden.

IP-Adressen für App Engine-Dienste

Ausgehende Dienste wie die URL Fetch API, die Sockets API und die Mail API verwenden einen großen Pool von IP-Adressen. Die IP-Adressbereiche in diesem Pool unterliegen regelmäßigen Änderungen. Bei zwei aufeinanderfolgenden API-Aufrufen derselben Anwendung kann beispielsweise der Eindruck entstehen, sie stammten von zwei verschiedenen IP-Adressen.

So finden Sie die aktuellen IP-Adressbereiche, die App Engine für ausgehenden Traffic verwendet:

  1. Geben Sie in einer Befehls-Shell den folgenden Befehl ein:
    nslookup -q=TXT _cloud-netblocks.googleusercontent.com 8.8.8.8

    Die Antwort enthält alle aktuellen _cloud-netblocks für App Engine. Beispiel:

    Non-authoritative answer:
    _cloud-netblocks.googleusercontent.com	text = "v=spf1 include:_cloud-netblocks1.googleusercontent.com include:_cloud-netblocks2.googleusercontent.com include:_cloud-netblocks3.googleusercontent.com include:_cloud-netblocks4.googleusercontent.com include:_cloud-netblocks5.googleusercontent.com ?all"

    Diese Ergebnisse sind nicht statisch. Wenn Sie den Befehl eingeben, werden möglicherweise mehr oder weniger Netzwerkblöcke als im obigen Beispiel angezeigt.

  2. Geben Sie für jeden in der Antwort aufgelisteten Netzwerkbereich die folgende Abfrage ein:
    nslookup -q=TXT netblock-name 8.8.8.8

    Wenn die vorherige Abfrage beispielsweise fünf Netzwerkbereiche zurückgegeben hat, würden Sie die folgenden fünf Abfragen vornehmen:

    nslookup -q=TXT _cloud-netblocks1.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks2.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks3.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks4.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks5.googleusercontent.com 8.8.8.8

Jede Abfrage eines bestimmten Netzwerkbereichs gibt einen IP-Bereich zurück, den Sie für ausgehenden App Engine-Traffic verwenden können. Die Abfrage von _cloud-netblocks1 im obigen Beispiel könnte beispielsweise Folgendes zurückgeben:

Non-authoritative answer:
_cloud-netblocks1.googleusercontent.com	text = "v=spf1 include:_cloud-netblocks6.googleusercontent.com include:_cloud-netblocks7.googleusercontent.com ip6:2600:1900::/35 ip4:8.34.208.0/20 ip4:8.35.192.0/21 ip4:8.35.200.0/23 ip4:23.236.48.0/20 ip4:23.251.128.0/19 ip4:34.64.0.0/11 ip4:34.96.0.0/14 ?all"

An diesem Beispiel erkennen wir, dass die IP-Bereiche 8.34.208.0/20 und 8.35.192.0/21 für den App Engine-Traffic verwendet werden können. Andere Abfragen für zusätzliche Netzwerkbereiche können zusätzliche IP-Bereiche zurückgeben.

Die Verwendung von Filtern für statische IP-Adressbereiche ist weder sicher noch effektiv. Ein Angreifer könnte beispielsweise eine schädliche App Engine-Anwendung einrichten, die denselben IP-Adressbereich wie Ihre Anwendung freigibt. Wir schlagen vor, dass Sie sich für einen Defense-in-Depth-Ansatz mit OAuth und Zertifikaten entscheiden.

Kann ich über eine private IP-Adresse auf meine App Engine-Instanz zugreifen?

App Engine selbst bietet keine Möglichkeit, statische IP-Adressen einer Anwendung zuzuordnen. Sie können jedoch Cloud Load Balancing und serverloses NEGS verwenden, um eine statische IP-Adresse für Ihren Load-Balancer zu reservieren, die dann Traffic an Ihre Anwendung weiterleitet. Informationen zu den Preisen finden Sie unter Preise für externe IP-Adressen.

Wie definiere ich Cronjobs für meine Anwendung?

Informationen zum Definieren von Cronjobs für Ihre Anwendung finden Sie in der sprachspezifischen Dokumentation (Java | Python | Go | PHP).

Was sind Aufgabenwarteschlangen?

Aufgabenwarteschlangen dienen als Mechanismus, mit dem neue Anfragen dynamisch hinzugefügt werden können, damit sie zu einem späteren Zeitpunkt ausgeführt werden. Wenn eine Anwendung Hintergrundtätigkeiten ausführen muss, kann diese Arbeit mithilfe der Task Queue API in kleine, separate Einheiten, die sogenannten Aufgaben, aufgeteilt werden. Diese Aufgaben können in eine oder mehrere Warteschlangen gestellt werden. App Engine ermittelt automatisch neue Aufgaben und führt sie aus, wenn dies durch die Systemressourcen zugelassen wird. Weitere Informationen finden Sie in der Dokumentation zur Task Queue API (Java | Python | Go | PHP).

Kann ich Google-Gruppen verwenden, um Zugriff auf mein App Engine-Projekt zu gewähren?

Wenn Sie Ihrem App Engine-Projekt eine Google-Gruppe hinzufügen, haben Mitglieder dieser Gruppe Zugriff auf die Ressourcen des Projekts, zum Beispiel auf den Datenspeicher, Aufgabenwarteschlangen, Memcache usw.

Wie verhindere ich, dass Nutzer oder Subnetze auf meine Anwendung zugreifen?

App Engine bietet einen DoS-Schutzdienst, mit dem Sie einer Sperrliste IP-Adressen oder Subnetze hinzufügen können. Weitere Informationen finden Sie in der Dokumentation zum DoS-Schutzdienst (Java | Python | Go | PHP).

Wie kann ich mehr Informationen zu Anwendungsausfällen und Schwierigkeiten mit dem Zugriff auf meine Anwendung erhalten?

Im Google Cloud-Status-Dashboard finden Sie Statusinformationen zu Google Cloud Platform-Diensten.

In China ist der Zugriff auf App Engine unter Umständen nur zeitweise möglich. Informationen zu Problemen beim Zugriff auf andere Google-Produkte in China finden Sie im Google Transparenzbericht.