gRPC は、Google が開発した高性能で汎用的なオープンソース RPC フレームワークです。プロトコル バッファを使用してサービスを定義できます。gRPC を使用して Cloud Storage を操作できます。gRPC は、Google Front Ends(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'
他の 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 で実行されていることを検出すると、自動的に直接接続を使用します。
Go
始める前に
Cloud Storage Go クライアント ライブラリのバージョン 1.46.0 以降を使用していることを確認します。
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)
を使用します。
gRPC 関連リクエストのオブザーバビリティを有効にする
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 は、通知、hmacKeys、serviceAccount メソッドをサポートしていません。
WithHTTPClient などの HTTP 固有のクライアント コンストラクタ オプションは、Go クライアント ライブラリではサポートされていません。