使用 gRPC 連線至 Cloud Storage

gRPC 是由 Google 開發的高效能開放原始碼通用 RPC 架構,可讓您使用 Protocol Buffers 定義服務。您可以使用 gRPC 與 Cloud Storage 互動。gRPC 會利用 Compute Engine 執行個體與 Cloud Storage 值區之間的直接連線,略過 Google 前端 (GFE)。

您可以透過下列支援的用戶端,使用 gRPC 連線至 Cloud Storage:

在用戶端程式庫中啟用 gRPC

C++

事前準備

  1. 請確認已安裝下列版本:

    • gRPC 1.65.1 以上版本

    • C++ 用戶端程式庫第 2.30.0 版以上

    • C++ 14 以上版本

    如需安裝操作說明,請參閱「設定 C++ 開發環境」。

  2. 設定驗證方法

設定 C++ 用戶端程式庫

  1. 使用 gcs::MakeGrpcClient() 建立 gRPC 用戶端:

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

    當 C++ 用戶端程式庫偵測到應用程式在 Google Cloud上執行時,會自動使用直接連線

  2. 如要設定 C++ 用戶端程式庫以使用 gRPC,請啟用 Cloud Storage gRPC 用戶端,以便更新 CMake 或 Bazel 的建構系統設定。

    CMake

    1. 在編譯時啟用 Cloud Storage gRPC 用戶端外掛程式。

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. 在程式碼集中,將 target_link_libraries() 指令中的 google-cloud-cpp::storage 替換為 google-cloud-cpp::storage_grpc

      舉例來說,gRPC 的快速入門程式會使用以下程式碼:

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

    Bazel

    將依附元件從 @google_cloud_cpp//:storage 替換為 @google_cloud_cpp//:storage_grpc

    舉例來說,gRPC 的快速入門程式會使用以下程式碼:

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

Java

事前準備

  1. 請確認已安裝下列版本:

    • Java 用戶端程式庫:

      • com.google.cloud:google-cloud-storage:2.43.1 以上版本。
      • com.google.cloud:libraries-bom:26.48 以上版本。
    • Java 8 以上版本

    如需安裝說明,請參閱「設定 Java 開發環境」。

  2. 設定驗證方法

更新專案以使用 BOM

為確保專案具有相容的 Google Cloud 用戶端程式庫版本,請使用 Google Cloud 程式庫物料清單 (BOM) 中指定的版本。如要更新專案以使用 BOM,請使用下列任一方法:

獨立 Cloud Storage

如果您獨立使用 Cloud Storage 用戶端程式庫 (不使用其他Google Cloud 程式庫),請使用 Cloud Storage 用戶端程式庫專屬的 BOM。

Maven

pom.xml 檔案的 dependencyManagement 部分匯入 BOM。

以下範例說明如何匯入 BOM 並納入 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

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 與其他 Google Cloud 程式庫搭配使用

如果您同時使用 Cloud Storage 用戶端程式庫和其他 Google Cloud 程式庫,請使用 Google Cloud 用戶端程式庫 BOM。

Maven

pom.xml 檔案的 dependencyManagement 部分匯入 BOM。

以下範例說明如何匯入 BOM 並納入 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

com.google.cloud:libraries-bom 上新增平台依附元件:

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

建立 gRPC 用戶端

以下範例使用以 gRPC 為中心的建構工具。當 gRPC Java 用戶端偵測到應用程式在 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

事前準備

  1. 設定開發環境

  2. 請務必使用 Cloud Storage Go 用戶端程式庫 1.46.0 以上版本。

  3. 設定驗證方法

建立 gRPC 用戶端

如要使用用戶端,您需要在應用程式中呼叫 NewGRPCClient 建構函式,而非 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)
}

當 Go 用戶端程式庫偵測到應用程式在 Google Cloud上執行時,就會自動使用直接連線。

如要瞭解如何使用 gRPC 用戶端,請參閱 gRPC API

設定 VPC Service Controls

如果您使用虛擬私有雲搭配受限制的虛擬 IP 位址 (VPC Service Controls),以提升網路安全性,則必須更新防火牆規則,啟用直接連線,以便在 Compute Engine 執行個體和 Cloud Storage 值區之間取得最佳效能。

如要這麼做,請新增許可清單防火牆規則,允許下列 CIDR 區塊的所有通訊埠上的流量:

  • IPv4 流量:34.126.0.0/18
  • IPv6 流量:2001:4860:8040::/42

除了上述規則外,請保留 199.36.153.4/30 的現有許可清單規則。

如果您無法修改防火牆規則,則可以使用 storage.googleapis.com 做為 Cloud Storage 端點,而非 google-c2p://storage.googleapis.com,強制流量避免直接連線。

例如,如果使用 C++,請使用 .set<google::cloud::EndpointOption>(storage.googleapis.com),而非 google-c2p:///storage.googleapis.com

您可以設定 Cloud Storage 用戶端程式庫,在 Cloud Monitoring 中產生 gRPC 相關指標。gRPC 相關指標可協助您執行下列操作:

  • 監控並最佳化 Cloud Storage 的 gRPC 要求效能。

  • 排解問題並進行偵錯。

  • 深入瞭解應用程式的使用情形和行為。

如要瞭解如何產生 gRPC 相關指標,請參閱「使用用戶端指標」。

如果您的用途不需要收集指標,可以選擇不收集指標。如需操作說明,請參閱「停用用戶端指標」。

限制

排解直接連線可用性問題

如要判斷是否可使用直接連線方式連線至 Cloud Storage 值區,請使用 Google Cloud CLI 執行 gcloud alpha storage diagnose

    gcloud alpha storage diagnose --test-type=DIRECT_CONNECTIVITY gs://BUCKET_NAME
  

更改下列內容:

  • BUCKET_NAME:值區名稱。

後續步驟