Conectarse a Cloud Storage mediante gRPC

gRPC es un framework de RPC universal de alto rendimiento y código abierto 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 segmentos de Cloud Storage, lo que evita el uso de Google Front Ends (GFEs).

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

Habilitar gRPC en una biblioteca de cliente

C++

Antes de empezar

  1. Asegúrate de que tienes instaladas las siguientes versiones:

    • gRPC 1.65.1 o una versión posterior

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

    • C++ versión 14 o posterior

    Para obtener instrucciones de instalación, consulta el artículo Configurar 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 asociada, aunque no tenga permisos. Esta cuenta de servicio se usa para representar la instancia de Compute Engine en el proceso de handshake de seguridad de transporte en la capa de la aplicación (ALTS) y es necesaria para la conectividad directa.

Configurar la biblioteca de cliente de C++

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

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

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

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

    CMake

    1. Habilita el complemento de cliente gRPC de Cloud Storage en tiempo de compilación.

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

      Por ejemplo, el programa de inicio rápido de 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 de 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 empezar

  1. Asegúrate de que tienes instaladas las siguientes versiones:

    • Bibliotecas de cliente de Java:

      • com.google.cloud:google-cloud-storage:2.43.1 o versiones posteriores.
      • com.google.cloud:libraries-bom:26.48 o versiones posteriores.
    • Java 8 o versiones posteriores

    Para obtener instrucciones de instalación, consulta el artículo Configurar 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 asociada, aunque no tenga permisos. Esta cuenta de servicio se usa para representar la instancia de Compute Engine en el proceso de handshake de seguridad de transporte en la capa de la aplicación (ALTS) y es necesaria para la conectividad directa.

Actualizar un proyecto para usar la BOM

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

Cloud Storage independiente

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

Maven

Importa la lista de materiales en la sección dependencyManagement del archivo pom.xml.

En el siguiente ejemplo se muestra cómo importar la lista de materiales e 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

Añade 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 Google Cloud bibliotecas

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

Maven

Importa la lista de materiales en la sección dependencyManagement del archivo pom.xml.

En el siguiente ejemplo se muestra cómo importar la lista de materiales e 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

Añade 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'

Crear un cliente gRPC

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

  1. Configura tu entorno de desarrollo.

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

  3. Configura la autenticación.

  4. Asegúrate de que cada instancia de Compute Engine tenga una cuenta de servicio asociada, aunque no tenga permisos. Esta cuenta de servicio se usa para representar la instancia de Compute Engine en el proceso de handshake de seguridad de transporte en la capa de la aplicación (ALTS) y es necesaria para la conectividad directa.

Crear un cliente 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 de cliente de Go usa automáticamente la conectividad directa cuando detecta que la aplicación se está ejecutando en Google Cloud.

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

Configurar Controles de Servicio de VPC

Si usas una nube privada virtual con direcciones IP virtuales restringidas (Controles de Servicio de VPC) para mejorar la seguridad de tu red, debes actualizar las reglas de cortafuegos para habilitar la conectividad directa y así optimizar el rendimiento entre tu instancia de Compute Engine y tu cubo de Cloud Storage.

Para ello, añada reglas de cortafuegos de lista de permitidos 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 permitidos de 199.36.153.4/30.

Si tienes restricciones en las modificaciones de las reglas de cortafuegos y no puedes actualizarlas, puedes forzar que el tráfico evite la conectividad directa usando storage.googleapis.com como endpoint de Cloud Storage en lugar de google-c2p://storage.googleapis.com.

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

Puedes configurar las bibliotecas de 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:

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

  • Solucionar y depurar problemas.

  • 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 Usar métricas del lado del cliente.

Si no necesitas recoger métricas para tu caso práctico, puedes inhabilitar la recogida de métricas. Para obtener instrucciones, consulta Inhabilitar las métricas del lado del cliente.

Limitaciones

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

  • 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 versiones posteriores 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 posterior
  • gRPC no admite los métodos notifications, hmacKeys y serviceAccount.

  • Las opciones de constructor de cliente específicas de HTTP, como WithHTTPClient, no se admiten en la biblioteca de cliente Go.

  • La API gRPC no se admite con endpoints regionales.

Solucionar problemas de conectividad directa

Para saber cómo comprobar la conectividad directa y solucionar problemas cuando no está disponible, consulta el artículo Conectividad directa.

Siguientes pasos