gRPC は、Google が開発した高パフォーマンスのオープンソース ユニバーサル RPC フレームワークです。gRPC を使用すると、プロトコル バッファを使ってサービスを定義できます。また、gRPC で Cloud Storage を操作することも可能です。gRPC は Google Front End(GFE)をバイパスして、Compute Engine と Cloud Storage バケット間の直接接続を使用します。
gRPC を使用して Cloud Storage に直接接続することはできませんが、次のサポート対象のクライアント経由であれば、gRPC で Cloud Storage に接続できます。
- Dataproc の Cloud Storage コネクタ。
- 読み取りおよび書き込みリクエスト用の Dataflow の Apache Beam I/O コネクタ。
- Cloud Storage C++、Go、および Java クライアント ライブラリ。これらのクライアント ライブラリで gRPC を有効にする手順については、クライアント ライブラリで gRPC を有効にするをご覧ください。
クライアント ライブラリで gRPC を有効にする
C++
始める前に
次のバージョンがインストールされていることを確認します。
- gRPC バージョン 1.65.1 以降。
- C++ クライアント ライブラリ バージョン v2.30.0 以降。
- C++ バージョン 14 以降。
インストール手順については、C++ 開発環境の設定をご覧ください。
C++ クライアント ライブラリを構成する
gcs::MakeGrpcClient()
を使用して gRPC クライアントを作成します。namespace gcs = google::cloud::storage; void App() { auto client = gcs::MakeGrpcClient(); // application code }
C++ クライアント ライブラリは、アプリケーションが Google Cloud で実行されていることを検出すると、自動的に直接接続を使用します。
gRPC を使用するように C++ クライアント ライブラリを構成するには、Cloud Storage gRPC クライアントを有効にして、
CMake
とBazel
のビルドシステム構成を更新します。CMake
コンパイル時に Cloud Storage gRPC クライアント プラグインを有効にします。
cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
コードベースで、
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
始める前に
次のバージョンがインストールされていることを確認します。
Java クライアント ライブラリ:
com.google.cloud:google-cloud-storage:2.43.1
以降com.google.cloud:libraries-bom:26.48
以降
Java 8 以降
インストール手順については、Java 開発環境の設定をご覧ください。
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 で実行されていることを検出すると、自動的に直接接続を使用します。
Go
始める前に
開発環境を設定します。
Cloud Storage Go クライアント ライブラリのバージョン 1.44 以降を使用していることを確認します。
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 アドレスを制限した Virtual Private Cloud(VPC Service Controls)を使用してネットワークのセキュリティを強化している場合は、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)
を使用します。
gRPC 関連のリクエストのオブザーバビリティを有効にする
Cloud Monitoring で gRPC 関連の指標を生成するように Cloud Storage クライアント ライブラリを構成できます。gRPC 関連の指標は、次の目的に役立ちます。
Cloud Storage に対する gRPC リクエストのパフォーマンスをモニタリングして最適化する。
問題のトラブルシューティングとデバッグを行う。
アプリの使用状況と動作に関する分析情報を取得する。
gRPC 関連の指標を生成する方法については、クライアントサイドの指標を使用するをご覧ください。
ユースケースで指標を収集する必要がない場合は、指標の収集をオプトアウトできます。手順については、クライアントサイドの指標をオプトアウトするをご覧ください。
制限事項
IPv6 リクエストをレガシー ネットワーク経由で送信することはできません。
gRPC を使って Cloud Storage に接続すると、Google Cloud で実行される分析ワークロードの読み取りパフォーマンスの向上が期待されるのは、コンピューティング VM と Cloud Storage バケットが同じリージョンにある場合のみです。マルチリージョンとデュアルリージョン内のバケットに 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 では、通知、hmacKeys、serviceAccount メソッドはサポートされません。
WithHTTPClient などの HTTP 固有のクライアント コンストラクタ オプションは、Go クライアント ライブラリではサポートされません。