Einführung in Google Cloud Storage mit Java

Einführung in Google Cloud Storage mit Java

1. Überblick

Google Cloud Storage bietet Online-Speicher, der auf die Anforderungen einer einzelnen Anwendung zugeschnitten ist und auf Standort, Zugriffshäufigkeit und Kosten basiert. Im Gegensatz zu Amazon Web Services verwendet Google Cloud Storage eine einzige API für den Hoch-, Mittel- und Niederfrequenzzugriff.

Wie die meisten Cloud-Plattformen bietet Google eine kostenlose Zugriffsebene. Die Preisangaben sindhere.

In diesem Lernprogramm stellen wir eine Verbindung zum Speicher her, erstellen einen Bucket, schreiben, lesen und aktualisieren Daten. Während Sie die API zum Lesen und Schreiben von Daten verwenden, verwenden wir auch das Cloud-Speicherdienstprogrammgsutil.

2. Google Cloud Storage-Setup

2.1. Maven-Abhängigkeit

Wir müssen unserenpom.xml eine einzige Abhängigkeit hinzufügen:


    com.google.cloud
    google-cloud-storage
    1.17.0

Maven Central hat dielatest version of the library.

2.2. Authentifizierungsschlüssel erstellen

Bevor wir eine Verbindung zu Google Cloud herstellen können, müssen wirauthentication konfigurieren. Google Cloud Platform (GCP) -Anwendungen laden einen privaten Schlüssel und Konfigurationsinformationen aus einer JSON-Konfigurationsdatei. Wir generieren diese Datei über die GCP-Konsole. Für den Zugriff auf die Konsole ist ein gültiges Google Cloud Platform-Konto erforderlich.

Wir erstellen unsere Konfiguration durch:

  1. Gehen Sie zuGoogle Cloud Platform Console

  2. Wenn wir noch kein GCP-Projekt definiert haben, klicken wir auf die Schaltflächecreate und geben einen Projektnamen ein, z. B. "example-cloud-tutorial".

  3. Wählen Sie "new service account" aus der Dropdown-Liste

  4. Fügen Sie dem Feld Kontoname einen Namen wie "example-cloud-storage" hinzu.

  5. Wählen Sie unter "role" Projekt und dann Eigentümer im Untermenü.

  6. Wählen Sie create und die Konsole lädt eine private Schlüsseldatei herunter.

Die Rolle in Schritt 6 autorisiert das Konto für den Zugriff auf Projektressourcen. Der Einfachheit halber haben wir diesem Konto vollständigen Zugriff auf alle Projektressourcen gewährt.

Für eine Produktionsumgebung definieren wir eine Rolle, die dem Zugriff entspricht, den die Anwendung benötigt.

2.3. Installieren Sie den Authentifizierungsschlüssel

Als Nächstes kopieren wir die von der GCP-Konsole heruntergeladene Datei an einen geeigneten Speicherort und zeigen mit der UmgebungsvariablenGOOGLE_APPLICATION_CREDENTIALSdarauf. Dies ist der einfachste Weg, um die Anmeldeinformationen zu laden, obwohl wir uns unten eine andere Möglichkeit ansehen werden.

Für Linux oder Mac:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/file"

Für Windows:

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

2.4. Installieren Sie Cloud Tools

Google bietet verschiedene Tools zum Verwalten der Cloud-Plattform. In diesem Lernprogramm werden wirgsutil verwenden, um Daten neben der API zu lesen und zu schreiben.

Wir können dies in zwei einfachen Schritten tun:

  1. Installieren Sie das Cloud SDK gemäß den Anweisungenhere für unsere Plattform.

  2. Folgen Sie dem Schnellstart für unsere Plattformhere. In Schritt 4 vonInitialize the SDK wählen wir den Projektnamen in Schritt 4 von Abschnitt 2.2 oben aus („example-cloud-storage“ oder den von Ihnen verwendeten Namen).

gsutil ist jetzt installiert und konfiguriert, um Daten aus unserem Cloud-Projekt zu lesen.

3. Verbindung zuStorage herstellen undBucket erstellen

3.1. Stellen Sie eine Verbindung zuStorage her

Bevor wir den Google Cloud-Speicher verwenden können, müssen wir ein Serviceobjekt erstellen. Wenn wir die UmgebungsvariableGOOGLE_APPLICATION_CREDENTIALSbereits eingerichtet haben, können wir die Standardinstanz verwenden:

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

Wenn wir die Umgebungsvariable nicht verwenden möchten, müssen wir eineCredentials-Instanz erstellen und anStorage with den Projektnamen übergeben:

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

3.2. Bucket erstellen

Nachdem wir verbunden und authentifiziert sind, können wir einen Bucket erstellen. Eimer sind Container, die Objekte enthalten. Sie können verwendet werden, um den Datenzugriff zu organisieren und zu steuern.

Die Anzahl der Objekte in einem Bucket ist unbegrenzt. GCPlimits die Anzahl der Operationen an Buckets undencourages application designers to emphasize operations on objects rather than on buckets.

Das Erstellen eines Buckets erfordert einBucketInfo:

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

In diesem einfachen Beispiel geben wir einen Bucket-Namen an und akzeptieren die Standardeigenschaften. Bucket names must beglobally unique. Wenn wir einen Namen verwenden, der bereits verwendet wird, schlägtcreate() fehl.

3.3. Bucket mitgsutil untersuchen

Da wir jetzt einen Bucket haben, können wir ihn mitgsutil. untersuchen

Lassen Sie uns eine Eingabeaufforderung öffnen und einen Blick darauf werfen:

$ gsutil ls -L -b gs://example-1-bucket/
gs://example-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 sieht Shell-Befehlen sehr ähnlich, und jeder, der mit der Unix-Befehlszeile vertraut ist, sollte sich hier sehr wohl fühlen. Beachten Sie, dass wir den Pfad zu unserem Bucket als URL übergeben haben:gs://example-1-bucket/, zusammen mit einigen anderen Optionen.

Die Optionls erzeugt eine Auflistung oderobjects oderbuckets, und die Option-L zeigt an, dass wir eine detaillierte Auflistung wünschen - daher haben wir Details zubucket erhalten einschließlich der Erstellungszeiten und Zugriffskontrollen.

Fügen wir unserem Bucket einige Daten hinzu!

4. Daten lesen, schreiben und aktualisieren

In Google Cloud Storage, objects are stored in Blobs; Blob Namen können beliebige Unicode-Zeichen enthalten, die auf 1024 Zeichen begrenzt sind.

4.1. Daten schreiben

Speichern wir einString in unserem Bucket:

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

Wie Sie sehen können, sind Objekte einfach Arrays vonbytes im Bucket. Wir speichern also einString, indem wir einfach mit seinen Rohbytes arbeiten.

4.2. Daten mitgsutil lesen

Nachdem wir nun einen Bucket mit einem Objekt darin haben, werfen wir einen Blick aufgsutil.

Beginnen wir mit der Auflistung des Inhalts unseres Eimers:

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

Wir habengsutil die Optionls erneut übergeben, aber-b und-L, weggelassen, sodass wir um eine kurze Auflistung der Objekte gebeten haben. Wir erhalten für jedes Objekt eine Liste von URIs, in unserem Fall eine.

Untersuchen wir das Objekt:

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

Cat verkettet den Inhalt des Objekts mit der Standardausgabe. Wir sehen dieString, die wir an dieBlob. geschrieben haben

4.3. Daten lesen

Blobs werden bei der Erstellung einBlobId zugewiesen.

Der einfachste Weg, einen Blob abzurufen, ist mitBlobId:

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

Wir übergeben die ID anStorage und erhalten dieBlob zurück, undgetContent() gibt die Bytes zurück.

Wenn wir dieBlobIdnicht haben, können wir den Bucket nach Namen durchsuchen:

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

4.4. Daten aktualisieren

Wir können einBlob aktualisieren, indem wir es abrufen und dann auf seineWriteableByteChannel zugreifen:

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

Untersuchen wir das aktualisierte Objekt:

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

4.5. Speichern Sie ein Objekt in einer Datei und löschen Sie es dann

Speichern wir das aktualisierte Objekt in einer Datei:

$ gsutil copy gs://example-1-bucket/my-first-blob my-first-blob
Copying gs://example-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!

Wie erwartet kopiert die Optioncopy das Objekt in den in der Befehlszeile angegebenen Dateinamen.

gsutil kann jedes Objekt aus Google Cloud Storage in das lokale Dateisystem kopieren, vorausgesetzt, es ist genügend Speicherplatz zum Speichern vorhanden.

Zum Abschluss räumen wir auf:

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

rm (del funktioniert auch) löscht das angegebene Objekt

5. Fazit

In diesem kurzen Lernprogramm haben wir Anmeldeinformationen für Google Cloud Storage erstellt und eine Verbindung zur Infrastruktur hergestellt. Wir haben einen Bucket erstellt, Daten geschrieben, gelesen und geändert. Während wir mit der API arbeiten, haben wir auchgsutil verwendet, um den Cloud-Speicher beim Erstellen und Lesen von Daten zu untersuchen.

Wir haben auch erläutert, wie Sie Buckets verwenden und Daten effizient schreiben und ändern können.

Codebeispiele finden sich wie immer inover on GitHub.