import java.net.InetSocketAddress;
import java.net.Proxy;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.cloud.http.HttpTransportOptions;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;

var proxy = new Proxy(Proxy.Type.HTTP,
    new InetSocketAddress("proxy.example", 8080));
var httpOptions = HttpTransportOptions.newBuilder()
    .setHttpTransportFactory(() ->
        new NetHttpTransport.Builder().setProxy(proxy).build())
    .build();

BigQuery bigQuery = BigQueryOptions.newBuilder()
    .setProjectId(projectId)
    .setCredentials(credentials)
    .setTransportOptions(httpOptions)
    .build()
    .getService();

REST 操作にはこの bigQuery を使用します。projectId と credentials はアプリケーションの既存の構成から取得します。

ファクトリは、中間サーバーを経由して BigQuery API に到達する HTTP トランスポートを作成します。API のエンドポイントはあくまで宛先であり、プロキシのアドレスに置き換えると別のサービスを要求することになります。BigQuery への許可されたパブリックプロキシ経路には、HTTP プロキシ一覧が InetSocketAddress フィールドの候補を提供します。

認証情報の取得や更新には独自の HTTP トランスポートが使われることがあるため、その要求にプロキシが必要な場合はこの対応済みの入力を設定してください。これらの REST オプションは独立した gRPC チャネルも設定しません。

システム検出では、java.net.useSystemProxies の動作はプラットフォーム固有であり、Docker の HTTP_PROXY の値がこのクライアントの経路になることは保証されません。上記の明示的なファクトリにより、選択した REST トランスポートは構築時点で可視になります。

関連記事