Connettiti a Cloud Storage utilizzando gRPC

gRPC è un framework RPC universale open source ad alte prestazioni sviluppato da Google che puoi utilizzare per definire i tuoi servizi utilizzando i buffer di protocollo. Puoi utilizzare gRPC per interagire con Cloud Storage. gRPC utilizza la connettività diretta tra le istanze Compute Engine e i bucket Cloud Storage, bypassando i Google Front Ends (GFE).

Puoi connetterti a Cloud Storage utilizzando gRPC tramite i seguenti client supportati:

Attivare gRPC su una libreria client

C++

Prima di iniziare

  1. Assicurati di aver installato le seguenti versioni:

    • gRPC versione 1.65.1 o successive

    • Libreria client C++ versione v2.30.0 o successive

    • C++ versione 14 o successive

    Per le istruzioni di installazione, consulta Configurare un ambiente di sviluppo C++.

  2. Configura l'autenticazione.

  3. Assicurati che a ogni istanza di Compute Engine sia collegato un service account, anche se il account di servizio non dispone di autorizzazioni. Questo account di servizio viene utilizzato per rappresentare l'istanza Compute Engine nel processo di handshake Application Layer Transport Security (ALTS) ed è necessario per la connettività diretta.

Configura la libreria client C++

  1. Crea un client gRPC utilizzando gcs::MakeGrpcClient():

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

    La libreria client C++ utilizza automaticamente la connettività diretta quando rileva che l'applicazione è in esecuzione su Google Cloud.

  2. Per configurare la libreria client C++ in modo che utilizzi gRPC, abilita il client gRPC di Cloud Storage per aggiornare la configurazione del sistema di compilazione per CMake o Bazel.

    CMake

    1. Attiva il plug-in client gRPC di Cloud Storage in fase di compilazione.

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. Nel codebase, per il comando target_link_libraries() sostituisci google-cloud-cpp::storage con google-cloud-cpp::storage_grpc

      Ad esempio, il programma di avvio rapido per gRPC utilizza il seguente codice:

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

    Bazel

    Sostituisci le dipendenze da @google_cloud_cpp//:storage a @google_cloud_cpp//:storage_grpc.

    Ad esempio, il programma di avvio rapido per gRPC utilizza il seguente codice:

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

Java

Prima di iniziare

  1. Assicurati di aver installato le seguenti versioni:

    • Librerie client Java:

      • com.google.cloud:google-cloud-storage:2.43.1 o versioni successive.
      • com.google.cloud:libraries-bom:26.48 o versioni successive.
    • Java 8 o versioni successive

    Per istruzioni sull'installazione, vedi Configurazione di un ambiente di sviluppo Java.

  2. Configura l'autenticazione.

  3. Assicurati che a ogni istanza di Compute Engine sia collegato un service account, anche se il account di servizio non dispone di autorizzazioni. Questo account di servizio viene utilizzato per rappresentare l'istanza Compute Engine nel processo di handshake Application Layer Transport Security (ALTS) ed è necessario per la connettività diretta.

Aggiorna il progetto per utilizzare la distinta materiali

Per assicurarti che i tuoi progetti abbiano versioni compatibili delle librerie client Google Cloud , utilizza le versioni specificate nella distinta materiali (BOM) delle librerieGoogle Cloud . Per aggiornare il progetto in modo che utilizzi la BOM, utilizza uno dei seguenti metodi:

Cloud Storage autonomo

Se utilizzi la libreria client di Cloud Storage in modo indipendente (senza altre librerieGoogle Cloud ), utilizza la distinta materiali specifica della libreria client di Cloud Storage.

Maven

Importa la distinta materiali nella sezione dependencyManagement del file pom.xml.

L'esempio seguente mostra come importare la distinta materiali e includere l'artefatto google-cloud-storage.

<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

Aggiungi una dipendenza della piattaforma su com.google.cloud:google-cloud-storage-bom:

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

Cloud Storage con altre Google Cloud librerie

Se utilizzi la libreria client di Cloud Storage insieme ad altre librerie Google Cloud , utilizza la distinta materiali delle librerie client Google Cloud .

Maven

Importa la distinta materiali nella sezione dependencyManagement del file pom.xml.

L'esempio seguente mostra come importare la distinta materiali e includere l'artefatto libraries-bom.

<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

Aggiungi una dipendenza della piattaforma su com.google.cloud:libraries-bom:

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

Crea un client gRPC

L'esempio seguente utilizza un builder incentrato su gRPC. Il client Java gRPC utilizza automaticamente la connettività diretta quando rileva che l'applicazione è in esecuzione su Google Cloud.

// 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());
    }
  }
}

Vai

Prima di iniziare

  1. Configura l'ambiente di sviluppo.

  2. Assicurati di utilizzare la libreria client Go di Cloud Storage versione 1.46.0 o successive.

  3. Configura l'autenticazione.

  4. Assicurati che a ogni istanza di Compute Engine sia collegato un service account, anche se il account di servizio non dispone di autorizzazioni. Questo account di servizio viene utilizzato per rappresentare l'istanza Compute Engine nel processo di handshake Application Layer Transport Security (ALTS) ed è necessario per la connettività diretta.

Crea un client gRPC

Per utilizzare il client, devi chiamare il costruttore NewGRPCClient nella tua applicazione anziché NewClient.


// 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)
}

La libreria client Go utilizza automaticamente la connettività diretta quando rileva che l'applicazione è in esecuzione su Google Cloud.

Per informazioni su come utilizzare un client gRPC, consulta l'articolo API gRPC.

Configurazione dei Controlli di servizio VPC

Se utilizzi Virtual Private Cloud con indirizzi IP virtuali limitati (controlli di servizio VPC) per migliorare la sicurezza della tua rete, devi aggiornare le regole firewall per attivare la connettività diretta per prestazioni ottimali tra l'istanza Compute Engine e il bucket Cloud Storage.

A questo scopo, aggiungi regole firewall per la lista consentita per consentire il traffico su tutte le porte per i seguenti blocchi CIDR:

  • Per il traffico IPv4: 34.126.0.0/18
  • Per il traffico IPv6: 2001:4860:8040::/42

Oltre alle regole precedenti, conserva la regola della lista consentita esistente per 199.36.153.4/30.

Se hai limitazioni alle modifiche delle regole firewall e non puoi aggiornarle, puoi forzare il traffico a evitare la connettività diretta utilizzando storage.googleapis.com come endpoint Cloud Storage anziché google-c2p://storage.googleapis.com.

Ad esempio, per l'utilizzo di C++, .set<google::cloud::EndpointOption>(storage.googleapis.com) anziché google-c2p:///storage.googleapis.com.

Puoi configurare le librerie client di Cloud Storage per generare metriche correlate a gRPC in Cloud Monitoring. Le metriche correlate a gRPC possono aiutarti a:

  • Monitora e ottimizza le prestazioni delle richieste gRPC a Cloud Storage.

  • Risolvi i problemi ed esegui il debug.

  • Ottieni informazioni sull'utilizzo e sul comportamento della tua applicazione.

Per informazioni su come generare metriche correlate a gRPC, consulta Utilizzare le metriche lato client.

Se la raccolta di metriche non è necessaria per il tuo caso d'uso, puoi disattivarla. Per istruzioni, vedi Disattivare le metriche lato client.

Limitazioni

  • Le richieste IPv6 non possono essere inviate tramite reti legacy.

  • La connettività diretta non è supportata quando utilizzi le seguenti versioni di GKE su cluster solo IPv4:

    • 1.28, 1.28.0-gke.100 o versioni successive fino alla 1.28.5-gke.1199000
    • 1.27, 1.27.4-gke.1900 o versioni successive
    • 1.26, 1.26.10-gke.1238000 o versioni successive
    • 1.25, 1.25.15-gke.1045000 o versioni successive
  • gRPC non supporta i metodi notifications, hmacKeys e serviceAccount.

  • Le opzioni del costruttore del client specifiche per HTTP, come WithHTTPClient, non sono supportate per la libreria client Go.

Risoluzione dei problemi di connettività diretta

Per scoprire come verificare la connettività diretta e risolvere i problemi quando non è disponibile, vedi Connettività diretta.

Passaggi successivi