So verwenden Sie App Engine Task Queue (Pull-Aufgaben) in Flask-Anwendungen (Modul 18)

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

Umfrage

Wie werden Sie diese Anleitung verwenden?

Nur lesen Lesen und Übungen durchführen

Wie würden Sie Ihre Erfahrung mit Python bewerten?

Anfänger Mittelstufe Fortgeschrittene

Wie würden Sie Ihre Erfahrungen mit Google Cloud-Diensten bewerten?

Anfänger Mittelstufe Fortgeschritten

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:

  1. Einrichtung/Vorbereitung
  2. Konfiguration aktualisieren
  3. Anwendungscode ändern

3. Einrichtung/Vorbereitung

In diesem Abschnitt wird Folgendes erläutert:

  1. Cloud-Projekt einrichten
  2. Beispiel-App für die Baseline abrufen
  3. 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.

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:

  1. Löschen Sie den Ordner lib, falls er vorhanden ist, und führen Sie pip install -t lib -r requirements.txt aus, um lib neu zu füllen. Wenn Sie sowohl Python 2 als auch Python 3 installiert haben, müssen Sie möglicherweise stattdessen den Befehl pip2 verwenden.
  2. Achten Sie darauf, dass Sie das gcloud-Befehlszeilentool installiert und initialisiert haben und sich mit der Verwendung vertraut gemacht haben.
  3. Legen Sie Ihr Cloud-Projekt mit gcloud config set project PROJECT_ID fest, wenn Sie Ihre PROJECT_ID nicht bei jedem ausgeführten gcloud-Befehl eingeben möchten.
  4. Beispiel-App mit gcloud app deploy bereitstellen
  5. Prüfen Sie, ob die App aus Modul 1 wie erwartet ausgeführt wird und die letzten Besuche anzeigt (siehe Abbildung unten).

a7a9d2b80d706a2b.png

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ügen
  • templates/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:

ad5fd3345efc13d0.png

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:

b667551dcbab1a09.png

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:

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/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • Die oben genannten Speicherlinks hängen von Ihrem PROJECT_ID und *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:

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

Modul 1

code

Code (nicht in diesem Tutorial enthalten)

Modul 18 (dieses Codelab)

code

Online-Referenzen

Unten finden Sie Ressourcen, die für diese Anleitung relevant sind:

App Engine-Aufgabenwarteschlange

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

Videos

Lizenz

Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.