Menghubungkan ke Cloud Storage menggunakan gRPC

gRPC adalah framework RPC universal open source berperforma tinggi yang dikembangkan oleh Google yang dapat Anda gunakan untuk menentukan layanan menggunakan Protocol Buffers. Anda dapat menggunakan gRPC untuk berinteraksi dengan Cloud Storage. gRPC menggunakan konektivitas langsung antara instance Compute Engine dan bucket Cloud Storage, dengan melewati Google Front Ends (GFE).

Anda dapat terhubung ke Cloud Storage menggunakan gRPC melalui klien yang didukung berikut:

Mengaktifkan gRPC di library klien

C++

Sebelum memulai

  1. Pastikan Anda telah menginstal versi berikut:

    • gRPC versi 1.65.1 atau yang lebih baru

    • Library klien C++ versi v2.30.0 atau yang lebih baru

    • C++ versi 14 atau yang lebih baru

    Untuk petunjuk penginstalan, lihat Menyiapkan lingkungan pengembangan C++.

  2. Siapkan autentikasi.

  3. Pastikan setiap instance Compute Engine memiliki akun layanan yang dilampirkan kepadanya, meskipun akun layanan tidak memiliki izin. Akun layanan ini digunakan untuk merepresentasikan instance Compute Engine dalam proses handshake Application Layer Transport Security (ALTS) dan diperlukan untuk konektivitas langsung.

Mengonfigurasi library klien C++

  1. Buat klien gRPC menggunakan gcs::MakeGrpcClient():

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

    Library klien C++ secara otomatis menggunakan konektivitas langsung saat mendeteksi bahwa aplikasi berjalan di Google Cloud.

  2. Untuk mengonfigurasi library klien C++ agar menggunakan gRPC, aktifkan klien gRPC Cloud Storage untuk memperbarui konfigurasi sistem build Anda untuk CMake atau Bazel.

    CMake

    1. Aktifkan plugin klien gRPC Cloud Storage pada waktu kompilasi.

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. Dalam codebase Anda, untuk perintah target_link_libraries(), ganti google-cloud-cpp::storage dengan google-cloud-cpp::storage_grpc

      Misalnya, program panduan memulai untuk gRPC menggunakan kode berikut:

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

    Bazel

    Ganti dependensi dari @google_cloud_cpp//:storage menjadi @google_cloud_cpp//:storage_grpc.

    Misalnya, program panduan memulai untuk gRPC menggunakan kode berikut:

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

Java

Sebelum memulai

  1. Pastikan Anda telah menginstal versi berikut:

    • Library klien Java:

      • com.google.cloud:google-cloud-storage:2.43.1 atau yang lebih baru.
      • com.google.cloud:libraries-bom:26.48 atau yang lebih baru.
    • Java 8 atau yang lebih baru

    Untuk mengetahui petunjuk penginstalan, lihat Menyiapkan lingkungan pengembangan Java.

  2. Siapkan autentikasi.

  3. Pastikan setiap instance Compute Engine memiliki akun layanan yang dilampirkan kepadanya, meskipun akun layanan tidak memiliki izin. Akun layanan ini digunakan untuk merepresentasikan instance Compute Engine dalam proses handshake Application Layer Transport Security (ALTS) dan diperlukan untuk konektivitas langsung.

Perbarui project Anda untuk menggunakan BOM

Untuk memastikan bahwa project Anda memiliki versi library klien yang kompatibel, gunakan versi yang ditentukan dalam Bill of Materials (BOM) libraryGoogle Cloud . Google Cloud Untuk mengupdate project Anda agar menggunakan BOM, gunakan salah satu metode berikut:

Cloud Storage Mandiri

Jika Anda menggunakan library klien Cloud Storage secara independen (tanpa library Google Cloud lainnya), gunakan BOM khusus library klien Cloud Storage.

Maven

Impor BOM di bagian dependencyManagement pada file pom.xml Anda.

Contoh berikut menunjukkan cara mengimpor BOM dan menyertakan artefak 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

Tambahkan dependensi platform pada 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 dengan library Google Cloud lainnya

Jika Anda menggunakan library klien Cloud Storage bersama dengan library Google Cloud lainnya, gunakan BOM library klien Google Cloud .

Maven

Impor BOM di bagian dependencyManagement pada file pom.xml Anda.

Contoh berikut menunjukkan cara mengimpor BOM dan menyertakan artefak 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

Tambahkan dependensi platform pada com.google.cloud:libraries-bom:

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

Membuat klien gRPC

Contoh berikut menggunakan builder yang berfokus pada gRPC. Klien Java gRPC otomatis menggunakan konektivitas langsung saat mendeteksi bahwa aplikasi berjalan di 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

Sebelum memulai

  1. Siapkan lingkungan pengembangan Anda.

  2. Pastikan Anda menggunakan library klien Go Cloud Storage versi 1.46.0 atau yang lebih baru.

  3. Siapkan autentikasi.

  4. Pastikan setiap instance Compute Engine memiliki akun layanan yang dilampirkan kepadanya, meskipun akun layanan tidak memiliki izin. Akun layanan ini digunakan untuk merepresentasikan instance Compute Engine dalam proses handshake Application Layer Transport Security (ALTS) dan diperlukan untuk konektivitas langsung.

Membuat klien gRPC

Untuk menggunakan klien, Anda perlu memanggil konstruktor NewGRPCClient di aplikasi, bukan 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)
}

Library klien Go secara otomatis menggunakan konektivitas langsung saat mendeteksi bahwa aplikasi berjalan di Google Cloud.

Untuk mengetahui informasi tentang cara menggunakan klien gRPC, lihat gRPC API.

Mengonfigurasi Kontrol Layanan VPC

Jika Anda menggunakan Virtual Private Cloud dengan alamat IP virtual yang dibatasi (Kontrol Layanan VPC) untuk meningkatkan keamanan jaringan, Anda harus memperbarui aturan firewall untuk mengaktifkan konektivitas langsung agar performa antara instance Compute Engine dan bucket Cloud Storage Anda optimal.

Untuk melakukannya, tambahkan aturan firewall daftar yang diizinkan untuk mengizinkan traffic di semua port untuk blok CIDR berikut:

  • Untuk traffic IPv4: 34.126.0.0/18
  • Untuk traffic IPv6: 2001:4860:8040::/42

Selain aturan sebelumnya, pertahankan aturan daftar yang diizinkan yang ada untuk 199.36.153.4/30.

Jika Anda memiliki batasan pada modifikasi aturan firewall dan Anda tidak dapat memperbaruinya, Anda dapat memaksa traffic untuk menghindari konektivitas langsung dengan menggunakan storage.googleapis.com sebagai endpoint Cloud Storage, bukan google-c2p://storage.googleapis.com.

Misalnya, untuk penggunaan C++, gunakan .set<google::cloud::EndpointOption>(storage.googleapis.com), bukan google-c2p:///storage.googleapis.com.

Anda dapat mengonfigurasi library klien Cloud Storage untuk menghasilkan metrik terkait gRPC di Cloud Monitoring. Metrik terkait gRPC dapat membantu Anda melakukan hal berikut:

  • Pantau dan optimalkan performa permintaan gRPC ke Cloud Storage.

  • Memecahkan masalah dan melakukan debug.

  • Dapatkan insight tentang penggunaan dan perilaku aplikasi Anda.

Untuk mengetahui informasi tentang cara membuat metrik terkait gRPC, lihat Menggunakan metrik sisi klien.

Jika pengumpulan metrik tidak diperlukan untuk kasus penggunaan Anda, Anda dapat memilih untuk tidak ikut pengumpulan metrik. Untuk mengetahui petunjuknya, lihat Memilih tidak ikut serta dalam metrik sisi klien.

Batasan

  • Permintaan IPv6 tidak dapat dikirim melalui jaringan lama.

  • Konektivitas langsung tidak didukung saat menggunakan versi GKE berikut pada cluster khusus IPv4:

    • 1.28, 1.28.0-gke.100 atau yang lebih baru hingga 1.28.5-gke.1199000
    • 1.27, 1.27.4-gke.1900 atau yang lebih baru
    • 1.26, 1.26.10-gke.1238000 atau yang lebih baru
    • 1.25, 1.25.15-gke.1045000 atau yang lebih baru
  • gRPC tidak mendukung metode notifications, hmacKeys, dan serviceAccount.

  • Opsi konstruktor klien khusus HTTP, seperti WithHTTPClient, tidak didukung untuk library klien Go.

Langkah berikutnya