Zur Cloud-Clientbibliothek für Storage migrieren

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:

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:

  1. Installieren Sie die Cloud-Clientbibliothek für Cloud Storage.

  2. Aktualisieren Sie Ihren Code, um die Cloud-Clientbibliothek zu verwenden.

  3. Testen Sie Ihre Aktualisierungen.

  4. Stellen Sie die Anwendung in App Engine bereit.

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:

  1. Create a requirements.txt file in the same folder as your app.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.

  2. Geben Sie in der Datei app.yaml Ihrer Anwendung im Abschnitt libraries die erforderlichen Google RPC- und setuptools-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.

  3. Erstellen Sie ein Verzeichnis, in dem Sie die Bibliotheken von Drittanbietern speichern können, beispielsweise lib/. Dann verwenden Sie pip install zum Installieren der Bibliotheken in das Verzeichnis. Beispiel:

      pip install -t lib -r requirements.txt
      

  4. Erstellen Sie eine appengine_config.py-Datei im selben Ordner wie Ihre app.yaml-Datei. Fügen Sie der Datei appengine_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 Ordner lib im aktuellen Arbeitsverzeichnis befindet. Wenn Sie nicht garantieren können, dass sich lib immer im aktuellen Arbeitsverzeichnis befindet, geben Sie den vollständigen Pfad zum Ordner lib 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 pages-Attribut des Iteratorobjekts, das Client.list_blobs zurückgibt, um durch die Liste der Objekte zu blättern.

In Speicher schreiben blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string

Codebeispiel

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 bucket.acl.reload() oder blob.acl.reload() verwenden, um alle derzeit definierten ACLs abzurufen. Verwenden Sie dann ACL-Methoden, um ACLs hinzuzufügen oder zu entfernen. Sehen Sie sich ein Codebeispiel an.

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:

  1. Testen Sie die Anwendung in App Engine.

  2. 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.