Google Cloud Storage (GCS) è una soluzione eccellente per le applicazioni che devono gestire dati non strutturati a costi molto contenuti. Le applicazioni possono integrarsi tramite le API di GCS oppure condividere direttamente un URL GCS per caricare o scaricare i file. GCS consente inoltre di caricare i dati suddividendoli in più parti tramite i resumable upload.

Upload affidabili su Google Cloud Storage
Il vantaggio di un resumable upload rispetto a un upload singolo è la resilienza alle interruzioni di rete: l'applicazione carica le parti quando la connessione è disponibile e mette in pausa l'operazione se questa viene a mancare improvvisamente. Di conseguenza si riducono anche i costi di banda, perché non occorre riavviare da zero il caricamento dei file di grandi dimensioni.
Pensi, ad esempio, al caricamento di foto o documenti da un'app mobile verso il server solo tramite WiFi: l'app può mettere in pausa automaticamente l'upload quando il dispositivo passa alla rete cellulare e riprenderlo non appena il WiFi torna disponibile.
I bucket GCS espongono un endpoint URL per le chiamate API come quello qui sotto:

In un'applicazione software è sempre buona norma nascondere agli utenti finali i dettagli implementativi e gli strumenti utilizzati. Lo stesso principio vale per i bucket GCS all'interno della nostra applicazione: la scelta consigliata è esporli tramite un URL personalizzato.
Per accedere ai bucket GCS tramite URL personalizzati come https://mydrive.
Come collegare un Backend Bucket a un bucket GCS
- Acceda alla console GCP e selezioni Network Services -> Load Balancing dalla barra di navigazione a sinistra.

2. Faccia clic su "Create Load Balancer".

3. Selezioni "HTTP(S) Load Balancing" e faccia clic su "Start Configuration".

4. Selezioni "From Internet to my VMs", poiché saranno i client su internet a interagire con il bucket.

5. Assegni un nome al load balancer e selezioni come Backend configuration l'opzione Backend buckets.

6. Assegni un nome al backend bucket e selezioni un bucket Cloud Storage da associare a questo backend service. Nel mio caso, il bucket GCS è pubblicamente accessibile per ridurre la complessità del recupero e della trasmissione del token di autorizzazione nelle chiamate API.

7. Una volta creato correttamente il Backend bucket, comparirà l'elenco dei Backend bucket disponibili.

8. La Frontend configuration collega l'indirizzo IP statico al load balancer, in modo che i nostri servizi possano interagire con il bucket GCS.

9. Riveda e finalizzi la configurazione.

10. A questo punto il servizio Backend bucket risulterà creato correttamente, come mostrato qui sotto.

Una volta che il servizio Backend bucket e il load balancer sono collegati tramite un indirizzo IP statico, possiamo eseguire le API GCS utilizzando il nostro indirizzo IP personalizzato (oppure un URL, se l'indirizzo IP è stato associato a un nome di dominio).
Recuperare l'elenco degli oggetti di un bucket
Esegua il comando curl come segue:

Body della risposta restituita:

Caricare un singolo oggetto in un bucket
Comando curl per caricare "map.png" come "worldmap_001.png" nel bucket GCS.

Recuperi l'elenco degli oggetti per verificare la presenza di "worldmap_001.png" nel bucket GCS.
Caricare un file in più parti con URL resumable
Suddivida il file "map.png", da 312806 byte, in due parti che siano multipli di 256 kilobyte. L'API resumable URL di Google Cloud Storage richiede che ogni parte caricata sia un multiplo di 256kb, fatta eccezione per l'ultima.

- Invochi l'API "uploadType=resumable" per ottenere la location URL tramite POSTMAN o un altro client REST API.

2. Estragga dalla risposta ricevuta la location URL da utilizzare per caricare le parti.

3. Carichi la prima parte, "xaa", nel bucket utilizzando il client POSTMAN. Si assicuri che il valore dell'header "Content-Range" sia impostato da 0 a ("Content-Length" - 1).

4. Stato della risposta restituito dalla chiamata di upload, con codice HTTP "308 Resume Incomplete".

5. Carichi la seconda parte (parte finale) "xab" nel bucket.

6. Codice HTTP "200 OK" ricevuto dopo il caricamento dell'ultima parte.

7. Verifichi nel bucket l'immagine caricata (map.png).
