Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Ausfallsichere Uploads in Google Cloud Storage (GCS)

By Vinay GandhiApr 13, 20205 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Mit Google Cloud Storage (GCS) lassen sich unstrukturierte Daten zu sehr geringen Kosten verwalten. Anwendungen können die GCS-APIs einbinden oder eine direkte GCS-URL teilen, um Dateien hoch- oder herunterzuladen. GCS unterstützt außerdem den Upload in mehreren Teilen bzw. Chunks per Resumable Upload.

Ausfallsichere Uploads zu Google Cloud Storage

Der Vorteil eines Resumable Uploads gegenüber einem Single Upload: Anwendungen werden gegenüber schwankender Netzwerkverfügbarkeit robust. Sie laden Datenteile hoch, sobald das Netzwerk verfügbar ist, und pausieren, wenn die Verbindung plötzlich abbricht. Das senkt zugleich die Bandbreitenkosten, da große Datei-Uploads nicht von vorn beginnen müssen.

Ein Beispiel: Werden Fotos oder Dokumente aus einer mobilen App ausschließlich über WLAN auf den Server hochgeladen, kann die App den Upload automatisch pausieren, sobald das Gerät auf Mobilfunk wechselt, und ihn fortsetzen, sobald wieder WLAN verfügbar ist.

GCS-Buckets stellen für API-Aufrufe eine Endpoint-URL nach folgendem Muster bereit:

In jeder Software gilt: Implementierungsdetails und eingesetzte Tools sollten gegenüber den Endnutzern verborgen bleiben. Dasselbe Prinzip gilt für GCS-Buckets in unserer Anwendung – wir empfehlen daher, GCS-Buckets über eine Custom-URL bereitzustellen.

Für den Zugriff auf GCS-Buckets über Custom-URLs wie https://mydrive..com bietet Google den konfigurierbaren Dienst "Backend Bucket" über einen GCP-Load-Balancer an. Die einzelnen Schritte sind im Folgenden beschrieben.

Backend Bucket mit einem GCS-Bucket verbinden

  1. Melden Sie sich in der GCP-Konsole an und wählen Sie in der linken Navigationsleiste Network Services -> Load Balancing.

2. Klicken Sie auf "Create Load Balancer".

3. Wählen Sie "HTTP(S) Load Balancing" und klicken Sie auf "Start Configuration".

4. Wählen Sie "From Internet to my VMs", da Internet-Clients mit dem Bucket interagieren.

5. Vergeben Sie einen Namen für den Load Balancer und wählen Sie unter Backend configuration die Option Backend buckets.

6. Vergeben Sie einen Namen für den Backend Bucket und wählen Sie einen Cloud-Storage-Bucket, der an diesen Backend-Service angebunden werden soll. In meinem Fall ist der GCS-Bucket öffentlich zugänglich, um den Aufwand für das Abrufen und Übergeben eines Authorization-Tokens in den API-Aufrufen zu reduzieren.

7. Sobald der Backend Bucket erfolgreich angelegt wurde, erscheint er in der Liste der Backend Buckets.

8. Die Frontend configuration verbindet die statische IP-Adresse mit dem Load Balancer, damit unsere Services mit dem GCS-Bucket interagieren können.

9. Konfiguration prüfen und abschließen.

10. Der Backend-Bucket-Service sollte nun erfolgreich angelegt sein – wie unten dargestellt.

Sobald Backend-Bucket-Service und Load Balancer über eine statische IP-Adresse verbunden sind, lassen sich GCS-APIs über die eigene IP-Adresse ausführen (oder URL, sofern die IP-Adresse mit einem Domainnamen verknüpft ist).

Liste der Objekte in einem Bucket abrufen

Führen Sie folgenden curl-Befehl aus:

Zurückgelieferter Response Body:

Ein einzelnes Objekt in einen Bucket hochladen

curl-Befehl, um "map.png" als "worldmap_001.png" in den GCS-Bucket hochzuladen.

Rufen Sie die Objektliste ab und prüfen Sie, ob "worldmap_001.png" im GCS-Bucket vorhanden ist.

Datei in mehreren Teilen über eine Resumable URL hochladen

Teilen Sie die 312806 Byte große Datei "map.png" in zwei Teile auf – jeweils in Vielfachen von 256 Kilobyte. Die Resumable-URL-API von Google Cloud Storage verlangt, dass jeder hochgeladene Teil ein Vielfaches von 256 KB sein muss – mit Ausnahme des letzten Teils.

  1. Rufen Sie die API "uploadType=resumable" in POSTMAN oder einem anderen REST-API-Client auf, um die Location-URL abzurufen.

2. Übernehmen Sie die Location-URL aus der Antwort, um darüber die einzelnen Teile hochzuladen.

3. Laden Sie den ersten Teil "xaa" mit dem POSTMAN-Client in den Bucket hoch. Achten Sie darauf, dass der Header "Content-Range" auf den Bereich von 0 bis ("Content-Length" - 1) gesetzt ist.

4. Der Upload-Aufruf liefert den HTTP-Statuscode "308 Resume Incomplete" zurück.

5. Laden Sie den zweiten Teil (letzten Teil) "xab" in den Bucket hoch.

6. Nach dem Upload des letzten Teils kommt der HTTP-Statuscode "200 OK" zurück.

7. Prüfen Sie im Bucket, ob die Datei (map.png) hochgeladen wurde.

Quellen

Choosing a load balancer | Load Balancing | Google Cloud \ This document helps you determine which Google Cloud load balancer best meets your needs. To decide which load balancer…\ cloud.google.com

Adding backend buckets to load balancers | Load Balancing \ Backend buckets allow you to use Google Cloud Storage buckets with HTTP(S) Load Balancing. An external HTTP(S) load…\ cloud.google.com

Making data public | Cloud Storage | Google Cloud \ This page shows you how to make objects you own readable to everyone on the public internet. To learn how to access…\ cloud.google.com

Performing resumable uploads | Cloud Storage | Google Cloud \ This page describes how to make a resumable upload request in the Cloud Storage JSON and XML API. This protocol allows…\ cloud.google.com

JSON API: Performing a multipart upload | Cloud Storage | Google Cloud \ This page describes how to make a multipart upload request in the Cloud Storage JSON API. A multipart upload request…\ cloud.google.com

Resumable uploads | Cloud Storage | Google Cloud \ This page discusses Cloud Storage resumable uploads in JSON API and XML API. To learn how to perform a resumable…\ cloud.google.com

POST Object | Cloud Storage | Google Cloud \ Uploads objects by using HTML forms. For tips on uploading to Cloud Storage, see best practices. Unless you need to use…\ cloud.google.com

Resumable uploads | Cloud Storage | Google Cloud \ This page discusses Cloud Storage resumable uploads in JSON API and XML API. To learn how to perform a resumable…\ cloud.google.com

Requests \ You can send requests in Postman to connect to APIs you are working with. Your requests can retrieve, add, delete, and…\ learning.postman.com