Azure Cosmos DB を使用するアプリケーションで複数リージョン書き込みを構成する

適用対象: NoSQL

複数の書き込みリージョンのシナリオでは、アプリケーション インスタンスに近いリージョンにのみ書き込むことで、パフォーマンス上の利点を得ることができます。 Azure Cosmos DB では、バックグラウンドでレプリケーションを処理します。

アカウントで複数の書き込みリージョンを有効にした後、アプリケーションの ConnectionPolicy に 2 つの変更を加える必要があります。 ConnectionPolicy の中で UseMultipleWriteLocationstrue に設定し、アプリケーションのデプロイ先となるリージョンの名前を ApplicationRegion に渡します。 このアクションにより、渡された場所との地理的な近接性に基づいて PreferredLocations プロパティが設定されます。 後で新しいリージョンがアカウントに追加された場合でも、アプリケーションの更新や再デプロイを行う必要はありません。 近接するリージョンが自動的に検出され、リージョンのイベントが発生した場合は自動ホーミングが実行されます。

注意

初期構成が単一書き込みリージョンである Azure Cosmos DB アカウントを、ダウンタイムなしで複数書き込みリージョンに構成できます。 詳細については、複数の書き込みリージョンの構成に関する記事を参照してください。

Azure portal

マルチリージョン書き込みを使用するには、Azure portal を使用して、複数のリージョンに対して Azure Cosmos DB アカウントを有効にします。 アプリケーションが書き込むことができるリージョンを指定します。

マルチリージョン書き込みを有効にするには、次の手順に従います。

  1. Azure ポータルにサインインします。

  2. Azure Cosmos DB アカウントに移動して、メニューから [データをグローバルにレプリケートする] ペインを開きます。

  3. 複数リージョン書き込みのオプションで、 [有効] を選択します。 読み取りと書き込みリージョンに、既存のリージョンが自動的に追加されます。

  4. リージョンをさらに追加するには、マップ上のアイコンを選択するか、[リージョンの追加] ボタンを選択します。 追加するすべてのリージョンで、読み取りと書き込みの両方が有効になります。

  5. リージョンの一覧を更新したら、[保存] を選択して変更を適用します。

    Azure portal を使用した複数リージョン書き込みを有効にするスクリーンショット。

.NET SDK v2

アプリケーションで複数リージョン書き込みを有効にするには、UseMultipleWriteLocationstrue に設定します。 また、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,
    });

必要な場合は、CosmosClientBuilderWithApplicationRegion を使用して同じ結果を得ることもできます。

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.UseMultipleWriteLocationstrue に設定します。 さらに、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.UseMultipleWriteLocationstrue に設定します。 さらに、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)

次のステップ