Erfahren Sie, wie Sie Ihre vorhandene App Engine-Anwendung von der Go 1.11-Laufzeit zu den Laufzeiten von Go 1.12+ der App Engine-Standardumgebung migrieren.
Änderungen in der App Engine Go 1.12+-Laufzeit
Sie können Änderungen an Ihrer vorhandenen App Engine Go-Anwendung und an Ihrem Bereitstellungsprozess vornehmen, um die Laufzeiten von App Engine Go 1.12+ zu verwenden. Die wichtigsten Unterschiede bei den neuen Laufzeiten sind im Folgenden aufgeführt:
Das Verhalten einiger Elemente in der Konfigurationsdatei
app.yaml
wurde geändert: Weitere Informationen finden Sie unter Änderungen an der Dateiapp.yaml
.Die Go 1.12+-Laufzeiten bieten keinen Zugriff auf proprietäre App Engine APIs. Sie können die Google Cloud-Clientbibliothek oder Drittanbieterbibliotheken verwenden, um auf Google Cloud-Dienste zuzugreifen. Vorschläge für Alternativen zu App Engine APIs finden Sie im Abschnitt Aus App Engine Go SDK migrieren.
App Engine ändert die Go-Toolchain nicht mehr, um das Paket
appengine
aufzunehmen. Wenn Sie das Paketappengine
oder das Paketgoogle.golang.org/appengine
verwenden, müssen Sie zur Google Cloud-Clientbibliothek migrieren.
Aus App Engine Go SDK migrieren
Das Paket appengine
und das Paket google.golang.org/appengine
werden nicht mehr unterstützt. Sie müssen zur Google Cloud-Clientbibliothek migrieren, um auf entsprechende Google Cloud-Dienste zugreifen zu können:
- Verwenden Sie Cloud Tasks, um Aufgaben aus Go 1.12 und höher mithilfe des
cloudtasks
-Pakets in eine Warteschlange zu stellen. Sie können einen beliebigen App Engine-Dienst als Ziel einer App Engine-Aufgabe verwenden. - Zum Senden von E-Mails verwenden Sie anstelle der App Engine Mail API einen externen E-Mail-Anbieter wie SendGrid, Mailgun oder Mailjet. Alle diese Dienste bieten APIs zum Senden von E-Mails aus Anwendungen.
- Verwenden Sie zum Speichern von Anwendungsdaten Memorystore for Redis.
Greifen Sie über die Bibliothek
google-api-go-client
auf die App Engine Modules API zu. Mit den Umgebungsvariablen und der App Engine Admin API können Sie Informationen abrufen und die ausgeführten Dienste der Anwendung ändern:Dienstinformation Zugriff Aktueller Dienstname Umgebungsvariable GAE_SERVICE
Aktuelle Dienstversion Umgebungsvariable GAE_VERSION
Aktuelle Instanz-ID Umgebungsvariable GAE_INSTANCE
Standardhostname Admin API-Methode apps.get
Liste der Dienste Admin API-Methode apps.services.list
Liste der Versionen für einen Dienst Admin API-Methode apps.services.versions.list
Standardversion für einen Dienst, inklusive Traffic-Aufteilung Admin API-Methode apps.services.get
Liste der für eine Version ausgeführten Instanzen Admin API-Methode apps.services.versions.instances.list
Anstelle der App Engine Blobstore API wird Cloud Storage empfohlen. Verwenden Sie Cloud Storage über das Paket
storage
. Informationen zur Einrichtung finden Sie auf der Seite Cloud Storage-Clientbibliotheken.Greifen Sie über das Paket
datastore
auf Datastore zu. Eine Einführung finden Sie auf der Seite Datastore-Clientbibliotheken.Statt die App Engine Search API zu nutzen, können Sie eine beliebige Volltextsuchdatenbank wie ElasticSearch in Compute Engine hosten und über Ihren Dienst darauf zugreifen.
Ähnliche Funktionen wie die der App Engine Images API können Sie in Cloud Storage über das Paket
storage
und einen Drittanbieterdienst zur Bildbearbeitung nutzen. Informationen zur Einrichtung finden Sie auf der Seite Cloud Storage-Clientbibliotheken.Verwenden Sie
request.Context()
oder Ihren bevorzugten Kontext anstelle vonappengine.NewContext
.Die folgenden App Engine-spezifischen Funktionen wurden durch die unten aufgeführten Pakete der Go-Standardbibliothek ersetzt:
App Engine-Paket Paket der Go-Standardbibliothek Paket cloudsql
Paket database/sql
Paket file
Paket os
Paket log
Paket log
Paket socket
Paket net
Paket urlfetch
Paket net/http
Änderungen an der Datei app.yaml
Das Verhalten einiger Elemente in der Konfigurationsdatei app.yaml
wurde geändert:
Element | Änderungstyp | Beschreibung |
---|---|---|
runtime |
Geändert | Ändern Sie das Element runtime so, dass Go 1.12 oder höher angegeben wird. |
login |
Veraltet |
Die Laufzeiten von Go 1.12+ unterstützen login nicht. Sie müssen daher andere Verfahren zur Nutzerauthentifizierung verwenden.
|
Weitere Informationen finden Sie in der Referenz zu app.yaml
.
main
-Paket erstellen
Ihr Dienst muss in mindestens einer Quelldatei eine package main
-Anweisung enthalten. Alternativ können Sie einen Aufruf von appengine.Main()
hinzufügen, wenn Ihr Dienst das Paket google.golang.org/appengine
verwendet.
main-Paket schreiben
Wenn Ihr Dienst noch kein main
-Paket enthält, fügen Sie die Anweisung package main
hinzu und schreiben Sie eine main()
-Funktion. Die Funktion main()
muss mindestens:
Die Umgebungsvariable
PORT
lesen und die Funktionhttp.ListenAndServe()
aufrufen:
HTTP-Handler registrieren
Wählen Sie eine der folgenden Optionen, mit denen sich HTTP-Handler registrieren lassen:
- Die bevorzugte Methode besteht darin, alle
http.HandleFunc()
-Aufrufe von Ihren Paketen manuell in diemain()
-Funktion in Ihremmain
-Paket zu verschieben. Alternativ können Sie die Pakete Ihrer Anwendung in das
main
-Paket importieren. Bei dieser Vorgehensweise müssen Sie gewährleisten, dass jedeinit()
-Funktion, die Aufrufe vonhttp.HandleFunc()
enthält, beim Start ausgeführt wird.Sie können alle Pakete, die den
http.HandleFunc()
-Aufruf verwenden, mit dem folgenden Bash-Skript finden und die Ausgabe in denimport
-Block Ihresmain
-Pakets kopieren:gp=$(go env GOPATH) && p=$(pwd) && pkg=${p#"$gp/src/"} && find . -name "*.go" | xargs grep "http.HandleFunc" --files-with-matches | grep -v vendor/ | grep -v '/main.go' | sed "s#\./\(.*\)/[^/]\+\.go#\t_ \"$pkg/\1\"#" | sort | uniq
Dateien strukturieren
Go erfordert, dass jedes Paket über ein eigenes Verzeichnis verfügt. Sie können App Engine mitteilen, wo sich Ihr main
-Paket befindet, indem Sie main:
in der app.yaml
-Datei Ihres Projekts verwenden. Beispiel: Wenn die Dateistruktur Ihrer Anwendung so aussieht:
myapp/ ├── app.yaml ├── foo.go ├── bar.go └── web/ └── main.go
Hätte Ihre app.yaml
-Datei Folgendes:
main: ./web # Relative filepath to the directory containing your main package.
Weitere Informationen zum Flag main
finden Sie in der app.yaml
-Referenz.
Dateien in GOPATH
verschieben
Ihren GOPATH
finden Sie mit dem folgenden Befehl:
go env GOPATH
Verschieben Sie alle relevanten Dateien und Importe in GOPATH
. Wenn Sie relative Importe wie import ./guestbook
verwenden, aktualisieren Sie Ihre Importe, um den vollständigen Pfad zu verwenden: import github.com/example/myapp/guestbook
.