Mit gRPC eine Verbindung zu Cloud Storage herstellen

gRPC ist ein von Google entwickeltes leistungsstarkes, universelles Open-Source-RPC-Framework, mit dem Sie Ihre Dienste mithilfe von Protokollzwischenspeichern definieren können. Sie können gRPC verwenden, um mit Cloud Storage zu interagieren. gRPC nutzt eine direkte Verbindung zwischen Compute Engine- und Cloud Storage-Buckets, ohne Google-Front-Ends (GFEs) zu verwenden.

Die direkte Verwendung von gRPC für eine Verbindung zu Cloud Storage wird nicht unterstützt. Sie können jedoch über die folgenden unterstützten Clients eine Verbindung zu Cloud Storage herstellen:

gRPC in einer Clientbibliothek aktivieren

C++

Hinweise

  1. Die folgenden Versionen müssen installiert sein:

    • gRPC Version 1.65.1 oder höher
    • C++-Clientbibliothek Version 2.30.0 oder höher
    • C++ Version 14 oder höher

    Eine Installationsanleitung finden Sie unter C++-Entwicklungsumgebung einrichten.

  2. Richten Sie die Authentifizierung ein.

C++-Clientbibliothek konfigurieren

  1. So erstellen Sie einen gRPC-Client mit gcs::MakeGrpcClient():

      namespace gcs = google::cloud::storage;
      void App() {
       auto client = gcs::MakeGrpcClient();
    
      // application code
    
      }
    

    Die C++-Clientbibliothek verwendet automatisch eine direkte Verbindung, wenn sie erkennt, dass die Anwendung auf Google Cloud ausgeführt wird.

  2. Wenn Sie die C++-Clientbibliothek für die Verwendung von gRPC konfigurieren möchten, aktivieren Sie den Cloud Storage-gRPC-Client, um die Buildsystemkonfiguration für CMake und Bazel zu aktualisieren.

    CMake

    1. Cloud Storage-gRPC-Client-Plug-in zur Laufzeit aktivieren

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. Ersetzen Sie in Ihrer Codebasis im Befehl target_link_libraries() google-cloud-cpp::storage durch google-cloud-cpp::storage_grpc.

      Im Schnellstartprogramm für gRPC wird beispielsweise der folgende Code verwendet:

      add_executable(quickstart_grpc quickstart_grpc.cc)
      target_link_libraries(quickstart_grpc google-cloud-cpp::storage_grpc)
      

    Bazel

    Ersetzen Sie die Abhängigkeiten von @google_cloud_cpp//:storage durch @google_cloud_cpp//:storage_grpc.

    Im Schnellstartprogramm für gRPC wird beispielsweise der folgende Code verwendet:

      cc_binary(
          name = "quickstart",
          srcs = [
              "quickstart.cc",
          ],
          deps = [
              "@com_github_googleapis_google_cloud_cpp//:storage_grpc",
          ],
      )
    

Java

Hinweise

  1. Die folgenden Versionen müssen installiert sein:

    • Java-Clientbibliotheken:

      • com.google.cloud:google-cloud-storage:2.43.1 oder höher.
      • com.google.cloud:libraries-bom:26.48 oder höher.
    • Java 8 oder höher

    Eine Anleitung zur Installation finden Sie unter Java-Entwicklungsumgebung einrichten.

  2. Richten Sie die Authentifizierung ein.

Projekt für die Verwendung der BOM aktualisieren

Verwenden Sie die in der Google Cloud-BOM (Bill of Materials) angegebenen Versionen, damit Ihre Projekte kompatible Versionen von Google Cloud-Clientbibliotheken haben. Sie haben folgende Möglichkeiten, Ihr Projekt für die Verwendung der BOM zu aktualisieren:

Eigenständiger Cloud-Speicher

Wenn Sie die Cloud Storage-Clientbibliothek unabhängig (ohne andere Google Cloud-Bibliotheken) verwenden, verwenden Sie die BOM, die speziell für die Cloud Storage-Clientbibliothek gilt.

Maven

Importieren Sie die BOM in den dependencyManagement-Abschnitt Ihrer pom.xml-Datei.

Das folgende Beispiel zeigt, wie Sie die BOM importieren und das google-cloud-storage-Artefakt einschließen.

<dependencyManagement>
  <dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage-bom</artifactId>
   <version>2.43.1</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage</artifactId>
  </dependency>
</dependencies>

Gradle

Fügen Sie eine Plattformabhängigkeit von com.google.cloud:google-cloud-storage-bom hinzu:

implementation platform('com.google.cloud:google-cloud-storage-bom:2.43.1')
implementation 'com.google.cloud:google-cloud-storage'

Cloud Storage mit anderen Google Cloud-Bibliotheken

Wenn Sie die Cloud Storage-Clientbibliothek zusammen mit anderen Google Cloud-Bibliotheken verwenden, verwenden Sie die BOM für Google Cloud-Clientbibliotheken.

Maven

Importieren Sie die BOM in den dependencyManagement-Abschnitt Ihrer pom.xml-Datei.

Im folgenden Beispiel wird gezeigt, wie Sie die BOM importieren und das libraries-bom-Artefakt einschließen.

<dependencyManagement>
  <dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>libraries-bom</artifactId>
   <version>26.48.0</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-storage</artifactId>
  </dependency>
</dependencies>

Gradle

Fügen Sie eine Plattformabhängigkeit von com.google.cloud:libraries-bom hinzu:

implementation platform('com.google.cloud:libraries-bom:26.48.0')
implementation 'com.google.cloud:google-cloud-storage'

gRPC-Client erstellen

Im folgenden Beispiel wird ein gRPC-orientierter Builder verwendet. Der gRPC Java-Client verwendet automatisch eine direkte Verbindung, wenn erkannt wird, dass die Anwendung in Google Cloud ausgeführt wird.

// Imports the Google Cloud client library
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class QuickstartGrpcSample {
  public static void main(String... args) throws Exception {

    // Create an instance of options which will use the Google Cloud Storage gRPC API for all
    // operations
    StorageOptions options = StorageOptions.grpc().build();

    // Instantiates a client in a try-with-resource to automatically cleanup underlying resources
    try (Storage storage = options.getService()) {
      // The name for the new bucket
      String bucketName = args[0]; // "my-new-bucket";

      // Creates the new bucket using a request to the gRPC API
      Bucket bucket = storage.create(BucketInfo.of(bucketName));

      System.out.printf("Bucket %s created.%n", bucket.getName());
    }
  }
}

Go

Hinweise

  1. Richten Sie Ihre Entwicklungsumgebung ein.

  2. Verwenden Sie die Version 1.46.0 oder höher der Cloud Storage Go-Clientbibliothek.

  3. Richten Sie die Authentifizierung ein.

gRPC-Client erstellen

Wenn Sie den Client verwenden möchten, müssen Sie in Ihrer Anwendung den Konstruktor NewGRPCClient anstelle von NewClient aufrufen.

import (
  "context"
  "fmt"
  "log"
  "time"
  "cloud.google.com/go/storage"
  )
  func main() {
      ctx := context.Background()
      // The project ID and bucket name
      projectID := "project-id"
      bucketName := "bucket-name"

      // Creates a gRPC enabled client.
      client, err := storage.NewGRPCClient(ctx)
      if err != nil {
          log.Fatalf("Failed to create client: %v", err)
      }
      defer client.Close()
      // Creates the new bucket.
      ctx, cancel := context.WithTimeout(ctx, time.Second*10)
      defer cancel()
      if err := client.Bucket(*bucketName).Create(ctx, *projectID, nil); err != nil {
          log.Fatalf("Failed to create bucket: %v", err)
      }
      fmt.Printf("Bucket %v created.\n", *bucketName)
  }

Die Go-Clientbibliothek verwendet automatisch eine direkte Verbindung, wenn sie erkennt, dass die Anwendung auf Google Cloud ausgeführt wird.

Informationen zur Verwendung eines gRPC-Clients finden Sie unter gRPC API.

VPC Service Controls konfigurieren

Wenn Sie eine Virtual Private Cloud mit eingeschränkten virtuellen IP-Adressen ( VPC-Dienststeuerungen) verwenden, um die Sicherheit Ihres Netzwerks zu erhöhen, müssen Sie Ihre Firewallregeln aktualisieren, um eine direkte Verbindung für eine optimale Leistung zwischen den Compute Engine-VM-Instanzen und Cloud Storage zu ermöglichen.

Fügen Sie dazu Firewallregeln für die Zulassungsliste hinzu, um Traffic auf allen Ports für die folgenden CIDR-Blöcke zuzulassen:

  • Für IPv4-Traffic: 34.126.0.0/18
  • Für IPv6-Traffic: 2001:4860:8040::/42

Behalten Sie zusätzlich zu den oben genannten Regeln die vorhandene Zulassungsliste für 199.36.153.4/30 bei.

Wenn Sie Einschränkungen bei der Änderung von Firewallregeln haben und diese nicht aktualisieren können, können Sie den Traffic dazu zwingen, eine direkte Verbindung zu vermeiden, indem Sie storage.googleapis.com anstelle von google-c2p://storage.googleapis.com als Cloud Storage-Endpunkt verwenden.

Verwenden Sie beispielsweise für C++ .set<google::cloud::EndpointOption>(storage.googleapis.com) anstelle von google-c2p:///storage.googleapis.com.

Sie können Cloud Storage-Clientbibliotheken so konfigurieren, dass gRPC-bezogene Messwerte in Cloud Monitoring generiert werden. Mit den gRPC-bezogenen Messwerten können Sie Folgendes tun:

  • Leistung von gRPC-Anfragen an Cloud Storage überwachen und optimieren

  • Probleme beheben

  • Sie erhalten Informationen zur Nutzung und zum Verhalten Ihrer Anwendung.

Informationen zum Generieren von gRPC-bezogenen Messwerten finden Sie unter Clientseitige Messwerte verwenden.

Wenn die Erfassung von Messwerten für Ihren Anwendungsfall nicht erforderlich ist, können Sie die Erfassung deaktivieren. Eine Anleitung finden Sie unter Clientseitige Messwerte deaktivieren.

Beschränkungen

  • IPv6-Anfragen können nicht über Legacy-Netzwerke gesendet werden.

  • Die Verwendung von gRPC für die Verbindung zu Cloud Storage verbessert die Leseleistung für Analysearbeitslasten, die in Google Cloud ausgeführt werden, nur dann, wenn sich Compute-VMs und Cloud Storage-Buckets in derselben Region befinden. Wir empfehlen nicht, gRPC für Buckets in Multi- und Dualregionen zu verwenden.

  • Die direkte Verbindung wird bei Verwendung der folgenden GKE-Versionen in reinen IPv4-Clustern nicht unterstützt:

    • 1.28, 1.28.0-gke.100 oder höher bis 1.28.5-gke.1199000
    • 1.27, 1.27.4-gke.1900 oder höher
    • 1.26, 1.26.10-gke.1238000 oder höher
    • 1.25, 1.25.15-gke.1045000 oder höher
  • gRPC unterstützt keine Benachrichtigungen, hmacKeys und serviceAccount-Methoden.

  • HTTP-spezifische Optionen für den Client-Konstruktor, z. B. WithHTTPClient, werden von der Go-Clientbibliothek nicht unterstützt.

Nächste Schritte