Ligue-se ao Cloud Storage através do gRPC

O gRPC é um framework de RPC universal de código aberto e de alto desempenho desenvolvido pela Google que pode usar para definir os seus serviços através de Protocol Buffers. Pode usar o gRPC para interagir com o Cloud Storage. O gRPC usa a conetividade direta entre instâncias do Compute Engine e contentores do Cloud Storage, ignorando os front-ends da Google (GFEs).

Pode estabelecer ligação ao Cloud Storage através de gRPC com os seguintes clientes suportados:

Ative o gRPC numa biblioteca de cliente

C++

Antes de começar

  1. Certifique-se de que tem as seguintes versões instaladas:

    • Versão 1.65.1 ou posterior do gRPC

    • Versão v2.30.0 ou posterior da biblioteca cliente de C++

    • Versão 14 ou posterior do C++

    Para ver instruções de instalação, consulte o artigo Configurar um ambiente de desenvolvimento C++.

  2. Configure a autenticação.

  3. Certifique-se de que cada instância do Compute Engine tem uma conta de serviço associada, mesmo que a conta de serviço não tenha autorizações. Esta conta de serviço é usada para representar a instância do Compute Engine no processo de handshake da segurança de transporte da camada de aplicação (ALTS) e é necessária para a conetividade direta.

Configure a biblioteca de cliente C++

  1. Crie um cliente gRPC com gcs::MakeGrpcClient():

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

    A biblioteca de cliente C++ usa automaticamente a conetividade direta quando deteta que a aplicação está a ser executada no Trusted Cloud by S3NS.

  2. Para configurar a biblioteca de cliente C++ para usar o gRPC, ative o cliente gRPC do Cloud Storage para atualizar a configuração do sistema de compilação para o CMake ou o Bazel.

    CMake

    1. Ative o plug-in do cliente gRPC do Cloud Storage no momento da compilação.

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. Na sua base de código, para o comando target_link_libraries(), substitua google-cloud-cpp::storage por google-cloud-cpp::storage_grpc

      Por exemplo, o programa de início rápido para gRPC usa o seguinte código:

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

    Bazel

    Substitua as dependências de @google_cloud_cpp//:storage por @google_cloud_cpp//:storage_grpc.

    Por exemplo, o programa de início rápido para gRPC usa o seguinte código:

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

Java

Antes de começar

  1. Certifique-se de que tem as seguintes versões instaladas:

    • Bibliotecas cliente Java:

      • com.google.cloud:google-cloud-storage:2.43.1 ou posterior.
      • com.google.cloud:libraries-bom:26.48 ou posterior.
    • Java 8 ou posterior

    Para ver instruções de instalação, consulte o artigo Configurar um ambiente de desenvolvimento Java.

  2. Configure a autenticação.

  3. Certifique-se de que cada instância do Compute Engine tem uma conta de serviço associada, mesmo que a conta de serviço não tenha autorizações. Esta conta de serviço é usada para representar a instância do Compute Engine no processo de handshake da segurança de transporte da camada de aplicação (ALTS) e é necessária para a conetividade direta.

Atualize o seu projeto para usar a BOM

Para garantir que os seus projetos têm versões compatíveis das Trusted Cloud by S3NS bibliotecas de cliente, use as versões especificadas na Trusted Cloud by S3NS lista de materiais (BOM) das bibliotecas. Para atualizar o seu projeto para usar a BOM, use qualquer um dos seguintes métodos:

Cloud Storage autónomo

Se estiver a usar a biblioteca cliente do Cloud Storage de forma independente (sem outras bibliotecas), use a BOM específica da biblioteca cliente do Cloud Storage.Trusted Cloud by S3NS

Maven

Importe a BOM na secção dependencyManagement do ficheiro pom.xml.

O exemplo seguinte mostra como importar a BOM e incluir o 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

Adicione uma dependência de plataforma em 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'

Armazenamento na nuvem com outras Trusted Cloud bibliotecas

Se estiver a usar a biblioteca cliente do Cloud Storage juntamente com outras bibliotecas Trusted Cloud , use a BOM das bibliotecas Trusted Cloud cliente.

Maven

Importe a BOM na secção dependencyManagement do ficheiro pom.xml.

O exemplo seguinte mostra como importar a BOM e incluir o 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

Adicione uma dependência de plataforma em com.google.cloud:libraries-bom:

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

Crie um cliente gRPC

O exemplo seguinte usa um criador centrado no gRPC. O cliente Java gRPC usa automaticamente a conetividade direta quando deteta que a aplicação está a ser executada no Trusted 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 começar

  1. Configure o seu ambiente de desenvolvimento.

  2. Certifique-se de que usa a versão 1.46.0 ou posterior da biblioteca de cliente Go do Cloud Storage.

  3. Configure a autenticação.

  4. Certifique-se de que cada instância do Compute Engine tem uma conta de serviço associada, mesmo que a conta de serviço não tenha autorizações. Esta conta de serviço é usada para representar a instância do Compute Engine no processo de handshake da segurança de transporte da camada de aplicação (ALTS) e é necessária para a conetividade direta.

Crie um cliente gRPC

Para usar o cliente, tem de chamar o construtor NewGRPCClient na sua aplicação em vez 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)
}

A biblioteca de cliente Go usa automaticamente a conetividade direta quando deteta que a aplicação está a ser executada no Trusted Cloud.

Para obter informações sobre como usar um cliente gRPC, consulte a API gRPC.

Configure os VPC Service Controls

Se estiver a usar a nuvem virtual privada com endereços IP virtuais restritos (VPC Service Controls) para melhorar a segurança da sua rede, tem de atualizar as regras da firewall para ativar a conetividade direta para um desempenho ideal entre a sua instância do Compute Engine e o contentor do Cloud Storage.

Para tal, adicione regras de firewall da lista de autorizações para permitir o tráfego em todas as portas para os seguintes blocos CIDR:

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

Além das regras anteriores, mantenha a regra da lista de autorizações existente para 199.36.153.4/30.

Se tiver restrições nas modificações das regras da firewall e não as puder atualizar, pode forçar o tráfego a evitar a conetividade direta usando storage.googleapis.com como o ponto final do Cloud Storage em vez de google-c2p://storage.googleapis.com.

Por exemplo, para usar C++, use .set<google::cloud::EndpointOption>(storage.googleapis.com) em vez de google-c2p:///storage.googleapis.com.

Pode configurar as bibliotecas de cliente do Cloud Storage para gerar métricas relacionadas com gRPC no Cloud Monitoring. As métricas relacionadas com gRPC podem ajudar a fazer o seguinte:

  • Monitorize e otimize o desempenho dos pedidos gRPC para o Cloud Storage.

  • Resolva e depure problemas.

  • Obtenha estatísticas sobre a utilização e o comportamento da sua aplicação.

Para ver informações sobre como gerar métricas relacionadas com gRPC, consulte o artigo Use métricas do lado do cliente.

Se a recolha de métricas não for necessária para o seu exemplo de utilização, pode optar por não participar na recolha de métricas. Para ver instruções, consulte o artigo Desative as métricas do lado do cliente.

Limitações

  • Não é possível enviar pedidos IPv6 através de redes antigas.

  • A conetividade direta não é suportada quando usa as seguintes versões do GKE em clusters apenas IPv4:

    • 1.28, 1.28.0-gke.100 ou posterior até 1.28.5-gke.1199000
    • 1.27, 1.27.4-gke.1900 ou posterior
    • 1.26, 1.26.10-gke.1238000 ou posterior
    • 1.25, 1.25.15-gke.1045000 ou posterior
  • O gRPC não suporta os métodos notifications, hmacKeys e serviceAccount.

  • As opções de construtor de cliente específicas de HTTP, como WithHTTPClient, não são suportadas para a biblioteca de cliente Go.

  • A API gRPC não é compatível com pontos finais regionais.

Resolução de problemas de conetividade direta

Para saber como verificar a conetividade direta e resolver problemas quando não está disponível, consulte o artigo Conetividade direta.

O que se segue?