1. Übersicht
Die Codelabs der Reihe „Serverless Migration Station“ (selbstgesteuerte, praktische Anleitungen) und die zugehörigen Videos sollen serverlosen Google Cloud-Entwicklern helfen, ihre Anwendungen zu modernisieren. Dazu werden sie durch eine oder mehrere Migrationen geführt, bei denen es in erster Linie darum geht, von Legacy-Diensten wegzukommen. Dadurch werden Ihre Apps portierbarer und Sie erhalten mehr Optionen und Flexibilität. Sie können eine größere Auswahl an Cloud-Produkten einbinden und darauf zugreifen und einfacher auf neuere Sprachversionen upgraden. Die Reihe konzentriert sich zwar anfangs auf die ersten Cloud-Nutzer, vor allem auf App Engine-Entwickler (Standardumgebung), ist aber breit genug, um auch andere serverlose Plattformen wie Cloud Functions und Cloud Run oder andere Plattformen einzubeziehen, sofern zutreffend.
In diesem Codelab erfahren Sie, wie Sie App Engine-Aufgabenwarteschlangen-Pull-Aufgaben in die Beispiel-App aus dem Codelab zu Modul 1 einfügen und verwenden. In dieser Anleitung für Modul 18 fügen wir die Verwendung von Pull-Aufgaben hinzu und migrieren diese Verwendung dann in Modul 19 zu Cloud Pub/Sub. Nutzer, die Aufgabenwarteschlangen für Push-Aufgaben verwenden, migrieren stattdessen zu Cloud Tasks und sollten sich die Module 7 bis 9 ansehen.
Lerninhalte
- App Engine Task Queue API/gebündelten Dienst verwenden
- Nutzung von Pull-Warteschlangen in einer einfachen Python 2-Flask-App Engine NDB-App hinzufügen
Voraussetzungen
- Ein Google Cloud Platform-Projekt mit einem aktiven GCP-Rechnungskonto
- Grundlegende Python-Kenntnisse
- Grundkenntnisse zu gängigen Linux-Befehlen
- Grundlegende Kenntnisse zur Entwicklung und Bereitstellung von App Engine-Anwendungen
- Eine funktionierende App Engine-App für Modul 1 (Code-Lab durcharbeiten [empfohlen] oder die App aus dem Repository kopieren)
Umfrage
Wie werden Sie diese Anleitung verwenden?
Wie würden Sie Ihre Erfahrung mit Python bewerten?
Wie würden Sie Ihre Erfahrungen mit Google Cloud-Diensten bewerten?
2. Hintergrund
Wenn Sie Pull-Aufgaben aus der App Engine-Aufgabenwarteschlange migrieren möchten, fügen Sie die Verwendung der vorhandenen Flask- und App Engine NDB-Anwendung hinzu, die aus dem Codelab zu Modul 1 stammt. In der Beispiel-App werden die letzten Besuche des Endnutzers angezeigt. Das ist in Ordnung, aber es ist noch interessanter, auch die Besucher zu erfassen, um zu sehen, wer am häufigsten vorbeikommt.
Wir könnten zwar Push-Aufgaben für diese Besucherzahlen verwenden, möchten die Verantwortung jedoch zwischen der Beispiel-App, die Besuche registriert und sofort auf Nutzer reagiert, und einem bestimmten „Worker“ aufteilen, der die Besucherzahlen außerhalb des normalen Anfrage-Antwort-Ablaufs zusammenzählt.
Um dieses Design zu implementieren, fügen wir der Hauptanwendung die Verwendung von Pull-Warteschlangen hinzu und unterstützen die Worker-Funktionalität. Der Worker kann als separater Prozess (z. B. als Backend-Instanz oder als Code, der auf einer VM ausgeführt wird, die immer aktiv ist), als Cronjob oder als einfache HTTP-Befehlszeilenanfrage mit curl oder wget ausgeführt werden. Nach dieser Integration können Sie die App im nächsten Codelab (Modul 19) zu Cloud Pub/Sub migrieren.
Diese Anleitung umfasst die folgenden Schritte:
- Einrichtung/Vorbereitung
- Konfiguration aktualisieren
- Anwendungscode ändern
3. Einrichtung/Vorbereitung
In diesem Abschnitt wird Folgendes erläutert:
- Cloud-Projekt einrichten
- Beispiel-App für die Baseline abrufen
- Ausgangsanwendung (neu) bereitstellen und validieren
Mit diesen Schritten stellen Sie sicher, dass Sie mit funktionierendem Code beginnen.
1. Projekt einrichten
Wenn Sie das Codelab zu Modul 1 abgeschlossen haben, können Sie dasselbe Projekt (und denselben Code) wiederverwenden. Alternativ können Sie ein neues Projekt erstellen oder ein anderes vorhandenes Projekt wiederverwenden. Prüfen Sie, ob das Projekt ein aktives Abrechnungskonto und eine aktivierte App Engine-Anwendung hat. Suchen Sie nach Ihrer Projekt-ID, da Sie sie mehrmals in diesem Codelab benötigen. Verwenden Sie sie immer, wenn Sie auf die Variable PROJECT_ID stoßen.
2. Beispiel-App für die Baseline abrufen
Eine der Voraussetzungen für dieses Codelab ist eine funktionierende App Engine-App aus Modul 1. Führen Sie das Codelab zu Modul 1 aus (empfohlen) oder kopieren Sie die App aus Modul 1 aus dem Repository. Unabhängig davon, ob Sie Ihren oder unseren Code verwenden, ist der Code aus Modul 1 der Ausgangspunkt. In diesem Codelab werden Sie durch jeden Schritt geführt. Am Ende erhalten Sie Code, der dem im Repo-Ordner „FINISH“ von Modul 18 ähnelt.
- START: Ordner für Modul 1 (Python 2)
- ABSCHLUSS: Ordner für Modul 18 (Python 2)
- Gesamtes Repository (zum Klonen oder Herunterladen einer ZIP-Datei)
Unabhängig davon, welche App aus Modul 1 Sie verwenden, sollte der Ordner wie in der folgenden Ausgabe aussehen, möglicherweise auch mit einem lib-Ordner:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. Referenz-App (erneut) bereitstellen
Führen Sie die folgenden Schritte aus, um die App aus Modul 1 bereitzustellen:
- Löschen Sie den Ordner
lib, falls er vorhanden ist, und führen Siepip install -t lib -r requirements.txtaus, umlibneu zu füllen. Wenn Sie sowohl Python 2 als auch Python 3 installiert haben, müssen Sie möglicherweise stattdessen den Befehlpip2verwenden. - Achten Sie darauf, dass Sie das
gcloud-Befehlszeilentool installiert und initialisiert haben und sich mit der Verwendung vertraut gemacht haben. - Legen Sie Ihr Cloud-Projekt mit
gcloud config set projectPROJECT_IDfest, wenn Sie IhrePROJECT_IDnicht bei jedem ausgeführtengcloud-Befehl eingeben möchten. - Beispiel-App mit
gcloud app deploybereitstellen - Prüfen Sie, ob die App aus Modul 1 wie erwartet ausgeführt wird und die letzten Besuche anzeigt (siehe Abbildung unten).

4. Konfiguration aktualisieren
An den Standardkonfigurationsdateien für App Engine (app.yaml, requirements.txt, appengine_config.py) sind keine Änderungen erforderlich. Fügen Sie stattdessen eine neue Konfigurationsdatei, queue.yaml, mit dem folgenden Inhalt hinzu und legen Sie sie im selben Verzeichnis der obersten Ebene ab:
queue:
- name: pullq
mode: pull
In der Datei queue.yaml werden alle Aufgabenwarteschlangen angegeben, die für Ihre App vorhanden sind (mit Ausnahme der Push-Warteschlange default, die automatisch von App Engine erstellt wird). In diesem Fall gibt es nur eine, nämlich eine Pull-Warteschlange mit dem Namen pullq. In App Engine muss die mode-Anweisung als pull angegeben werden. Andernfalls wird standardmäßig eine Push-Warteschlange erstellt. Weitere Informationen zum Erstellen von Pull-Warteschlangen Weitere Optionen finden Sie auch auf der Referenzseite zu queue.yaml.
Stellen Sie diese Datei separat von Ihrer App bereit. Sie verwenden weiterhin gcloud app deploy, geben aber auch queue.yaml in der Befehlszeile an:
$ gcloud app deploy queue.yaml Configurations to update: descriptor: [/tmp/mod18-gaepull/queue.yaml] type: [task queues] target project: [my-project] WARNING: Caution: You are updating queue configuration. This will override any changes performed using 'gcloud tasks'. More details at https://cloud.google.com/tasks/docs/queue-yaml Do you want to continue (Y/n)? Updating config [queue]...⠹WARNING: We are using the App Engine app location (us-central1) as the default location. Please use the "--location" flag if you want to use a different location. Updating config [queue]...done. Task queues have been updated. Visit the Cloud Platform Console Task Queues page to view your queues and cron jobs. $
5. Anwendungscode ändern
In diesem Abschnitt finden Sie Aktualisierungen der folgenden Dateien:
main.py– Pull-Warteschlangen zur Hauptanwendung hinzufügentemplates/index.html– Aktualisieren Sie die Webvorlage, damit die neuen Daten angezeigt werden.
Importe und Konstanten
Als Erstes müssen Sie einen neuen Import und mehrere Konstanten hinzufügen, um Pull-Warteschlangen zu unterstützen:
- Fügen Sie einen Import der Task Queue-Bibliothek hinzu:
google.appengine.api.taskqueue. - Fügen Sie drei Konstanten hinzu, um das Leasing der maximalen Anzahl von Pull-Aufgaben (
TASKS) für eine Stunde (HOUR) aus unserer Pull-Warteschlange (QUEUE) zu unterstützen. - Fügen Sie eine Konstante hinzu, um die letzten Besuche sowie die wichtigsten Besucher (
LIMIT) anzuzeigen.
Unten sehen Sie den ursprünglichen Code und wie er nach den Aktualisierungen aussieht:
VORHER:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
app = Flask(__name__)
DANACH:
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb
HOUR = 3600
LIMIT = 10
TASKS = 1000
QNAME = 'pullq'
QUEUE = taskqueue.Queue(QNAME)
app = Flask(__name__)
Pull-Aufgabe hinzufügen (Daten für Aufgabe erfassen und Aufgabe in Pull-Warteschlange erstellen)
Das Datenmodell Visit bleibt unverändert, ebenso wie die Abfrage von Besuchen, die in fetch_visits() angezeigt werden sollen. Die einzige Änderung, die in diesem Teil des Codes erforderlich ist, betrifft store_visit(). Registrieren Sie nicht nur den Besuch, sondern fügen Sie der Pull-Warteschlange auch eine Aufgabe mit der IP-Adresse des Besuchers hinzu, damit der Worker den Besucherzähler erhöhen kann.
VORHER:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
DANACH:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit in Datastore and queue request to bump visitor count'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
QUEUE.add(taskqueue.Task(payload=remote_addr, method='PULL'))
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
Datenmodell und Abfragefunktion für das Besuchertracking erstellen
Fügen Sie ein Datenmodell VisitorCount hinzu, um Besucher zu erfassen. Es sollte Felder für die visitor selbst sowie eine Ganzzahl counter enthalten, um die Anzahl der Besuche zu erfassen. Fügen Sie dann eine neue Funktion (alternativ kann es sich um eine Python-classmethod handeln) mit dem Namen fetch_counts() hinzu, um die Besucher mit den meisten Besuchen abzufragen und in absteigender Reihenfolge zurückzugeben. Fügen Sie die Klasse und Funktion direkt unter dem Hauptteil von fetch_visits() ein:
class VisitorCount(ndb.Model):
visitor = ndb.StringProperty(repeated=False, required=True)
counter = ndb.IntegerProperty()
def fetch_counts(limit):
'get top visitors'
return VisitCount.query().order(-VisitCount.counter).fetch(limit)
Worker-Code hinzufügen
Fügen Sie eine neue Funktion log_visitors() hinzu, um die Besucher über eine GET-Anfrage an /log zu protokollieren. Dabei wird ein Dictionary/Hash verwendet, um die letzten Besucherzahlen zu erfassen. So werden möglichst viele Aufgaben für eine Stunde geleast. Für jede Aufgabe werden alle Besuche desselben Besuchers gezählt. Anschließend aktualisiert die App alle entsprechenden VisitorCount-Entitäten, die bereits in Datastore vorhanden sind, oder erstellt bei Bedarf neue. Im letzten Schritt wird eine Nur-Text-Mitteilung zurückgegeben, in der angegeben wird, wie viele Besucher aus wie vielen verarbeiteten Aufgaben registriert wurden. Fügen Sie diese Funktion in main.py direkt unter fetch_counts() ein:
@app.route('/log')
def log_visitors():
'worker processes recent visitor counts and updates them in Datastore'
# tally recent visitor counts from queue then delete those tasks
tallies = {}
tasks = QUEUE.lease_tasks(HOUR, TASKS)
for task in tasks:
visitor = task.payload
tallies[visitor] = tallies.get(visitor, 0) + 1
if tasks:
QUEUE.delete_tasks(tasks)
# increment those counts in Datastore and return
for visitor in tallies:
counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
if not counter:
counter = VisitorCount(visitor=visitor, counter=0)
counter.put()
counter.counter += tallies[visitor]
counter.put()
return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
len(tasks), len(tallies))
Haupt-Handler mit neuen Displaydaten aktualisieren
Wenn Sie die wichtigsten Besucher anzeigen möchten, aktualisieren Sie den Haupthandler root(), um fetch_counts() aufzurufen. Außerdem wird die Vorlage aktualisiert, um die Anzahl der wichtigsten Besucher und die letzten Besuche anzuzeigen. Packen Sie die Besucherzahlen zusammen mit den letzten Besuchen aus dem Aufruf von fetch_visits() in ein einzelnes context, das an die Webvorlage übergeben wird. Unten sehen Sie den Code vor und nach dieser Änderung:
VORHER:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
DANACH:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
context = {
'limit': LIMIT,
'visits': fetch_visits(LIMIT),
'counts': fetch_counts(LIMIT),
}
return render_template('index.html', **context)
Das sind alle Änderungen, die für main.py erforderlich sind. Hier finden Sie eine bildliche Darstellung dieser Aktualisierungen, um Ihnen eine allgemeine Vorstellung der Änderungen zu geben, die Sie an main.py vornehmen:

Webvorlage mit neuen Anzeigedaten aktualisieren
Für die Webvorlage templates/index.html ist eine Aktualisierung erforderlich, damit neben der normalen Nutzlast der letzten Besucher auch die wichtigsten Besucher angezeigt werden. Die Besucher mit den meisten Besuchen und die entsprechenden Zählwerte werden in einer Tabelle oben auf der Seite angezeigt. Die neuesten Besuche werden wie bisher gerendert. Die einzige andere Änderung besteht darin, die angezeigte Zahl über die Variable limit anzugeben, anstatt sie fest zu codieren. Das sind die Änderungen, die Sie an Ihrer Webvorlage vornehmen sollten:
VORHER:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
DANACH:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Top {{ limit }} visitors</h3>
<table border=1 cellspacing=0 cellpadding=2>
<tr><th>Visitor</th><th>Visits</th></tr>
{% for count in counts %}
<tr><td>{{ count.visitor|e }}</td><td align="center">{{ count.counter }}</td></tr>
{% endfor %}
</table>
<h3>Last {{ limit }} visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
Damit sind die erforderlichen Änderungen abgeschlossen, um der Beispielanwendung aus Modul 1 die Verwendung von App Engine-Task Queue-Pull-Aufgaben hinzuzufügen. Ihr Verzeichnis entspricht jetzt der Beispielanwendung aus Modul 18 und sollte die folgenden Dateien enthalten:
$ ls README.md appengine_config.py queue.yaml templates app.yaml main.py requirements.txt
6. Zusammenfassung/Bereinigung
In diesem Abschnitt wird das Codelab abgeschlossen, indem die App bereitgestellt und geprüft wird, ob sie wie vorgesehen funktioniert und ob die Ausgabe korrekt ist. Führen Sie den Worker separat aus, um die Besucherzahlen zu verarbeiten. Führen Sie nach der App-Validierung alle erforderlichen Bereinigungsschritte aus und überlegen Sie sich, wie Sie weiter vorgehen möchten.
Anwendung bereitstellen und überprüfen
Achten Sie darauf, dass Sie Ihre Pull-Warteschlange bereits eingerichtet haben, wie wir es oben in diesem Codelab mit gcloud app deploy queue.yaml getan haben. Wenn Sie das abgeschlossen haben und Ihre Beispiel-App bereit ist, stellen Sie Ihre App mit gcloud app deploy bereit. Die Ausgabe sollte mit der App aus Modul 1 identisch sein, nur dass oben jetzt eine Tabelle mit den „Top-Besuchern“ angezeigt wird:

Im aktualisierten Web-Frontend werden zwar die wichtigsten Besucher und die letzten Besuche angezeigt, die Besucherzahlen enthalten jedoch diesen Besuch nicht. In der App werden die bisherigen Besucherzahlen angezeigt, während eine neue Aufgabe in die Pull-Warteschlange eingefügt wird, um die Besucherzahl zu erhöhen. Diese Aufgabe wartet noch auf die Verarbeitung.
Sie können die Aufgabe auf verschiedene Arten ausführen, indem Sie /log aufrufen:
- Einen App Engine-Backend-Dienst
- Ein
cron-Job - Webbrowser
- Eine HTTP-Anfrage über die Befehlszeile (
curl,wgetusw.)
Wenn Sie beispielsweise curl verwenden, um eine GET-Anfrage an /log zu senden, sieht die Ausgabe so aus, sofern Sie Ihre PROJECT_ID angegeben haben:
$ curl https://PROJECT_ID.appspot.com/log DONE (with 1 task[s] logging 1 visitor[s])
Die aktualisierte Anzahl wird dann beim nächsten Websitebesuch angezeigt. Geschafft!
Herzlichen Glückwunsch! Sie haben dieses Codelab abgeschlossen und der Beispielanwendung erfolgreich den App Engine-Dienst für Aufgabenwarteschlangen mit Pull-Warteschlangen hinzugefügt. Sie ist jetzt bereit für die Migration zu Cloud Pub/Sub, Cloud NDB und Python 3 in Modul 19.
Bereinigen
Allgemein
Wenn Sie die App vorerst nicht mehr benötigen, empfehlen wir Ihnen, sie zu deaktivieren, um Abrechnungen zu vermeiden. Wenn Sie jedoch weitere Tests durchführen möchten, bietet die App Engine-Plattform ein kostenloses Kontingent. Solange Sie diese Nutzungsebene nicht überschreiten, werden Ihnen keine Gebühren berechnet. Das gilt für die Rechenleistung. Es können aber auch Gebühren für relevante App Engine-Dienste anfallen. Weitere Informationen finden Sie auf der Preisseite. Wenn bei dieser Migration andere Cloud-Dienste beteiligt sind, werden diese separat abgerechnet. Sehen Sie sich in beiden Fällen gegebenenfalls den Abschnitt „Spezifisch für dieses Codelab“ unten an.
Die Bereitstellung auf einer serverlosen Google Cloud-Compute-Plattform wie App Engine verursacht geringe Build- und Speicherkosten. Cloud Build und Cloud Storage haben jeweils ein eigenes kostenloses Kontingent. Das Speichern dieses Bildes verbraucht einen Teil dieses Kontingents. Möglicherweise leben Sie jedoch in einer Region, in der es kein solches kostenloses Kontingent gibt. Achten Sie daher auf Ihre Speichernutzung, um potenzielle Kosten zu minimieren. Folgende Cloud Storage-„Ordner“ sollten Sie sich ansehen:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/imagesconsole.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com- Die oben genannten Speicherlinks hängen von Ihrem
PROJECT_IDund *LOC*ab, z. B. „us“, wenn Ihre App in den USA gehostet wird.
Wenn Sie diese Anwendung oder andere zugehörige Migrations-Codelabs nicht weiter verwenden und alles vollständig löschen möchten, beenden Sie Ihr Projekt.
Spezifisch für dieses Codelab
Die unten aufgeführten Dienste sind nur für dieses Codelab verfügbar. Weitere Informationen finden Sie in der Dokumentation der einzelnen Produkte:
- Für den App Engine-Aufgabenwarteschlangendienst fallen gemäß der Preisseite für Legacy-Bundled Services wie Aufgabenwarteschlange keine zusätzlichen Abrechnungskosten an.
- Der Dienst App Engine Datastore wird von Cloud Datastore (Cloud Firestore im Datastore-Modus) bereitgestellt, das ebenfalls eine kostenlose Stufe bietet. Weitere Informationen finden Sie auf der Preisseite.
Nächste Schritte
Bei dieser „Migration“ haben Sie die Verwendung von Push-Warteschlangen für Aufgabenwarteschlangen in die Beispiel-App aus Modul 1 aufgenommen, indem Sie die Unterstützung für das Erfassen von Besucherdaten hinzugefügt und so die Beispiel-App aus Modul 18 implementiert haben. Bei der nächsten Migration werden Sie App Engine-Pull-Aufgaben auf Cloud Pub/Sub umstellen. Seit Ende 2021 ist es nicht mehr erforderlich, bei der Aktualisierung auf Python 3 zu Cloud Pub/Sub zu migrieren. Weitere Informationen finden Sie im nächsten Abschnitt.
Informationen zur Migration zu Cloud Pub/Sub finden Sie im Codelab zu Modul 19. Darüber hinaus sind weitere Migrationen zu berücksichtigen, z. B. Cloud Datastore, Cloud Memorystore, Cloud Storage oder Cloud Tasks (Push-Warteschlangen). Es gibt auch produktübergreifende Migrationen zu Cloud Run und Cloud Functions. Alle Serverless Migration Station-Inhalte (Codelabs, Videos, Quellcode [sofern verfügbar]) sind im zugehörigen Open-Source-Repository verfügbar.
7. Migration zu Python 3
Im Herbst 2021 hat das App Engine-Team die Unterstützung vieler gebündelter Dienste auf Laufzeiten der zweiten Generation (mit einer Laufzeit der ersten Generation) ausgeweitet. Daher müssen Sie beim Portieren Ihrer App zu Python 3 nicht mehr von gebündelten Diensten wie App Engine Task Queue zu eigenständigen Cloud- oder Drittanbieterdiensten wie Cloud Pub/Sub migrieren. Mit anderen Worten: Sie können Task Queue weiterhin in Python 3-App Engine-Anwendungen verwenden, sofern Sie den Code so anpassen, dass über Laufzeiten der nächsten Generation auf gebündelte Dienste zugegriffen wird.
Weitere Informationen zur Migration der Verwendung gebündelter Dienste zu Python 3 finden Sie im Codelab zu Modul 17 und im entsprechenden Video. Dieses Thema fällt nicht in den Rahmen von Modul 18. Unten finden Sie jedoch Python 3-Versionen der Modul 1-App, die zu Python 3 portiert wurden und weiterhin App Engine NDB verwenden. (Irgendwann wird auch eine Python 3-Version der App für Modul 18 verfügbar sein.)
8. Zusätzliche Ressourcen
Unten finden Sie weitere Ressourcen für Entwickler, die sich näher mit diesem oder einem ähnlichen Migrationsmodul sowie mit zugehörigen Produkten befassen möchten. Dazu gehören Orte, an denen Sie Feedback zu diesen Inhalten geben können, Links zum Code und verschiedene Dokumentationen, die für Sie nützlich sein könnten.
Probleme mit Codelabs/Feedback
Wenn Sie Probleme mit diesem Codelab feststellen, suchen Sie bitte zuerst nach Ihrem Problem, bevor Sie es melden. Links zum Suchen und Erstellen neuer Probleme:
Migrationsressourcen
Links zu den Repository-Ordnern für Modul 1 (START) und Modul 18 (FINISH) finden Sie in der Tabelle unten. Sie können auch über das Repository für alle App Engine-Codelab-Migrationen auf sie zugreifen. Klonen Sie es oder laden Sie eine ZIP-Datei herunter.
Codelab | Python 2 | Python 3 |
Code (nicht in diesem Tutorial enthalten) | ||
Modul 18 (dieses Codelab) | – |
Online-Referenzen
Unten finden Sie Ressourcen, die für diese Anleitung relevant sind:
App Engine-Aufgabenwarteschlange
- App Engine Task Queue – Übersicht
- App Engine-Aufgabenwarteschlangen – Übersicht über Pull-Warteschlangen
- App Engine-Beispielanwendung für Pull-Warteschlange für Task Queue
- Pull-Warteschlangen für die Aufgabenwarteschlange erstellen
- Google I/O 2011 – Einführungsvideo zur Pull-Warteschlange ( Votelator-Beispiel-App)
- Referenz zu
queue.yaml queue.yamlim Vergleich zu Cloud Tasks- Migrationsleitfaden für Pull-Warteschlangen zu Pub/Sub
- Beispieldokumentation für die Migration von App Engine-Aufgabenwarteschlangen-Pull-Warteschlangen zu Cloud Pub/Sub
App Engine-Plattform
App Engine-Dokumentation
Python 2-Laufzeit für die App Engine-Standardumgebung
Python 3-Laufzeit für die App Engine-Standardumgebung
Unterschiede zwischen den Python 2- und Python 3-Laufzeiten in App Engine (Standardumgebung)
Migrationsanleitung für App Engine (Standardumgebung) von Python 2 zu Python 3
Informationen zu Preisen und Kontingenten für App Engine
Einführung der App Engine-Plattform der zweiten Generation (2018)
Langfristiger Support für ältere Laufzeiten
Beispiele für die Dokumentationsmigration
Andere Cloud-Informationen
- Python auf der Google Cloud Platform
- Google Cloud Python-Clientbibliotheken
- Kostenlose Stufe von Google Cloud
- Google Cloud SDK (
gcloud-Befehlszeilentool) - Gesamte Google Cloud-Dokumentation
Videos
- Serverless Migration Station
- Serverless Expeditions
- Google Cloud Tech abonnieren
- Google Developers abonnieren
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.