Azure Cosmos DB を使用するアプリケーションで複数リージョン書き込みを構成する
適用対象: NoSQL
複数の書き込みリージョンのシナリオでは、アプリケーション インスタンスに近いリージョンにのみ書き込むことで、パフォーマンス上の利点を得ることができます。 Azure Cosmos DB では、バックグラウンドでレプリケーションを処理します。
アカウントで複数の書き込みリージョンを有効にした後、アプリケーションの ConnectionPolicy
に 2 つの変更を加える必要があります。 ConnectionPolicy
の中で UseMultipleWriteLocations
を true
に設定し、アプリケーションのデプロイ先となるリージョンの名前を ApplicationRegion
に渡します。 このアクションにより、渡された場所との地理的な近接性に基づいて PreferredLocations
プロパティが設定されます。 後で新しいリージョンがアカウントに追加された場合でも、アプリケーションの更新や再デプロイを行う必要はありません。 近接するリージョンが自動的に検出され、リージョンのイベントが発生した場合は自動ホーミングが実行されます。
注意
初期構成が単一書き込みリージョンである Azure Cosmos DB アカウントを、ダウンタイムなしで複数書き込みリージョンに構成できます。 詳細については、複数の書き込みリージョンの構成に関する記事を参照してください。
Azure portal
マルチリージョン書き込みを使用するには、Azure portal を使用して、複数のリージョンに対して Azure Cosmos DB アカウントを有効にします。 アプリケーションが書き込むことができるリージョンを指定します。
マルチリージョン書き込みを有効にするには、次の手順に従います。
Azure ポータルにサインインします。
Azure Cosmos DB アカウントに移動して、メニューから [データをグローバルにレプリケートする] ペインを開きます。
複数リージョン書き込みのオプションで、 [有効] を選択します。 読み取りと書き込みリージョンに、既存のリージョンが自動的に追加されます。
リージョンをさらに追加するには、マップ上のアイコンを選択するか、[リージョンの追加] ボタンを選択します。 追加するすべてのリージョンで、読み取りと書き込みの両方が有効になります。
リージョンの一覧を更新したら、[保存] を選択して変更を適用します。
.NET SDK v2
アプリケーションで複数リージョン書き込みを有効にするには、UseMultipleWriteLocations
を true
に設定します。 また、SetCurrentLocation
は、アプリケーションがデプロイされ、Azure Cosmos DB がレプリケートされているリージョンに設定します。
ConnectionPolicy policy = new ConnectionPolicy
{
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp,
UseMultipleWriteLocations = true
};
policy.SetCurrentLocation("West US 2");
.NET SDK v3
アプリケーションで複数リージョン書き込みを有効にするには、ApplicationRegion
を、アプリケーションがデプロイされ、Azure Cosmos DB がレプリケートされているリージョンに設定します。
CosmosClient cosmosClient = new CosmosClient(
"<connection-string-from-portal>",
new CosmosClientOptions()
{
ApplicationRegion = Regions.WestUS2,
});
必要な場合は、CosmosClientBuilder
と WithApplicationRegion
を使用して同じ結果を得ることもできます。
CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder("<connection-string-from-portal>")
.WithApplicationRegion(Regions.WestUS2);
CosmosClient client = cosmosClientBuilder.Build();
Java V4 SDK
アプリケーションで複数リージョンの書き込みを有効にするには、クライアント ビルダーで .multipleWriteRegionsEnabled(true)
と .preferredRegions(preferredRegions)
を呼び出します。ここで、preferredRegions
は、データが優先度順にレプリケートされるリージョンの List
です。最も短い距離/最も短い待機時間のリージョンを最初に指定することが理想的です。
Java SDK V4 (Maven com.azure::azure-cosmos) 非同期 API:
ArrayList<String> preferredRegions = new ArrayList<String>();
preferredRegions.add(region);
CosmosAsyncClient client =
new CosmosClientBuilder()
.endpoint(HOST)
.key(MASTER_KEY)
.multipleWriteRegionsEnabled(true)
.preferredRegions(preferredRegions)
.buildAsyncClient();
Async Java V2 SDK
Java V2 SDK では Maven com.microsoft.azure::azure-cosmosdb が使用されていました。 アプリケーションで複数リージョンの書き込みを有効にするには、policy.setUsingMultipleWriteLocations(true)
を設定し、policy.setPreferredLocations
をデータが優先度順にレプリケートされるリージョンの List
に設定します。最も短い距離/最も短い待機時間のリージョンを最初に指定することが理想的です。
ConnectionPolicy policy = new ConnectionPolicy();
policy.setUsingMultipleWriteLocations(true);
policy.setPreferredLocations(Collections.singletonList(region));
AsyncDocumentClient client =
new AsyncDocumentClient.Builder()
.withMasterKeyOrResourceToken(this.accountKey)
.withServiceEndpoint(this.accountEndpoint)
.withConsistencyLevel(ConsistencyLevel.Eventual)
.withConnectionPolicy(policy).build();
Node.js、JavaScript、および TypeScript SDK
アプリケーションで複数リージョン書き込みを有効にするには、connectionPolicy.UseMultipleWriteLocations
を true
に設定します。 さらに、connectionPolicy.PreferredLocations
をデータが優先度順にレプリケートされるリージョンに設定します。最も短い距離/最も短い待機時間のリージョンを最初に指定することが理想的です。
const connectionPolicy: ConnectionPolicy = new ConnectionPolicy();
connectionPolicy.UseMultipleWriteLocations = true;
connectionPolicy.PreferredLocations = [region];
const client = new CosmosClient({
endpoint: config.endpoint,
auth: { masterKey: config.key },
connectionPolicy,
consistencyLevel: ConsistencyLevel.Eventual
});
Python SDK
アプリケーションで複数リージョン書き込みを有効にするには、connection_policy.UseMultipleWriteLocations
を true
に設定します。 さらに、connection_policy.PreferredLocations
をデータが優先度順にレプリケートされるリージョンに設定します。最も短い距離/最も短い待機時間のリージョンを最初に指定することが理想的です。
connection_policy = documents.ConnectionPolicy()
connection_policy.UseMultipleWriteLocations = True
connection_policy.PreferredLocations = [region]
client = cosmos_client.CosmosClient(self.account_endpoint, {
'masterKey': self.account_key}, connection_policy, documents.ConsistencyLevel.Session)