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

1. Übersicht

Die Codelabs-Reihe zur Serverless Migration Station (zum Selbststudium, praxisorientierte Anleitungen) und ähnliche Videos sollen Entwickler von Google Cloud Serverless bei der Modernisierung ihrer Anwendungen unterstützen, indem sie eine oder mehrere Migrationen durchgehen, in erster Linie von Legacy-Diensten. Dadurch werden Ihre Anwendungen portabler und bieten mehr Optionen und Flexibilität, sodass Sie eine breitere Palette von Cloud-Produkten einbinden und darauf zugreifen sowie einfacher auf neuere Sprachversionen upgraden können. Der Schwerpunkt dieser Reihe liegt anfangs auf die ersten Cloud-Nutzer, in erster Linie auf Entwicklern von App Engine (Standardumgebung). Sie ist aber umfassend genug, um auch andere serverlose Plattformen wie Cloud Functions und Cloud Run oder gegebenenfalls andere Plattformen einzubeziehen.

In diesem Codelab erfahren Sie, wie Sie Pull-Aufgaben der App Engine-Aufgabenwarteschlange in die Beispiel-App aus dem Codelab für Modul 1 einbinden und verwenden. Wir fügen die Verwendung von Pull-Aufgaben in Modul 18 hinzu und migrieren diese Nutzung dann zu Cloud Pub/Sub, bevor wir in Modul 19 weitermachen. Diejenigen, die Aufgabenwarteschlangen für Push-Aufgaben verwenden, migrieren stattdessen zu Cloud Tasks und sollten sich stattdessen auf die Module 7 bis 9 beziehen.

Sie werden lernen,

  • Verwenden Sie die App Engine Task Queue API bzw. den gebündelten Dienst.
  • Einfache App Engine NDB-Anwendung für Python 2 Flask: Pull-Warteschlangennutzung hinzufügen

Voraussetzungen

Umfrage

Wie möchten Sie diese Anleitung nutzen?

<ph type="x-smartling-placeholder"></ph> Nur bis zum Ende lesen Lies sie dir durch und absolviere die Übungen

Wie würden Sie Ihre Erfahrung mit Python bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

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

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

2. Hintergrund

Wenn Sie Pull-Aufgaben der App Engine-Aufgabenwarteschlange migrieren möchten, fügen Sie deren Nutzung der vorhandenen Flask- und App Engine NDB-Anwendung hinzu, die sich aus dem Codelab für Modul 1 ergibt. In der Beispiel-App werden dem Endnutzer die letzten Besuche angezeigt. Das ist kein Problem, aber es ist noch interessanter, auch die Besucher zu erfassen, um zu sehen, wer die meisten Besucher hat.

Auch wenn wir für diese Besucherzahlen Push-Aufgaben verwenden könnten, möchten wir die Zuständigkeit zwischen der Beispiel-App, deren Aufgabe es ist, Besuche zu registrieren und Nutzern sofort zu antworten, und einem designierten "Worker" aufteilen. dessen Aufgabe es ist, die Besucherzahlen außerhalb des normalen Anfrage-Antwort-Workflows zusammenzuzählen.

Zur Implementierung dieses Designs 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 Back-End-Instanz oder als Code, der auf einer immer aktiven VM ausgeführt wird), als Cronjob oder als einfache Befehlszeilen-HTTP-Anfrage mit curl oder wget ausgeführt werden. Nach dieser Integration können Sie die Anwendung im nächsten Codelab (Modul 19) zu Cloud Pub/Sub migrieren.

Diese Anleitung umfasst die folgenden Schritte:

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

3. Einrichtung/Vorarbeit

In diesem Abschnitt wird Folgendes erläutert:

  1. Cloud-Projekt einrichten
  2. Baseline-Beispiel-App abrufen
  3. Referenz-App noch einmal bereitstellen und validieren

Mit diesen Schritten stellen Sie sicher, dass Sie mit funktionierendem Code beginnen.

1. Projekt einrichten

Wenn Sie das Codelab für Modul 1 abgeschlossen haben, verwenden Sie dasselbe Projekt (und Code) wieder. Alternativ können Sie ein neues Projekt erstellen oder ein anderes vorhandenes Projekt wiederverwenden. Achten Sie darauf, dass das Projekt ein aktives Rechnungskonto und eine aktivierte App Engine-Anwendung hat. Suchen Sie Ihre Projekt-ID, da Sie sie in diesem Codelab mehrmals benötigen werden. Verwenden Sie sie immer dann, wenn Sie die Variable PROJECT_ID finden.

2. Baseline-Beispiel-App abrufen

Eine der Voraussetzungen für dieses Codelab ist eine funktionierende App Engine-App für Modul 1. Schließen Sie das Codelab für Modul 1 ab (empfohlen) oder kopieren Sie die App für Modul 1 aus dem Repository. Unabhängig davon, ob Sie Ihren oder unseren verwenden, starten wir im Code für Modul 1. Dieses Codelab führt Sie durch die einzelnen Schritte und endet mit Code, der dem im Repository-Ordner „FINISH“ des Moduls 18 enthaltenen Ordner ähnelt.

Unabhängig davon, welche Anwendung für Modul 1 Sie verwenden, sollte der Ordner wie die Ausgabe unten aussehen, möglicherweise auch mit einem lib-Ordner:

$ ls
README.md               appengine_config.py     requirements.txt
app.yaml                main.py                 templates

3. Referenz-App noch einmal bereitstellen

Führen Sie die folgenden Schritte aus, um die Anwendung Modul 1 bereitzustellen:

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

a7a9d2b80d706a2b.png

4. Konfiguration aktualisieren

An den App Engine-Standardkonfigurationsdateien (app.yaml, requirements.txt, appengine_config.py) sind keine Änderungen erforderlich. Fügen Sie stattdessen die neue Konfigurationsdatei queue.yaml mit dem folgenden Inhalt hinzu und platzieren Sie sie im selben Verzeichnis auf oberster Ebene:

queue:
- name: pullq
  mode: pull

Die Datei queue.yaml gibt alle Aufgabenwarteschlangen an, die für Ihre Anwendung vorhanden sind. Eine Ausnahme bildet die default-Warteschlange [push], die automatisch von App Engine erstellt wird. In diesem Fall gibt es nur eine, eine Pull-Warteschlange mit dem Namen pullq. App Engine erfordert, dass die Anweisung mode als pull angegeben wird. Andernfalls wird standardmäßig eine Push-Warteschlange erstellt. Weitere Informationen zum Erstellen von Pull-Warteschlangen finden Sie in der Dokumentation. Weitere Optionen finden Sie auf der Referenzseite zu queue.yaml.

Stellen Sie diese Datei getrennt von Ihrer Anwendung bereit. Sie verwenden weiterhin gcloud app deploy, geben aber zusätzlich 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 werden die folgenden Dateien aktualisiert:

  • main.py – der Hauptanwendung wird die Verwendung von Pull-Warteschlangen hinzugefügt
  • templates/index.html – die Webvorlage wird aktualisiert, um die neuen Daten anzuzeigen

Importe und Konstanten

Der erste Schritt besteht darin, einen neuen Import und mehrere Konstanten hinzuzufügen, um Pull-Warteschlangen zu unterstützen:

  • Fügen Sie einen Import der Aufgabenwarteschlangenbibliothek google.appengine.api.taskqueue hinzu.
  • 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 jüngsten Besuche und die Top-Besucher (LIMIT) anzuzeigen.

Unten sehen Sie den ursprünglichen Code und wie er nach diesen Aktualisierungen aussieht:

VORHER:

from flask import Flask, render_template, request
from google.appengine.ext import ndb

app = Flask(__name__)

NACHHER:

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 sammeln und Aufgabe in Pull-Warteschlange erstellen)

Das Datenmodell Visit und die Abfragen von Besuchen, die in fetch_visits() angezeigt werden, bleiben unverändert. Die einzige Änderung in diesem Teil des Codes ist in store_visit() erforderlich. Zusätzlich zur Registrierung des Besuchs fügen Sie der Pull-Warteschlange 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)

NACHHER:

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 Besucher-Tracking erstellen

Fügen Sie ein Datenmodell VisitorCount hinzu, um Besucher zu erfassen. Es sollte Felder für die visitor selbst sowie eine Ganzzahl counter zur Verfolgung der Anzahl der Besuche enthalten. Fügen Sie dann eine neue Funktion hinzu (alternativ kann es ein Python-classmethod sein) mit dem Namen fetch_counts(), um die Top-Besucher in absteigender Reihenfolge abzufragen und zurückzugeben. Fügen Sie die Klasse und die Funktion direkt unter dem Text 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 die neue Funktion log_visitors() hinzu, um die Besucher über eine GET-Anfrage in /log zu protokollieren. Es verwendet ein Wörterbuch/Hash, um die Anzahl der letzten Besucher zu verfolgen, wobei für eine Stunde so viele Aufgaben wie möglich freigegeben werden. Für jede Aufgabe werden alle Besuche desselben Besuchers gezählt. Mit den vorhandenen Zahlen aktualisiert die Anwendung dann alle entsprechenden VisitorCount-Entitäten, die bereits in Datastore vorhanden sind, oder erstellt bei Bedarf neue Entitäten. Im letzten Schritt wird eine reine Textnachricht zurückgegeben, die angibt, wie viele Besucher sich aufgrund der Anzahl der verarbeiteten Aufgaben registriert haben. Fügen Sie diese Funktion zu main.py direkt unter fetch_counts() hinzu:

@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 Anzeigedaten aktualisieren

Zum Anzeigen der Top-Besucher aktualisieren Sie den Haupt-Handler root(), um fetch_counts() aufzurufen. Darüber hinaus wird die Vorlage aktualisiert, um die Anzahl der Top-Besucher und der letzten Besuche anzuzeigen. Fassen Sie die Besucherzahlen zusammen mit den letzten Besuchen aus dem Aufruf von fetch_visits() zusammen und gliedern Sie sie in ein einzelnes context-Objekt, das an die Webvorlage übergeben wird. Nachfolgend finden 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)

NACHHER:

@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)

Dies sind alle erforderlichen Änderungen für main.py. Hier ist eine bildliche Darstellung dieser Aktualisierungen zur Veranschaulichung, um dir einen allgemeinen Überblick über die Änderungen zu geben, die du an main.py vornimmst:

ad5fd3345efc13d0.png

Webvorlage mit neuen Anzeigedaten aktualisieren

Die Webvorlage templates/index.html muss aktualisiert werden, damit zusätzlich zur normalen Nutzlast der neuesten Besucher die Top-Besucher angezeigt werden. Kopieren Sie die Top-Besucher und deren Anzahl in eine Tabelle oben auf der Seite und rendern Sie die letzten Besuche wie zuvor. Die einzige andere Änderung besteht darin, die Zahl anzugeben, die über die Variable limit angezeigt wird, anstatt sie hartzucodieren. Folgende Aktualisierungen sollten Sie an Ihrer Webvorlage vornehmen:

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>

NACHHER:

<!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 notwendigen Änderungen zum Hinzufügen der Pull-Aufgaben für App Engine-Aufgabenwarteschlangen zur Beispiel-App für Modul 1 abgeschlossen. Ihr Verzeichnis stellt jetzt die Beispielanwendung für Modul 18 dar 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 dieses Codelab abgeschlossen. Dazu wird die App bereitgestellt und geprüft, ob sie wie vorgesehen und in allen ausgegebenen Ausgabedaten funktioniert. Worker separat ausführen, um die Besucherzahlen zu verarbeiten Führen Sie nach der App-Überprüfung alle Bereinigungsschritte durch und erwägen Sie die nächsten Schritte.

Anwendung bereitstellen und prüfen

Sie müssen Ihre Pull-Warteschlange bereits eingerichtet haben, so wie es in diesem Codelab mit gcloud app deploy queue.yaml bereits geschehen ist. Wenn dies abgeschlossen ist und die Beispielanwendung einsatzbereit ist, stellen Sie die Anwendung mit gcloud app deploy bereit. Die Ausgabe sollte mit der App von Modul 1 identisch sein, mit der Ausnahme, dass sie jetzt einen „Top-Besucher“ enthält. ganz oben:

b667551dcbab1a09.png

Im aktualisierten Web-Front-End werden die wichtigsten Besucher und die letzten Besuche angezeigt. Beachten Sie jedoch, dass die Besucherzahlen diesen Besuch nicht enthalten. Die App zeigt die Anzahl der vorherigen Besucher an, während eine neue Aufgabe gelöscht wird, wodurch sich die Anzahl dieses Besuchers in die Pull-Warteschlange erhöht. Eine Aufgabe, die noch verarbeitet werden muss.

Sie können die Aufgabe ausführen, indem Sie /log aufrufen. Es gibt mehrere Möglichkeiten:

Wenn Sie beispielsweise curl verwenden, um eine GET-Anfrage an /log zu senden, würde Ihre Ausgabe so aussehen, wenn 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 Website-Besuch berücksichtigt. Fertig!

Herzlichen Glückwunsch! Sie haben dieses Codelab zum Hinzufügen der Verwendung des App Engine-Pull-Warteschlangendienstes für Aufgabenwarteschlangen zur Beispiel-App erfolgreich abgeschlossen. Es kann jetzt in Modul 19 zu Cloud Pub/Sub, Cloud NDB und Python 3 migriert werden.

Bereinigen

Allgemein

Falls Sie vorerst fertig sind, empfehlen wir Ihnen, Ihre App Engine-Anwendung zu deaktivieren, um Gebühren zu vermeiden. Wenn Sie jedoch weitere Tests oder Experimente durchführen möchten, bietet die App Engine-Plattform ein kostenloses Kontingent. Solange Sie diese Nutzungsstufe nicht überschreiten, sollten Ihnen keine Kosten in Rechnung gestellt werden. Das bezieht sich auf die Rechenleistung. Es können jedoch auch Gebühren für relevante App Engine-Dienste anfallen. Weitere Informationen finden Sie auf der Preisseite. Wenn diese Migration andere Cloud-Dienste betrifft, werden diese separat abgerechnet. Lesen Sie in beiden Fällen gegebenenfalls den Abschnitt „Speziell für dieses Codelab“. weiter unten.

Zur vollständigen Offenlegung fallen bei der Bereitstellung auf einer serverlosen Computing-Plattform von Google Cloud wie App Engine geringfügige Build- und Speicherkosten an. Für Cloud Build und Cloud Storage gibt es ein eigenes kostenloses Kontingent. Die Speicherung dieses Images verbraucht einen Teil dieses Kontingents. Möglicherweise leben Sie in einer Region, in der es keine solche kostenlose Stufe gibt. Achten Sie daher auf Ihre Speichernutzung, um potenzielle Kosten zu minimieren. Bestimmte Cloud Storage-„Ordner“ sollten Sie Folgendes überprüfen:

  • 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 Speicherlinks oben hängen von Ihrer PROJECT_ID- und *LOC*-Adresse ab, z. B. „us“ wenn Ihre App in den USA gehostet wird.

Wenn Sie jedoch nicht mit dieser Anwendung oder anderen verwandten Migrations-Codelabs fortfahren und alles vollständig löschen möchten, beenden Sie Ihr Projekt.

Nur für dieses Codelab

Die unten aufgeführten Dienste gelten nur für dieses Codelab. Weitere Informationen finden Sie in der Dokumentation des jeweiligen Produkts:

Nächste Schritte

Bei dieser „Migration“ Sie haben der Beispiel-App für Modul 1 die Verwendung von Push-Warteschlangen für Aufgabenwarteschlangen hinzugefügt, indem Sie die Unterstützung für das Besucher-Tracking hinzugefügt und so die Beispiel-App für Modul 18 implementiert haben. Bei der nächsten Migration führen Sie ein Upgrade der App Engine-Pull-Aufgaben auf Cloud Pub/Sub durch. Seit Ende 2021 müssen Nutzer beim Upgrade auf Python 3 nicht mehr zu Cloud Pub/Sub migrieren. Mehr dazu erfahren 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). Außerdem werden produktübergreifende Migrationen zu Cloud Run und Cloud Functions durchgeführt. Auf alle Inhalte der serverlosen Migrationsstation (Codelabs, Videos, Quellcode [falls verfügbar]) kann über das Open-Source-Repository zugegriffen werden.

7. Migration zu Python 3

Im Herbst 2021 hat das App Engine-Team die Unterstützung vieler gebündelter Dienste auf Laufzeiten der 2. Generation erweitert, die eine Laufzeit der 1. Generation haben. Daher müssen Sie nicht mehr von gebündelten Diensten wie App Engine Task Queue zu eigenständigen Cloud-Diensten oder zu Drittanbieterdiensten wie Cloud Pub/Sub migrieren, wenn Sie Ihre Anwendung zu Python 3 portieren. Das heißt, Sie können die Aufgabenwarteschlange in App Engine-Anwendungen in Python 3 weiterhin verwenden, solange Sie den Code so überarbeiten, dass aus Laufzeiten der nächsten Generation auf gebündelte Dienste zugegriffen wird.

Weitere Informationen zur Migration gebündelter Dienste zu Python 3 finden Sie im Codelab zu Modul 17 und im entsprechenden Video. Obwohl dieses Thema nicht für Modul 18 vorgesehen ist, finden Sie unten einen Link zu Python 3-Versionen der Modul 1-Anwendung, die in Python 3 portiert wurden und noch App Engine NDB verwenden. (Irgendwann wird auch eine Python 3-Version der Modul 18-Anwendung zur Verfügung gestellt.)

8. Zusätzliche Ressourcen

Im Folgenden finden Sie zusätzliche Ressourcen für Entwickler, die sich näher mit diesem oder verwandten Migrationsmodul und ähnlichen Produkten befassen. 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.

Codelab-Probleme/Feedback

Wenn Sie Probleme mit diesem Codelab feststellen, suchen Sie bitte zuerst nach dem Problem, bevor Sie es einreichen. Links zum Suchen und Erstellen neuer Ausgaben:

Migrationsressourcen

Links zu den Repository-Ordnern für Modul 1 (START) und Modul 18 (FINISH) finden Sie in der folgenden Tabelle. Sie können auch über das Repository für alle App Engine-Codelab-Migrationen aufgerufen werden. oder eine ZIP-Datei herunterladen.

Codelab

Python 2

Python 3

Modul 1

code

code (in dieser Anleitung nicht enthalten)

Modul 18 (dieses Codelab)

code

Onlinereferenzen

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

App Engine-Aufgabenwarteschlange

App Engine-Plattform

App Engine-Dokumentation

Python 2-Laufzeit der App Engine (Standardumgebung)

Python 3-Laufzeit von App Engine (Standardumgebung)

Unterschiede zwischen Python 2 und 3 Laufzeiten der App Engine (Standardumgebung)

Python 2 zu 3 Migrationsanleitung für App Engine (Standardumgebung)

Informationen zu Preisen und Kontingenten für App Engine

Einführung der App Engine-Plattform der zweiten Generation (2018)

Langzeitsupport für Legacy-Laufzeiten

Beispiele für die Migration der Dokumentation

Weitere Cloud-Informationen

Videos

Lizenz

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