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 mit Protocol Buffers definieren können. Sie können gRPC verwenden, um mit Cloud Storage zu interagieren. gRPC nutzt direkte Verbindungen zwischen Compute Engine-Instanzen und Cloud Storage-Buckets, wobei Google Front Ends (GFEs) umgangen werden.

Sie können über die folgenden unterstützten Clients eine Verbindung zu Cloud Storage über gRPC herstellen:

gRPC in einer Clientbibliothek aktivieren

C++

Hinweise

  1. Prüfen Sie, ob die folgenden Versionen installiert sind:

    • 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.

  3. Achten Sie darauf, dass jeder Compute Engine-Instanz ein Dienstkonto zugewiesen ist, auch wenn das Dienstkonto keine Berechtigungen hat. Dieses Dienstkonto wird verwendet, um die Compute Engine-Instanz im Application Layer Transport Security (ALTS)-Handshake-Prozess darzustellen, und ist für die direkte Verbindung erforderlich.

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 direkte Konnektivität, wenn sie erkennt, dass die Anwendung auf Google Cloudausgefü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 Konfiguration Ihres Build-Systems für CMake oder Bazel zu aktualisieren.

    CMake

    1. Aktivieren Sie das Cloud Storage-gRPC-Client-Plug-in zur Kompilierzeit.

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. Ersetzen Sie in Ihrem Code für den target_link_libraries()-Befehl 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. Prüfen Sie, ob die folgenden Versionen installiert sind:

    • 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 Installationsanleitung finden Sie unter Java-Entwicklungsumgebung einrichten.

  2. Richten Sie die Authentifizierung ein.

  3. Achten Sie darauf, dass jeder Compute Engine-Instanz ein Dienstkonto zugewiesen ist, auch wenn das Dienstkonto keine Berechtigungen hat. Dieses Dienstkonto wird verwendet, um die Compute Engine-Instanz im Application Layer Transport Security (ALTS)-Handshake-Prozess darzustellen, und ist für die direkte Verbindung erforderlich.

Projekt für die Verwendung der BOM aktualisieren

Verwenden Sie die in der Google Cloud -BOM 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 andereGoogle Cloud -Bibliotheken) verwenden, verwenden Sie die Cloud Storage-Clientbibliothek-spezifische BOM.

Maven

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

Das folgende Beispiel zeigt, wie Sie das BOM importieren und das google-cloud-storage-Artefakt einfügen.

<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 Google Cloud -Clientbibliotheken-BOM.

Maven

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

Das folgende Beispiel zeigt, wie Sie die Stückliste importieren und das libraries-bom-Artefakt einfügen.

<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-zentrierter Builder verwendet. Der gRPC-Java-Client verwendet automatisch eine direkte Verbindung, wenn er erkennt, dass die Anwendung auf Google Cloudausgefü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. Entwicklungsumgebung einrichten

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

  3. Richten Sie die Authentifizierung ein.

  4. Achten Sie darauf, dass jeder Compute Engine-Instanz ein Dienstkonto zugewiesen ist, auch wenn das Dienstkonto keine Berechtigungen hat. Dieses Dienstkonto wird verwendet, um die Compute Engine-Instanz im Application Layer Transport Security (ALTS)-Handshake-Prozess darzustellen, und ist für die direkte Verbindung erforderlich.

gRPC-Client erstellen

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


// Sample storage-quickstart creates a Google Cloud Storage bucket using
// gRPC API.
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"cloud.google.com/go/storage"
)

func main() {
	ctx := context.Background()

	// Use your Google Cloud Platform project ID and Cloud Storage bucket
	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 die direkte Verbindung, wenn sie erkennt, dass die Anwendung auf Google Cloudausgeführt wird.

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

VPC Service Controls konfigurieren

Wenn Sie Virtual Private Cloud mit eingeschränkten virtuellen IP-Adressen (VPC Service Controls) 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 Ihrer Compute Engine-Instanz und Ihrem Cloud Storage-Bucket zu ermöglichen.

Fügen Sie dazu Firewallregeln für die Zulassungsliste hinzu, um Traffic an 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 Zulassungslistenregel für 199.36.153.4/30 bei.

Wenn Sie Einschränkungen für Änderungen an Firewallregeln haben und diese nicht aktualisieren können, können Sie den Traffic erzwingen, direkte Verbindungen zu vermeiden, indem Sie storage.googleapis.com als Cloud Storage-Endpunkt anstelle von google-c2p://storage.googleapis.com 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. Die gRPC-bezogenen Messwerte können Ihnen bei Folgendem helfen:

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

  • Probleme beheben und debuggen

  • Einblick in die Nutzung und das Verhalten Ihrer Anwendung erhalten

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 sie deaktivieren. Eine Anleitung finden Sie unter Clientseitige Messwerte deaktivieren.

Beschränkungen

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

  • Direkte Verbindungen werden nicht unterstützt, wenn die folgenden GKE-Versionen in Clustern verwendet werden, die nur IPv4 unterstützen:

    • 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 die Methoden notifications, hmacKeys und serviceAccount nicht.

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

Fehlerbehebung bei direkten Verbindungen

Informationen dazu, wie Sie die direkte Verbindung prüfen und Probleme beheben, wenn sie nicht verfügbar ist, finden Sie unter Direkte Verbindung.

Nächste Schritte