Conéctate a Cloud Storage con gRPC

gRPC es un marco de trabajo de RPC universal de código abierto y alto rendimiento desarrollado por Google que puedes usar para definir tus servicios con búferes de protocolo. Puedes usar gRPC para interactuar con Cloud Storage. gRPC utiliza la conectividad directa entre las instancias de Compute Engine y los buckets de Cloud Storage, lo que omite los servidores front-end de Google (GFE).

Puedes conectarte a Cloud Storage con gRPC a través de los siguientes clientes compatibles:

Habilita gRPC en una biblioteca cliente

C++

Antes de comenzar

  1. Asegúrate de tener instaladas las siguientes versiones:

    • gRPC versión 1.65.1 o posterior

    • Versión 2.30.0 o posterior de la biblioteca cliente de C++

    • C++ versión 14 o posterior

    Para obtener instrucciones de instalación, consulta Configura un entorno de desarrollo de C++.

  2. Configura la autenticación.

  3. Asegúrate de que cada instancia de Compute Engine tenga una cuenta de servicio adjunta, incluso si la cuenta de servicio no tiene permisos. Esta cuenta de servicio se usa para representar la instancia de Compute Engine en el proceso de protocolo de enlace de la Seguridad de transporte de la capa de la aplicación (ALTS) y es necesaria para la conectividad directa.

Configura la biblioteca cliente de C++

  1. Crea un cliente de gRPC con gcs::MakeGrpcClient():

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

    La biblioteca cliente de C++ usa automáticamente la conectividad directa cuando detecta que la aplicación se ejecuta en Google Cloud.

  2. Para configurar la biblioteca cliente de C++ para que use gRPC, habilita el cliente de gRPC de Cloud Storage para actualizar la configuración del sistema de compilación para CMake o Bazel.

    CMake

    1. Habilita el complemento del cliente de gRPC de Cloud Storage en el momento de la compilación.

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. En tu base de código, para el comando target_link_libraries(), reemplaza google-cloud-cpp::storage por google-cloud-cpp::storage_grpc.

      Por ejemplo, el programa de inicio rápido para gRPC usa el siguiente código:

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

    Bazel

    Reemplaza las dependencias de @google_cloud_cpp//:storage a @google_cloud_cpp//:storage_grpc.

    Por ejemplo, el programa de inicio rápido para gRPC usa el siguiente código:

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

Java

Antes de comenzar

  1. Asegúrate de tener instaladas las siguientes versiones:

    • Bibliotecas cliente de Java:

      • com.google.cloud:google-cloud-storage:2.43.1 o una versión posterior
      • com.google.cloud:libraries-bom:26.48 o una versión posterior
    • Java 8 o versiones posteriores

    Si deseas obtener instrucciones para la instalación, consulta Configura un entorno de desarrollo de Java.

  2. Configura la autenticación.

  3. Asegúrate de que cada instancia de Compute Engine tenga una cuenta de servicio adjunta, incluso si la cuenta de servicio no tiene permisos. Esta cuenta de servicio se usa para representar la instancia de Compute Engine en el proceso de protocolo de enlace de la Seguridad de transporte de la capa de la aplicación (ALTS) y es necesaria para la conectividad directa.

Actualiza tu proyecto para usar la BOM

Para asegurarte de que tus proyectos tengan versiones compatibles de las bibliotecas cliente de Google Cloud , usa las versiones especificadas en la lista de materiales (BOM) de las bibliotecas deGoogle Cloud . Para actualizar tu proyecto y usar la BOM, usa cualquiera de los siguientes métodos:

Cloud Storage independiente

Si usas la biblioteca cliente de Cloud Storage de forma independiente (sin otras bibliotecas deGoogle Cloud ), usa la BOM específica de la biblioteca cliente de Cloud Storage.

Maven

Importa la BOM en la sección dependencyManagement de tu archivo pom.xml.

En el siguiente ejemplo, se muestra cómo importar la BOM y cómo incluir el artefacto 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

Agrega una dependencia de plataforma en 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 otras bibliotecas Google Cloud

Si usas la biblioteca cliente de Cloud Storage junto con otras bibliotecas de Google Cloud , usa la BOM de las bibliotecas cliente de Google Cloud .

Maven

Importa la BOM en la sección dependencyManagement de tu archivo pom.xml.

En el siguiente ejemplo, se muestra cómo importar la BOM y cómo incluir el artefacto 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

Agrega una dependencia de plataforma en com.google.cloud:libraries-bom:

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

Crea un cliente de gRPC

En el siguiente ejemplo, se usa un compilador centrado en gRPC. El cliente de gRPC Java usa automáticamente la conectividad directa cuando detecta que la aplicación se ejecuta en 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());
    }
  }
}

Go

Antes de comenzar

  1. Configura tu entorno de desarrollo.

  2. Asegúrate de usar la versión 1.46.0 o posterior de la biblioteca cliente de Go para Cloud Storage.

  3. Configura la autenticación.

  4. Asegúrate de que cada instancia de Compute Engine tenga una cuenta de servicio adjunta, incluso si la cuenta de servicio no tiene permisos. Esta cuenta de servicio se usa para representar la instancia de Compute Engine en el proceso de protocolo de enlace de la Seguridad de transporte de la capa de la aplicación (ALTS) y es necesaria para la conectividad directa.

Crea un cliente de gRPC

Para usar el cliente, debes llamar al constructor NewGRPCClient en tu aplicación en lugar de 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 biblioteca cliente de Go usa automáticamente la conectividad directa cuando detecta que la aplicación se ejecuta en Google Cloud.

Para obtener información sobre cómo usar un cliente de gRPC, consulta la API de gRPC.

Configurar los Controles del servicio de VPC

Si usas la nube privada virtual con direcciones IP virtuales restringidas (Controles del servicio de VPC) para mejorar la seguridad de tu red, debes actualizar las reglas de firewall para habilitar la conectividad directa y lograr un rendimiento óptimo entre tu instancia de Compute Engine y el bucket de Cloud Storage.

Para ello, agrega reglas de firewall de lista de entidades permitidas para permitir el tráfico en todos los puertos de los siguientes bloques CIDR:

  • Para el tráfico IPv4: 34.126.0.0/18
  • Para el tráfico IPv6: 2001:4860:8040::/42

Además de las reglas anteriores, conserva la regla de lista de entidades permitidas existente para 199.36.153.4/30.

Si tienes restricciones para modificar las reglas de firewall y no puedes actualizarlas, puedes forzar el tráfico para evitar la conectividad directa usando storage.googleapis.com como el extremo de Cloud Storage en lugar de google-c2p://storage.googleapis.com.

Por ejemplo, para C++, usa .set<google::cloud::EndpointOption>(storage.googleapis.com) en lugar de google-c2p:///storage.googleapis.com.

Puedes configurar las bibliotecas cliente de Cloud Storage para generar métricas relacionadas con gRPC en Cloud Monitoring. Las métricas relacionadas con gRPC pueden ayudarte a hacer lo siguiente:

  • Supervisa y optimiza el rendimiento de las solicitudes de gRPC a Cloud Storage.

  • Solucionar problemas y depurar errores

  • Obtén estadísticas sobre el uso y el comportamiento de tu aplicación.

Para obtener información sobre cómo generar métricas relacionadas con gRPC, consulta Usa métricas del cliente.

Si no es necesario recopilar métricas para tu caso de uso, puedes inhabilitar la recopilación de métricas. Para obtener instrucciones, consulta Cómo inhabilitar las métricas del cliente.

Limitaciones

  • Las solicitudes de IPv6 no se pueden enviar a través de redes heredadas.

  • No se admite la conectividad directa cuando se usan las siguientes versiones de GKE en clústeres solo IPv4:

    • 1.28, 1.28.0-gke.100 o posterior hasta 1.28.5-gke.1199000
    • 1.27, 1.27.4-gke.1900 o versiones posteriores
    • 1.26, 1.26.10-gke.1238000 o versiones posteriores
    • 1.25, 1.25.15-gke.1045000 o versiones posteriores
  • gRPC no admite los métodos notifications, hmacKeys ni serviceAccount.

  • Las opciones de constructor de cliente específicas de HTTP, como WithHTTPClient, no son compatibles con la biblioteca cliente de Go.

Soluciona problemas de conectividad directa

Para obtener información sobre cómo verificar la conectividad directa y solucionar problemas cuando no está disponible, consulta Conectividad directa.

¿Qué sigue?