gRPC を使用して Cloud Storage に接続する

gRPC は、Google が開発した高性能で汎用的なオープンソース RPC フレームワークです。プロトコル バッファを使用してサービスを定義できます。gRPC を使用して Cloud Storage を操作できます。gRPC は、Google Front Ends(GFE)をバイパスして、Compute Engine と Cloud Storage バケット間の直接接続を利用します。

gRPC を使用して Cloud Storage に直接接続することはできませんが、次のサポートされているクライアントを介して gRPC を使用して Cloud Storage に接続できます。

クライアント ライブラリで gRPC を有効にする

C++

始める前に

  1. 次のバージョンがインストールされていることを確認します。

    • gRPC バージョン 1.65.1 以降。
    • C++ クライアント ライブラリのバージョン v2.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. gRPC を使用するように C++ クライアント ライブラリを構成するには、Cloud Storage gRPC クライアントを有効にして、CMakeBazel のビルドシステム構成を更新します。

    CMake

    1. コンパイル時に Cloud Storage gRPC クライアント プラグインを有効にする

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. コードベースで、target_link_libraries() コマンドの google-cloud-cpp::storagegoogle-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'

他の Google Cloud ライブラリを使用した Cloud Storage

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 クライアントを作成する

クライアントを使用するには、NewClient ではなく、アプリケーションで NewGRPCClient コンストラクタを呼び出す必要があります。

import (
  "context"
  "fmt"
  "log"
  "time"
  "cloud.google.com/go/storage"
  )
  func main() {
      ctx := context.Background()
      // The project ID and bucket name
      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)を使用して Virtual Private Cloud を使用してネットワークのセキュリティを強化している場合は、ファイアウォール ルールを更新して直接接続を有効にし、Compute Engine 仮想マシン インスタンスと Cloud Storage 間のパフォーマンスを最適化する必要があります。

これを行うには、許可リストのファイアウォール ルールを追加して、次の CIDR ブロックのすべてのポートでトラフィックを許可します。

  • IPv4 トラフィックの場合: 34.126.0.0/18
  • IPv6 トラフィックの場合: 2001:4860:8040::/42

上記のルールに加えて、199.36.153.4/30 の既存の許可リスト ルールを保持します。

ファイアウォール ルールの変更に制限があり、更新できない場合は、google-c2p://storage.googleapis.com ではなく storage.googleapis.com を Cloud Storage エンドポイントとして使用することで、トラフィックが直接接続しないように強制的にできます。

たとえば、C++ では google-c2p:///storage.googleapis.com ではなく .set<google::cloud::EndpointOption>(storage.googleapis.com) を使用します。

Cloud Storage クライアント ライブラリを構成して、Cloud Monitoring で gRPC 関連の指標を生成できます。gRPC 関連の指標は、次の処理に役立ちます。

  • Cloud Storage への gRPC リクエストのパフォーマンスをモニタリングして最適化する。

  • 問題のトラブルシューティングとデバッグを行う。

  • アプリの使用状況と動作に関する分析情報を取得します。

gRPC 関連の指標を生成する方法については、クライアントサイドの指標を使用するをご覧ください。

ユースケースで指標の収集が不要な場合は、指標の収集をオプトアウトできます。手順については、クライアントサイドの指標をオプトアウトするをご覧ください。

制限事項

  • IPv6 リクエストは、レガシー ネットワーク経由で送信できません。

  • gRPC を使用して Cloud Storage に接続すると、コンピューティング VM と Cloud Storage バケットが同じリージョンにある場合にのみ、Google Cloud で実行される分析ワークロードの読み取りパフォーマンスが向上することが期待されます。マルチリージョンとデュアルリージョンのバケットに gRPC を使用することはおすすめしません。

  • IPv4 専用クラスタで次の GKE バージョンを使用する場合、直接接続はサポートされません。

    • 1.28、1.28.0-gke.100 以降(1.28.5-gke.1199000 まで)
    • 1.27、1.27.4-gke.1900 以降
    • 1.26、1.26.10-gke.1238000 以降
    • 1.25、1.25.15-gke.1045000 以降
  • gRPC は、通知hmacKeysserviceAccount メソッドをサポートしていません。

  • WithHTTPClient などの HTTP 固有のクライアント コンストラクタ オプションは、Go クライアント ライブラリではサポートされていません。

次のステップ