Introduction à Google Cloud Storage avec Java

1. Vue d'ensemble

Google Cloud Storage propose un stockage en ligne adapté aux besoins d'une application individuelle en fonction de l'emplacement, de la fréquence d'accès et du coût. Contrairement à Amazon Web Services, Google Cloud Storage utilise une seule API pour l'accès haute, moyenne et basse fréquence.

Comme la plupart des plates-formes cloud, Google propose un niveau d'accès gratuit; les détails des prix sont ici.

Dans ce didacticiel, nous allons nous connecter au stockage, créer un compartiment, écrire, lire et mettre à jour les données. Lors de l'utilisation de l'API pour lire et écrire des données, nous utiliserons également l' utilitaire de stockage cloud gsutil .

2. Configuration de Google Cloud Storage

2.1. Dépendance de Maven

Nous devons ajouter une seule dépendance à notre pom.xml :

 com.google.cloud google-cloud-storage 1.17.0 

Maven Central a la dernière version de la bibliothèque.

2.2. Créer une clé d'authentification

Avant de pouvoir nous connecter à Google Cloud, nous devons configurer l'authentification. Les applications Google Cloud Platform (GCP) chargent une clé privée et des informations de configuration à partir d'un fichier de configuration JSON. Nous générons ce fichier via la console GCP. L'accès à la console nécessite un compte Google Cloud Platform valide.

Nous créons notre configuration par:

  1. Accéder à la console Google Cloud Platform
  2. Si nous n'avons pas encore défini de projet GCP, nous cliquons sur le bouton Créer et entrons un nom de projet, tel que " baeldung-cloud-tutorial "
  3. Sélectionnez " nouveau compte de service " dans la liste déroulante
  4. Ajoutez un nom tel que « baeldung-cloud-storage » dans le champ du nom du compte.
  5. Sous « rôle », sélectionnez Projet, puis Propriétaire dans le sous-menu.
  6. Sélectionnez créer et la console télécharge un fichier de clé privée.

Le rôle de l'étape 6 autorise le compte à accéder aux ressources du projet. Par souci de simplicité, nous avons donné à ce compte un accès complet à toutes les ressources du projet.

Pour un environnement de production, nous définirions un rôle qui correspond à l'accès dont l'application a besoin.

2.3. Installez la clé d'authentification

Ensuite, nous copions le fichier téléchargé à partir de la console GCP vers un emplacement pratique et nous y faisons pointer la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS . C'est le moyen le plus simple de charger les informations d'identification, bien que nous examinions une autre possibilité ci-dessous.

Pour Linux ou Mac:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/file"

Pour les fenêtres:

set GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\file"

2.4. Installez Cloud Tools

Google fournit plusieurs outils pour gérer sa plate-forme cloud. Nous allons utiliser gsutil au cours de ce tutoriel pour lire et écrire des données parallèlement à l'API.

Nous pouvons le faire en deux étapes simples:

  1. Installez le SDK Cloud à partir des instructions ici pour notre plate-forme.
  2. Suivez le Quickstart de notre plateforme ici. À l'étape 4 de Initialiser le SDK , nous sélectionnons le nom du projet à l'étape 4 de la section 2.2 ci-dessus (« baeldung-cloud-storage » ou le nom que vous avez utilisé).

gsutil est maintenant installé et configuré pour lire les données de notre projet cloud.

3. Connexion au stockage et création d'un compartiment

3.1. Connectez-vous au stockage

Avant de pouvoir utiliser le stockage Google Cloud, nous devons créer un objet de service. Si nous avons déjà configuré la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS , nous pouvons utiliser l'instance par défaut:

Storage storage = StorageOptions.getDefaultInstance().getService(); 

Si nous ne voulons pas utiliser la variable d'environnement, nous devons créer une instance Credentials et la transmettre au stockage avec le nom du projet:

Credentials credentials = GoogleCredentials .fromStream(new FileInputStream("path/to/file")); Storage storage = StorageOptions.newBuilder().setCredentials(credentials) .setProjectId("baeldung-cloud-tutorial").build().getService(); 

3.2. Créer un bucket

Maintenant que nous sommes connectés et authentifiés, nous pouvons créer un bucket. Les seaux sont des conteneurs qui contiennent des objets. Ils peuvent être utilisés pour organiser et contrôler l'accès aux données.

Il n'y a pas de limite au nombre d'objets dans un compartiment. GCP limite le nombre d'opérations sur les buckets et encourage les concepteurs d'applications à mettre l'accent sur les opérations sur des objets plutôt que sur des buckets.

La création d'un bucket nécessite un BucketInfo:

Bucket bucket = storage.create(BucketInfo.of("baeldung-bucket")); 

Pour cet exemple simple, nous avons un nom de compartiment et acceptons les propriétés par défaut. Les noms de compartiment doivent être uniques au monde. Si nous choisissons un nom déjà utilisé, create () échouera.

3.3. Examen d'un bucket avec gsutil

Puisque nous avons un bucket maintenant, nous pouvons l'examiner avec gsutil.

Ouvrons une invite de commande et jetons un œil:

$ gsutil ls -L -b gs://baeldung-1-bucket/ gs://baeldung-1-bucket/ : Storage class: STANDARD Location constraint: US Versioning enabled: None Logging configuration: None Website configuration: None CORS configuration: None Lifecycle configuration: None Requester Pays enabled: None Labels: None Time created: Sun, 11 Feb 2018 21:09:15 GMT Time updated: Sun, 11 Feb 2018 21:09:15 GMT Metageneration: 1 ACL: [ { "entity": "project-owners-385323156907", "projectTeam": { "projectNumber": "385323156907", "team": "owners" }, "role": "OWNER" }, ... ] Default ACL: [ { "entity": "project-owners-385323156907", "projectTeam": { "projectNumber": "385323156907", "team": "owners" }, "role": "OWNER" }, ... ]

gsutil ressemble beaucoup aux commandes shell, et toute personne familière avec la ligne de commande Unix devrait se sentir très à l'aise ici. Notez que nous avons transmis le chemin de notre bucket sous forme d'URL: gs: // baeldung-1-bucket / , avec quelques autres options.

The ls option produces a listing or objects or buckets, and the -L option indicated that we want a detailed listing – so we received details about the bucket including the creation times and access controls.

Let's add some data to our bucket!

4. Reading, Writing and Updating Data

In Google Cloud Storage, objects are stored in Blobs; Blob names can contain any Unicode character, limited to 1024 characters.

4.1. Writing Data

Let's save a String to our bucket:

String value = "Hello, World!"; byte[] bytes = value.getBytes(UTF_8); Blob blob = bucket.create("my-first-blob", bytes); 

As you can see, objects are simply arrays of bytes in the bucket, so we store a String by simply operating with its raw bytes.

4.2. Reading Data with gsutil

Now that we have a bucket with an object in it, let's take a look at gsutil.

Let's start by listing the contents of our bucket:

$ gsutil ls gs://baeldung-1-bucket/ gs://baeldung-1-bucket/my-first-blob

We passed gsutil the ls option again but omitted -b and -L, so we asked for a brief listing of objects. We receive a list of URIs for each object, which is one in our case.

Let's examine the object:

$ gsutil cat gs://baeldung-1-bucket/my-first-blob Hello World!

Cat concatenates the contents of the object to standard output. We see the String we wrote to the Blob.

4.3. Reading Data

Blobs are assigned a BlobId upon creation.

The easiest way to retrieve a Blob is with the BlobId:

Blob blob = storage.get(blobId); String value = new String(blob.getContent()); 

We pass the id to Storage and get the Blob in return, and getContent() returns the bytes.

If we don't have the BlobId, we can search the Bucket by name:

Page blobs = bucket.list(); for (Blob blob: blobs.getValues()) { if (name.equals(blob.getName())) { return new String(blob.getContent()); } }

4.4. Updating Data

We can update a Blob by retrieving it and then accessing its WriteableByteChannel:

String newString = "Bye now!"; Blob blob = storage.get(blobId); WritableByteChannel channel = blob.writer(); channel.write(ByteBuffer.wrap(newString.getBytes(UTF_8))); channel.close();

Let's examine the updated object:

$ gsutil cat gs://baeldung-1-bucket/my-first-blob Bye now!

4.5. Save an Object to File, Then Delete

Let's save the updated the object to a file:

$ gsutil copy gs://baeldung-1-bucket/my-first-blob my-first-blob Copying gs://baeldung-1-bucket/my-first-blob... / [1 files][ 9.0 B/ 9.0 B] Operation completed over 1 objects/9.0 B. Grovers-Mill:~ egoebelbecker$ cat my-first-blob Bye now!

As expected, the copy option copies the object to the filename specified on the command line.

gsutil can copy any object from Google Cloud Storage to the local file system, assuming there is enough space to store it.

We'll finish by cleaning up:

$ gsutil rm gs://baeldung-1-bucket/my-first-blob Removing gs://baeldung-1-bucket/my-first-blob... / [1 objects] Operation completed over 1 objects. $ gsutil ls gs://baeldung-1-bucket/ $

rm ( del fonctionne aussi) supprime l'objet spécifié

5. Conclusion

Dans ce bref didacticiel, nous avons créé des identifiants pour Google Cloud Storage et nous nous sommes connectés à l'infrastructure. Nous avons créé un bucket, écrit des données, puis lues et modifiées. Lorsque nous travaillons avec l'API, nous avons également utilisé gsutil pour examiner le stockage dans le cloud lors de la création et de la lecture des données.

Nous avons également discuté de la manière d'utiliser les buckets et d'écrire et de modifier efficacement les données.

Des exemples de code, comme toujours, peuvent être trouvés sur GitHub.