Mit Cloud Storage kann Ihre Anwendung große Datenobjekte wie Video- oder Bilddateien bereitstellen. Außerdem haben Nutzer die Möglichkeit, große Datendateien hochzuladen. In der Python 2-Laufzeit stellt App Engine eine eigene Clientbibliothek zum Schreiben und Lesen von Objekten in Cloud Storage bereit. Diese App Engine-Bibliothek ist in neueren App Engine-Laufzeiten nicht verfügbar, einschließlich der Python 3-Laufzeit.
Wenn Ihre Python 2-Anwendung die GoogleAppEngineCloudStorageClient
-Bibliothek verwendet, müssen Sie zur Cloud-Clientbibliothek für Cloud Storage migrieren, bevor Sie die Anwendung in der Python 3-Laufzeit ausführen können. Sie müssen Ihre Anwendung nur migrieren, wenn Sie eine neue Clientbibliothek verwenden wollen. Alle Datenobjekte und Berechtigungen in Ihren vorhandenen Cloud Storage-Buckets bleiben unverändert; Sie können über die neue Clientbibliothek auf Ihre vorhandenen Buckets zugreifen.
App Engine- und Cloud-Clientbibliotheken im Vergleich
Gemeinsamkeiten:
Die Cloud-Clientbibliothek unterstützt alle von der App Engine-Clientbibliothek aktivierten Cloud Storage-Features wie das Lesen, Schreiben, Entfernen und Auflisten von Objekten. Für die Migration sind nur kleine Änderungen am Code erforderlich.
Die Cloud-Clientbibliothek unterstützt auch zusätzliche Funktionen wie das Erstellen und Kennzeichnen von Buckets und das Abrufen älterer Versionen von Objekten.
Unterschiede:
In der App Engine-Bibliothek funktioniert die Funktion zum Abruf einer Liste von Objekten asynchron. Die Cloud-Clientbibliothek bietet keine asynchrone Funktion zum Auflisten von Objekten. Sie können Paging und Iteration jedoch durch eine kleine Objektgruppe verwenden.
Die App Engine-Clientbibliothek erfordert die Verwendung von ACLs (Access Control Lists), um den Zugriff auf Buckets und Objekte zu steuern. Cloud Storage und die Cloud-Clientbibliothek unterstützen zwei Systeme, um Nutzern die Berechtigung zum Zugriff auf Ihre Buckets und Objekte zu erteilen: ACLs und den einheitlichen Zugriff auf Bucket-Ebene. Der einheitliche Zugriff auf Bucket-Ebene ermöglicht eine vereinfachte, konsistente Zugriffssteuerung für alle Cloud-Ressourcen.
Alle ACLs, die Sie mit der App Engine-Clientbibliothek verwendet haben, sind nach der Migration zur Cloud-Clientbibliothek für vorhandene Buckets weiterhin gültig. Entsprechend können Sie bei Bedarf weiterhin ACLs verwenden.
Wenn der einheitliche Zugriff auf Bucket-Ebene Ihren Anforderungen entspricht, empfehlen wir die Verwendung dieses einfacheren Systems für alle neu erstellten Buckets. Sie können vorhandene Buckets in einen einheitlichen Zugriff auf Bucket-Ebene umwandeln. Dies kann jedoch unter Umständen erhebliche Änderungen daran bedeuten, wie Ihre Anwendung den Zugriff auf ihre Speicherobjekte schützt.
Codebeispiele:
Grundlegende Speichervorgänge mit den App Engine-APIs
Grundlegende Speichervorgänge mit der Cloud-Clientbibliothek für Cloud Storage
Vorbereitung der Migration
Cloud Storage-Berechtigungen verstehen
Das Standarddienstkonto Ihrer Anwendung verfügt standardmäßig über Lese- und Schreibberechtigungen für die Buckets in Ihrem Projekt. Außerdem hat es die vollständigen Rechte an den von ihnen erstellten Objekten, vor und nach der Migration.
Wenn Sie ein anderes Dienstkonto oder ein anderes Nutzerkonto verwendet haben, um den Zugriff auf Ihre Cloud Storage-Buckets und -Objekte zu sichern, verwenden Sie weiterhin vor und nach der Migration dieselben Konten und Authentifizierungstechniken.
Übersicht über den Migrationsprozess
So migrieren Sie Ihre Python-Anwendung für die Verwendung der Cloud-Clientbibliothek für Cloud Storage anstelle der App Engine-Clientbibliothek:
Installieren Sie die Cloud-Clientbibliothek für Cloud Storage.
Aktualisieren Sie Ihren Code, um die Cloud-Clientbibliothek zu verwenden.
Testen Sie Ihre Aktualisierungen.
Cloud-Clientbibliothek für Cloud Storage installieren
So machen Sie die Cloud-Clientbibliothek für Cloud Storage für Ihre Anwendung verfügbar, wenn sie in App Engine ausgeführt wird:
Create a
requirements.txt
file in the same folder as yourapp.yaml
file and add the following lines:google-cloud-storage==1.24.1
Wir empfehlen, die Version 1.24.1 der Cloud Storage-Clientbibliothek zu verwenden, da sie Python 2.7-Anwendungen unterstützt.
Geben Sie in der Datei
app.yaml
Ihrer Anwendung im Abschnittlibraries
die erforderlichen Google RPC- undsetuptools
-Bibliotheken sowie die optionale SSL-Bibliothek an:libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
Für einige Clientbibliotheken ist die SSL-Bibliothek nicht erforderlich. Wenn Sie die SSL-Bibliothek für eine Clientbibliothek, die sie benötigt, nicht einbeziehen, wird im Logs Explorer ein SSL-Fehler angezeigt, wenn die Anwendung eine Anfrage erhält.
Erstellen Sie ein Verzeichnis, in dem Sie die Bibliotheken von Drittanbietern speichern können, beispielsweise
lib/
. Dann verwenden Siepip install
zum Installieren der Bibliotheken in das Verzeichnis. Beispiel:pip install -t lib -r requirements.txt
Erstellen Sie eine
appengine_config.py
-Datei im selben Ordner wie Ihreapp.yaml
-Datei. Fügen Sie der Dateiappengine_config.py
Folgendes hinzu:# appengine_config.py import pkg_resources from google.appengine.ext import vendor # Set path to your libraries folder. path = 'lib' # Add libraries installed in the path folder. vendor.add(path) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(path)
Für die Datei
appengine_config.py
im obigen Beispiel wird davon ausgegangen, dass sich der Ordnerlib
im aktuellen Arbeitsverzeichnis befindet. Wenn Sie nicht garantieren können, dass sichlib
immer im aktuellen Arbeitsverzeichnis befindet, geben Sie den vollständigen Pfad zum Ordnerlib
an. Beispiel:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Für die lokale Entwicklung empfehlen wir, Abhängigkeiten in einer virtuellen Umgebung wie virtualenv für Python 2 zu installieren.
Code für die Verwendung der Cloud-Clientbibliothek aktualisieren
Cloud Storage-Client erstellen
Erstellen Sie ein Client
-Objekt, um die Cloud-Clientbibliothek für Cloud Storage zu verwenden. Der Client enthält Anmeldedaten und andere Daten, die für die Verbindung mit Cloud Storage erforderlich sind. Beispiel:
from google.cloud import storage
client = storage.Client()
Im zuvor beschriebenen Standardautorisierungsszenario enthält der Cloud Storage-Client Anmeldedaten aus dem Standarddienstkonto von App Engine, das für die Interaktion mit den Buckets und Objekten Ihres Projekts berechtigt ist. Wenn Sie nicht in diesem Standardszenario arbeiten, finden Sie unter Standardanmeldedaten für Anwendung Informationen zum Bereitstellen von Anmeldedaten.
Cloud-Clientbibliotheksmethoden verwenden
Die folgende Tabelle fasst zusammen, welche Methoden aus der Cloud-Clientbibliothek bei der Implementierung bestimmter Cloud Storage-Features verwendet werden sollten.
Cloud Storage-Funktion | Cloud-Clientmethoden |
Objekte in einem Bucket auflisten | Client.list_blobs
Sehen Sie sich ein einfaches Codebeispiel und ein Beispiel für die Emulation des Verzeichnismodus an. Verwenden Sie das |
In Speicher schreiben | blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string
|
ACLs angeben | Zum Anwenden einer vordefinierten ACL verwenden Sie den Parameter predefined_acl , wenn Sie einen Bucket erstellen oder ein Objekt erstellen.
Für eine genauere Kontrolle können Sie |
Aus dem Speicher lesen | blob.download_to_file
blob.download_to_filename
blob.download_as_string
Sehen Sie ein Codebeispiel an. |
Objekt löschen |
blob.delete
Sehen Sie ein Codebeispiel an. |
Objekt kopieren | bucket.copy_blob
Sehen Sie ein Codebeispiel an. |
Metadaten für ein Objekt lesen | blob.propertyname und blob.metadata
Sehen Sie sich ein Codebeispiel an. |
Aktualisierungen testen
Sie können die Aktualisierungen Ihrer Anwendung in einer lokalen Umgebung testen, allerdings müssen alle Cloud Storage-Anfragen über das Internet an einen tatsächlichen Cloud Storage-Bucket gesendet werden. Weder App Engine noch Cloud Storage bieten einen Cloud Storage-Emulator.
Weitere Informationen zum Testen von Python 2-Anwendungen finden Sie unter Lokalen Entwicklungsserver verwenden.
Weitere Informationen zum Testen von Python 3-Anwendungen finden Sie unter Testen und Bereitstellen Ihrer Anwendung.
Anwendung bereitstellen
Sobald Sie Ihre App bereitstellen können, sollten Sie:
Wenn die Anwendung fehlerfrei ausgeführt wird, verwenden Sie die Trafficaufteilung, um den Traffic für die aktualisierte Anwendung langsam hochzufahren. Prüfen Sie die Anwendung sorgfältig auf mögliche Probleme, bevor Sie mehr Traffic zur aktualisierten Anwendung leiten.