Accedere ai file in Cloud Storage con l'astrazione Resource di Spring

Accedere ai file in Cloud Storage con l'astrazione Resource di Spring

Informazioni su questo codelab

subjectUltimo aggiornamento: feb 10, 2020
account_circleScritto da: meltsufin

1. Panoramica

Spring Framework fornisce un'astrazione ResourceLoader per leggere e scrivere facilmente file da varie origini, come il file system, il percorso di classe o il Web. Devi solo specificare l'URI della risorsa utilizzando il prefisso del protocollo noto. Ad esempio, per accedere a un file nel file system locale, devi specificare un URI come file:/data/config.yaml.

Dovrai scrivere un'app Spring Boot che accederà ai file archiviati in Cloud Storage utilizzando l'astrazione Resource di Spring e il prefisso del protocollo gs:.

Puoi farlo utilizzando Cloud Shell e lo strumento a riga di comando gcloud di Cloud SDK.

Cosa imparerai a fare:

  • Come utilizzare Cloud Storage Spring Boot starter
  • Come accedere ai file in Cloud Storage con Spring
  • Come utilizzare le astrazioni Resource e WritableResource di Spring

Che cosa ti serve

  • Un progetto Google Cloud
  • Un browser, come Google Chrome
  • Familiarità con gli editor di testo standard di Linux, ad esempio Vim, Emacs e GNU Nano

Come utilizzerai il codelab?

Come giudichi la tua esperienza con la creazione di app web HTML e CSS?

Come giudichi la tua esperienza con l'utilizzo dei servizi Google Cloud?

2. Configurazione e requisiti

Configurazione automatica dell'ambiente

Se non hai ancora un Account Google (Gmail o Google Apps), devi crearne uno. Accedi alla console di Google Cloud Platform (console.cloud.google.com) e crea un nuovo progetto.

Screenshot dal 10/02/2016 alle 00:45:26.png

Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome sopra riportato è già stato utilizzato e non funzionerà per te). Vi verrà fatto riferimento più avanti in questo codelab come PROJECT_ID.

Il prossimo passaggio consiste nell'attivare la fatturazione in Cloud Console per utilizzare le risorse di Google Cloud.

L'esecuzione di questo codelab non dovrebbe costare più di qualche euro, ma potrebbe essere di più se decidi di utilizzare più risorse o se le lasci in esecuzione (vedi la sezione "pulizia" alla fine di questo documento).

I nuovi utenti di Google Cloud Platform sono idonei per una prova senza costi di 300 $.

Cloud Shell

Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud.

Attiva Google Cloud Shell

Nella console di GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

Quindi fai clic su "Start Cloud Shell":

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente:

Questa macchina virtuale è dotata di tutti gli strumenti di sviluppo di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Gran parte del lavoro in questo lab, se non tutto, può essere svolto semplicemente con un browser o con Google Chromebook.

Una volta connesso a Cloud Shell, dovresti vedere che sei già autenticato e che il progetto è già impostato sul tuo PROJECT_ID.

Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:

gcloud auth list

Output comando

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

In caso contrario, puoi impostarlo con questo comando:

gcloud config set project <PROJECT_ID>

Output comando

Updated property [core/project].

3. Creare un file in Cloud Storage

Dopo l'avvio di Cloud Shell, puoi iniziare a creare file e trasferirli su Cloud Storage.

Crea un file denominato my-file.txt:

$ echo "Hello World from GCS" > my-file.txt

Quindi, crea un nuovo bucket univoco in Cloud Storage e trasferisci il file lì utilizzando gsutil.

$ BUCKET=spring-bucket-$USER
$ gsutil makebucket gs://$BUCKET
$ gsutil copy my-file.txt gs://$BUCKET

Vai al browser di archiviazione in Cloud Storage e verifica che il bucket e il file siano presenti.

4. Inizializza un&#39;app Spring Boot

Inizia a scrivere l'app utilizzando la riga di comando per generare una nuova app Spring Boot con Spring Initializr:

$ curl https://start.spring.io/starter.tgz \
-d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -

Tieni presente che Initializr aggiungerà automaticamente spring-boot-starter-web e spring-cloud-gcp-starter-storage alle tue dipendenze in pom.xml dell'app modello.

Passa alla directory dell'app modello:

$ cd spring-gcs

Crea ed esegui l'app utilizzando Maven.

$ ./mvnw spring-boot:run

L'app inizierà ad ascoltare la porta 8080. Apri una nuova scheda di Cloud Shell ed esegui curl per accedere all'app.

$ curl localhost:8080

Dovresti ricevere una risposta 404 perché l'app non fa ancora nulla di utile. Torna alla scheda Cloud Shell precedente in cui è in esecuzione l'app e terminala con Control+C (Command+C su Macintosh).

5. Leggere il file in Cloud Storage

Modifica l'app Spring Boot per accedere a my-file.txt, il file archiviato in precedenza in Cloud Storage. Il tuo obiettivo è restituire semplicemente i contenuti del file tramite HTTP.

Nelle istruzioni seguenti, utilizzerai Vim per modificare i file, ma puoi anche usare Emacs, GNU Nano o l'editor di codice integrato in Cloud Shell:

$ cd ~/spring-gcs

Aggiungi un controller REST GcsController all'app.

$ vi src/main/java/com/example/demo/GcsController.java

Incolla il codice seguente e non dimenticare di correggere l'URI della risorsa con il bucket che hai creato in precedenza. Puoi controllare il bucket eseguendo il comando echo $BUCKET.

src/main/java/com/example/demo/GcsController.java

package com.example.demo;

import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GcsController {

 
@Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
 
private Resource gcsFile;

 
@RequestMapping(value = "/", method = RequestMethod.GET)
 
public String readGcsFile() throws IOException {
   
return StreamUtils.copyToString(
        gcsFile
.getInputStream(),
       
Charset.defaultCharset()) + "\n";
 
}
}

Crea ed esegui l'app con Maven:

$ ./mvnw spring-boot:run

L'app inizia ad ascoltare la porta 8080. Apri una nuova scheda di Cloud Shell ed esegui curl per accedere all'app.

$ curl localhost:8080

Ora dovresti vedere che i contenuti del file sono stati restituiti dall'app. Vai alla scheda Cloud Shell precedente in cui è in esecuzione l'app e terminala con Control+C (Command+C su Macintosh).

6. Scrivi in un file in Cloud Storage

Hai letto i contenuti del file in Cloud Storage e lo hai esposto tramite un controller REST Spring. Adesso cambia i contenuti del file pubblicando i nuovi contenuti nello stesso endpoint HTTP.

Devi aggiungere un altro metodo a GcsController che risponda a HTTP POST e scriva i dati nel tuo file in Cloud Storage. Questa volta, trasmetti la primavera Resource a WritableResource.

Aggiorna il file GcsController con importazioni aggiuntive di cui hai bisogno.

src/main/java/com/example/demo/GcsController.java

import java.io.OutputStream;
import org.springframework.core.io.WritableResource;
import org.springframework.web.bind.annotation.RequestBody;

Aggiungi il nuovo metodo di endpoint al controller.

src/main/java/com/example/demo/GcsController.java

@RestController
public class GcsController {
 
@RequestMapping(value = "/", method = RequestMethod.POST)
 
String writeGcs(@RequestBody String data) throws IOException {
   
try (OutputStream os = ((WritableResource) gcsFile).getOutputStream()) {
      os
.write(data.getBytes());
   
}
   
return "file was updated\n";
 
}
 
...
}

Crea ed esegui l'app con Maven:

$ ./mvnw spring-boot:run

L'app inizia ad ascoltare la porta 8080. Apri una nuova scheda di Cloud Shell ed esegui curl per pubblicare un messaggio nell'app.

$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080

Dovresti visualizzare una conferma dell'aggiornamento dei contenuti del file. Tuttavia, per verificarlo, utilizza un GET.

$ curl localhost:8080

Dovresti vedere i contenuti aggiornati del file restituito dall'app. Torna alla scheda Cloud Shell precedente in cui l'app è in esecuzione e termina con Control+C (Command+C su Macintosh).

7. Complimenti!

Hai imparato a utilizzare l'astrazione Resource di Spring per accedere facilmente ai file in Cloud Storage. Hai scritto un'app web Spring Boot in grado di leggere e scrivere su un file in Cloud Storage. Hai anche appreso lo starter Spring Boot per Cloud Storage che abilita tale funzionalità.

Scopri di più

Licenza

Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.