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

適用対象: SQL API

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

注意

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

Azure portal

Azure portal から複数リージョン書き込みを有効にするには、次の手順を使用します。

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

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

  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 を、アプリケーションがデプロイされ、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 は 1 つの要素を含む List です。つまり、アプリケーションがデプロイされ、Cosmos DB がレプリケートされているリージョンです。

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 を、アプリケーションがデプロイされ、Cosmos DB がレプリケートされているリージョンに設定します。

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 は、アプリケーションがデプロイされ、Cosmos DB がレプリケートされているリージョンに設定します。

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 は、アプリケーションがデプロイされ、Cosmos DB がレプリケートされているリージョンに設定します。

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)

次のステップ

次の記事を参照してください。