Inleiding tot Google Cloud Storage met Java

1. Overzicht

Google Cloud Storage biedt online opslag die is afgestemd op de behoeften van een individuele applicatie op basis van locatie, de frequentie van toegang en kosten. In tegenstelling tot Amazon Web Services gebruikt Google Cloud Storage één API voor toegang met hoge, gemiddelde en lage frequentie.

Zoals de meeste cloudplatforms biedt Google een gratis toegangsniveau; de prijsinformatie is hier.

In deze zelfstudie maken we verbinding met opslag, maken we een bucket, schrijven, lezen en updaten we gegevens. Terwijl we de API gebruiken om gegevens te lezen en te schrijven, gebruiken we ook de gsutil hulpprogramma voor cloudopslag.

2. Google Cloud Storage instellen

2.1. Afhankelijkheid van Maven

We moeten een enkele afhankelijkheid toevoegen aan onze pom.xml:

 com.google.cloud google-cloud-opslag 1.17.0 

Maven Central heeft de nieuwste versie van de bibliotheek.

2.2. Maak een verificatiesleutel

Voordat we verbinding kunnen maken met Google Cloud, moeten we authenticatie configureren. Google Cloud Platform-apps (GCP) laden een privésleutel en configuratiegegevens uit een JSON-configuratiebestand. We genereren dit bestand via de GCP-console. Voor toegang tot de console is een geldig Google Cloud Platform-account vereist.

We creëren onze configuratie door:

  1. Ga naar de Google Cloud Platform Console
  2. Als we nog geen GCP-project hebben gedefinieerd, klikken we op het creëren en voer een projectnaam in, zoals 'baeldung-cloud-tutorial
  3. Selecteer 'nieuw serviceaccount”Uit de vervolgkeuzelijst
  4. Voeg een naam toe zoals 'baeldung-cloud-opslag”In het accountnaamveld.
  5. Onder "rol”Selecteer Project en vervolgens Eigenaar in het submenu.
  6. Selecteer maken en de console downloadt een privésleutelbestand.

De rol in stap # 6 autoriseert het account om toegang te krijgen tot projectresources. Eenvoudigheidshalve hebben we dit account volledige toegang gegeven tot alle projectbronnen.

Voor een productieomgeving zouden we een rol definiëren die overeenkomt met de toegang die de applicatie nodig heeft.

2.3. Installeer de verificatiesleutel

Vervolgens kopiëren we het gedownloade bestand van de GCP-console naar een handige locatie en wijzen het GOOGLE_APPLICATION_CREDENTIALS omgevingsvariabele. Dit is de gemakkelijkste manier om de inloggegevens te laden, hoewel we hieronder naar een andere mogelijkheid zullen kijken.

Voor Linux of Mac:

export GOOGLE_APPLICATION_CREDENTIALS = "/ pad / naar / bestand"

Voor ramen:

zet GOOGLE_APPLICATION_CREDENTIALS = "C: \ pad \ naar \ bestand"

2.4. Installeer Cloud Tools

Google biedt verschillende tools voor het beheer van hun cloudplatform. We gaan gebruiken gsutil tijdens deze tutorial om naast de API gegevens te lezen en te schrijven.

We kunnen dit in twee eenvoudige stappen doen:

  1. Installeer de Cloud SDK via de instructies hier voor ons platform.
  2. Volg de Quickstart voor ons platform hier. In stap 4 van Initialiseer de SDK, selecteren we de projectnaam in stap 4 van sectie 2.2 hierboven (“baeldung-cloud-opslag”Of welke naam je ook hebt gebruikt).

gsutil is nu geïnstalleerd en geconfigureerd om gegevens uit ons cloudproject te lezen.

3. Verbinding maken met Opslag en het creëren van een Emmer

3.1. Verbinden aan Opslag

Voordat we Google Cloud-opslag kunnen gebruiken, moeten we een service-object maken. Als we het GOOGLE_APPLICATION_CREDENTIALS omgevingsvariabele, kunnen we de standaardinstantie gebruiken:

Opslag opslag = StorageOptions.getDefaultInstance (). GetService (); 

Als we de omgevingsvariabele niet willen gebruiken, moeten we een Inloggegevens instantie en geef het door aan Opslag met de projectnaam:

Inloggegevens inloggegevens = GoogleCredentials .fromStream (nieuwe FileInputStream ("pad / naar / bestand")); Opslagopslag = StorageOptions.newBuilder (). SetCredentials (referenties) .setProjectId ("baeldung-cloud-tutorial"). Build (). GetService (); 

3.2. Een Emmer

Nu we verbonden en geverifieerd zijn, kunnen we een bucket maken. Emmers zijn containers die objecten bevatten. Ze kunnen worden gebruikt om de gegevenstoegang te organiseren en te beheren.

Er is geen limiet aan het aantal objecten in een emmer. GCP beperkt het aantal bewerkingen op buckets en moedigt applicatieontwerpers aan om bewerkingen op objecten te benadrukken in plaats van op bakken.

Voor het maken van een bucket is een Bucketinfo:

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

Voor dit eenvoudige voorbeeld gebruiken we een bucketnaam en accepteren we de standaardeigenschappen. Bucketnamen moeten zijnwereldwijd uniek. Als we een naam kiezen die al in gebruik is, maken () zal mislukken.

3.3. Een Emmer Met gsutil

Aangezien we nu een emmer hebben, kunnen we deze bekijken gsutil.

Laten we een opdrachtprompt openen en een kijkje nemen:

$ gsutil ls -L -b gs: // baeldung-1-bucket / gs: // baeldung-1-bucket /: Opslagklasse: STANDARD Locatiebeperking: VS Versiebeheer ingeschakeld: Geen Logboekconfiguratie: Geen Website-configuratie: Geen CORS-configuratie : Geen Levenscyclusconfiguratie: Geen Aanvrager betaalt ingeschakeld: Geen Labels: Geen Tijd aangemaakt: Sun, 11 Feb 2018 21:09:15 GMT Tijd bijgewerkt: Sun, 11 Feb 2018 21:09:15 GMT Metageneration: 1 ACL: [{" entiteit ":" project-eigenaren-385323156907 "," projectTeam ": {" projectNumber ":" 385323156907 "," team ":" eigenaren "}," role ":" OWNER "}, ...] Standaard ACL: [ {"entity": "project-owners-385323156907", "projectTeam": {"projectNumber": "385323156907", "team": "owners"}, "role": "OWNER"}, ...]

gsutil lijkt veel op shell-commando's, en iedereen die bekend is met de Unix-commandoregel zou zich hier erg op zijn gemak moeten voelen. Merk op dat we het pad naar onze bucket als een URL hebben doorgegeven: gs: // baeldung-1-bucket /, samen met een paar andere opties.

De ls optie produceert een vermelding of voorwerpen of emmers, en de -L optie gaf aan dat we een gedetailleerde lijst willen, dus we hebben details ontvangen over de emmer inclusief de aanmaaktijden en toegangscontroles.

Laten we wat gegevens aan onze bucket toevoegen!

4. Gegevens lezen, schrijven en bijwerken

In Google Cloud Storage worden objecten opgeslagen in Blobs; Blob namen kunnen elk Unicode-teken bevatten, beperkt tot 1024 tekens.

4.1. Gegevens schrijven

Laten we een Draad aan onze emmer:

String value = "Hallo, wereld!"; byte [] bytes = waarde.getBytes (UTF_8); Blob blob = bucket.create ("mijn-eerste-blob", bytes); 

Zoals u kunt zien, zijn objecten gewoon arrays van bytes in de emmer, dus bewaren we een Draad door simpelweg te werken met zijn onbewerkte bytes.

4.2. Gegevens lezen met gsutil

Nu we een emmer hebben met een voorwerp erin, laten we eens kijken gsutil.

Laten we beginnen met het opsommen van de inhoud van onze bucket:

$ gsutil ls gs: // baeldung-1-bucket / gs: // baeldung-1-bucket / mijn-eerste-blob

We zijn geslaagd gsutil de ls optie weer maar weggelaten -b en -L, dus vroegen we om een ​​korte opsomming van objecten. We ontvangen een lijst met URI's voor elk object, en dat is er in ons geval één.

Laten we het object onderzoeken:

$ gsutil cat gs: // baeldung-1-bucket / my-first-blob Hallo wereld!

Kat voegt de inhoud van het object samen met de standaarduitvoer. We zien de Draad we schreven naar de Blob.

4.3. Gegevens lezen

Blobs krijgen een BlobId bij creatie.

De eenvoudigste manier om een ​​blob op te halen, is met de BlobId:

Blob blob = storage.get (blobId); Stringwaarde = nieuwe String (blob.getContent ()); 

We geven de ID door aan Opslag en verkrijg het Blob in ruil daarvoor, en Inhoud krijgen() geeft de bytes terug.

Als we de BlobId, kunnen we de bucket op naam zoeken:

Pagina-blobs = bucket.list (); voor (Blob blob: blobs.getValues ​​()) {if (name.equals (blob.getName ())) {return new String (blob.getContent ()); }}

4.4. Gegevens bijwerken

We kunnen een Blob door het op te halen en vervolgens het te openen WriteableByteChannel:

String newString = "Tot ziens!"; Blob blob = storage.get (blobId); WritableByteChannel-kanaal = blob.writer (); channel.write (ByteBuffer.wrap (newString.getBytes (UTF_8))); kanaal.close ();

Laten we het bijgewerkte object eens bekijken:

$ gsutil cat gs: // baeldung-1-bucket / my-first-blob Dag nu!

4.5. Sla een object op in een bestand en verwijder het

Laten we het bijgewerkte object opslaan in een bestand:

$ gsutil copy gs: // baeldung-1-bucket / mijn-eerste-blob mijn-eerste-blob Kopiëren van gs: // baeldung-1-bucket / mijn-eerste-blob ... / [1 bestanden] [9.0 B / 9.0 B] Operatie voltooid over 1 objecten / 9.0 B. Grovers-Mill: ~ egoebelbecker $ cat mijn-eerste-blob Dag nu!

Zoals verwacht, de kopiëren optie kopieert het object naar de bestandsnaam die op de opdrachtregel is opgegeven.

gsutil kan elk object van Google Cloud Storage naar het lokale bestandssysteem kopiëren, ervan uitgaande dat er voldoende ruimte is om het op te slaan.

We eindigen met opruimen:

$ gsutil rm gs: // baeldung-1-bucket / mijn-eerste-blob Verwijderen gs: // baeldung-1-bucket / mijn-eerste-blob ... / [1 objecten] Bewerking voltooid over 1 object. $ gsutil ls gs: // baeldung-1-bucket / $

rm (del werkt ook) verwijdert het opgegeven object

5. Conclusie

In deze korte tutorial hebben we inloggegevens voor Google Cloud Storage gemaakt en verbonden met de infrastructuur. We hebben een bucket gemaakt, gegevens geschreven en deze vervolgens gelezen en gewijzigd. Omdat we met de API werken, hebben we ook gsutil om cloudopslag te onderzoeken terwijl we gegevens hebben gemaakt en gelezen.

We hebben ook besproken hoe u buckets kunt gebruiken en gegevens efficiënt kunt schrijven en wijzigen.

Codevoorbeelden zijn, zoals altijd, te vinden op GitHub.