The request failed because the client was unable to establish connections to * endpoints across * regions.
背景:
Cosmos データ移行ツールもしくはSDKを使って大量なデータを処理する際に起きたエラーです。
KeyWord
Azure Cosmos DB
原因:
CPU使用率が高い(CPU 測定値が 70% を超える場合、CPU の枯渇によりタイムアウト発生する可能性がございます。) docs.microsoft.com
直接接続モードに必要なポートがファイアウォールによってブロックされている docs.microsoft.com
- パブリック/サービス エンドポイントを使用する場合: 10000 から 20000 の範囲のポート
- プライベート エンドポイントを使用する場合: 0 から 65535 の範囲のポート
原因 1 の場合、ツール、SDK がインストールされている VM をスケールアップ、もしくはクエリで入力データのサイズを減らすことで解決できます。
原因 2 の場合、必要なポートを開くか、ゲートウェイ モード接続を使用することで解決できます。
// Create a new instance of the Cosmos Client in Gateway mode this.cosmosClient = new CosmosClient(EndpointUri, PrimaryKey, new CosmosClientOptions() { ConnectionMode = ConnectionMode.Gateway });
注:直接接続モードを使用する場合、TCP プロトコルを介した接続がサポートされ、ネットワーク ホップ数が減るため、ゲートウェイ モード接続よりパフォーマンスが良いので、ご注意ください。