リモート・キャッシュの設定

このページではリモート・キャッシュの設定を説明する。キャッシュシステムの導入としてキャッシュ化をまず読んでみてほしい。

gRPC リモート・キャッシュ

将来的に別のリモートキャッシュストア実装が出てくる可能性はあるが、sbt 2.0 は Bazel リモートキャッシュバックエンドと互換性のある gRPC クライアントを採用している。sbt 2.x を設定するには、project/plugins.sbt に以下を追加する:

addRemoteCachePlugin

Bazel リモートキャッシュバックエンドにはオープンソースおよび商用の多くの実装がある。このページは全ての Bazel リモートキャッシュ実装を網羅する訳ではないが、多角的に様々な実装向けにセットアップする方法を示す。

認証

gRPC 認証にはいくつかの種類があり、Bazel リモートキャッシュバックエンドは様々な方式を使用する:

  1. 認証なし。テストに有用。
  2. デフォルト TLS/SSL。
  3. カスタムサーバー証明書付き TLS/SSL。
  4. カスタムサーバー・クライアント証明書付き TLS/SSL、mTLS。
  5. API トークンヘッダー付きデフォルト TLS/SSL。

認証なしの bazel-remote

buchgr/bazel-remote からコードを取得し、Bazel を使ってラップトップで実行できる:

bazel run :bazel-remote  -- --max_size 5 --dir $HOME/work/bazel-remote/temp \
  --http_address localhost:8000 \
  --grpc_address localhost:2024

sbt 2.x を設定するには、project/plugins.sbt に以下を追加する:

addRemoteCachePlugin

build.sbt に以下を追加する:

Global / remoteCache := Some(uri("grpc://localhost:2024"))

mTLS 付き bazel-remote

本番環境では、mTLS によりトランスポートの暗号化と相互認証を保証できる。bazel-remote は以下のように起動できる:

bazel run :bazel-remote  -- --max_size 5 --dir $HOME/work/bazel-remote/temp \
  --http_address localhost:8000 \
  --grpc_address localhost:2024 \
  --tls_ca_file /tmp/sslcert/ca.crt \
  --tls_cert_file /tmp/sslcert/server.crt \
  --tls_key_file /tmp/sslcert/server.pem

このシナリオでは sbt 2.x のセッティングは以下のようになる:

Global / remoteCache := Some(uri("grpcs://localhost:2024"))
Global / remoteCacheTlsCertificate := Some(file("/tmp/sslcert/ca.crt"))
Global / remoteCacheTlsClientCertificate := Some(file("/tmp/sslcert/client.crt"))
Global / remoteCacheTlsClientKey := Some(file("/tmp/sslcert/client.pem"))

grpc:// ではなく grpcs:// である点に注意。

EngFlow

EngFlow GmbH は Bazel チームのコアメンバーが 2020 年に設立したビルドソリューション企業で、Bazel 向けのビルド分析とリモート実行バックエンド(リモートキャッシュを含む)を提供する。

https://my.engflow.com/ でトライアルに登録すると、ページの指示に従って Docker で試用クラスターを起動する。指示に従っていれば、ポート 8080 でリモートキャッシュサービスが起動する。試用クラスター用の sbt 2.x の設定は以下のようになる:

Global / remoteCache := Some(uri("grpc://localhost:8080"))

BuildBuddy

BuildBuddy は元 Google エンジニアが設立したビルドソリューション企業で、Bazel 向けのビルド分析とリモート実行バックエンドを提供する。buildbuddy-io/buildbuddy としてオープンソースでも利用可能である。

登録後、BuildBuddy Personal プランでインターネット経由で BuildBuddy を利用できる。

  1. https://app.buildbuddy.io/ から Settings を開いて、Organization URL を <something>.buildbuddy.io に変更する。
  2. 次に Quickstart を開いて、URL と --remote_headers をメモする。
  3. $HOME/.sbt/buildbuddy_credential.txt というファイルを作成し、API キーを記述する:
x-buildbuddy-api-key=*******

sbt 2.x の設定は以下のようになる:

Global / remoteCache := Some(uri("grpcs://something.buildbuddy.io"))
Global / remoteCacheHeaders += IO.read(BuildPaths.defaultGlobalBase / "buildbuddy_credential.txt").trim

NativeLink は Rust で実装されたオープンソースの Bazel リモート実行バックエンドで、パフォーマンスを重視している。2024 年 6 月時点で NativeLink Cloud がベータ提供されている。

  1. https://app.nativelink.com/ から Quickstart を開いて、URL と --remote_header をメモする。
  2. $HOME/.sbt/nativelink_credential.txt というファイルを作成し、API キーを記述する:
x-nativelink-api-key=*******

sbt 2.x の設定は以下のようになる:

Global / remoteCache := Some(uri("grpcs://something.build-faster.nativelink.net"))
Global / remoteCacheHeaders += IO.read(BuildPaths.defaultGlobalBase / "nativelink_credential.txt").trim