次の方法で共有


フォロワー データベースを使用する

フォロワー データベース機能により、別のクラスターにあるデータベースを Azure Data Explorer クラスターにアタッチできます。 フォロワー データベースは "読み取り専用" モードでアタッチされるため、データを表示したり、リーダー データベースに取り込まれたデータに対してクエリを実行したりできます。 フォロワー データベースには、リーダー データベースの変更が同期されます。 この同期により、データが利用可能になるまでに数秒から数分のデータ遅延が発生します。 遅延の長さは、リーダー データベースのメタデータ全体のサイズに応じて異なります。 リーダー データベースとフォロワー データベースでは、データをフェッチするために同じストレージ アカウントが使用されます。 リーダー データベースはストレージを所有します。 フォロワー データベースでは、データを取り込むことなくデータを表示できます。 アタッチされたデータベースは読み取り専用のデータベースであるため、データベース内のデータ、テーブル、およびポリシーの変更はできませんが、キャッシュ ポリシープリンシパル、およびアクセス許可の変更は可能です。 アタッチされたデータベースは削除できません。 リーダーまたはフォロワーは、削除前にデータベースをデタッチする必要があります。

フォロワー機能を使った別のクラスターへのデータベースのアタッチは、組織とチームの間でデータを共有するためのインフラストラクチャとして使用されます。 この機能は、非運用環境のユース ケースから運用環境を保護するためにコンピューティング リソースを分離するのに役立ちます。 また、フォロワーを使うことで、Azure Data Explorer クラスターのコストを、そのデータに対してクエリを実行するパーティーに関連付けることができます。

以前の SDK バージョンに基づくサンプル コードについては、アーカイブ記事を参照してください。

フォロー対象データベース

クラスターには次の内容が適用されます。

  • クラスターでは、1 つのデータベース、複数のデータベース、またはリーダー クラスターのすべてのデータベースをフォローできます。
  • 単一のクラスターでは、複数のリーダー クラスターのデータベースをフォローできます。
  • クラスターには、フォロワー データベースとリーダー データベースの両方を含めることができます。

前提条件

データベースのアタッチ

データベースのアタッチにはさまざまな方法があります。 この記事では、C#、Python、PowerShell、または Azure Resource Manager テンプレートを使用してデータベースをアタッチする方法について説明します。 データベースをアタッチするには、リーダー クラスターとフォロワー クラスターに対して少なくとも共同作成者ロールを持つユーザー、グループ、サービス プリンシパル、またはマネージド ID が必要です。 Azure portalPowerShellAzure CLIARM テンプレートを使用して、ロールの割り当てを追加または削除します。 詳細については、Azure のロールベースのアクセス制御 (Azure RBAC) および各種ロールに関する記事をご覧ください。

フォロワー データベースは、添付ファイルの処理中に作成されるため、事前に作成しておく必要はありません。

テーブル レベルの共有

データベースをアタッチすると、すべてのテーブル、外部テーブル、マテリアライズド ビューもフォローされます。 'TableLevelSharingProperties' を構成することで、特定のテーブル、外部テーブル、具体化されたビューを共有できます。

'TableLevelSharingProperties' には、tablesToIncludetablesToExcludeexternalTablesToIncludeexternalTablesToExcludematerializedViewsToIncludematerializedViewsToExcludefunctionsToIncludefunctionsToExclude の 8 つの文字列の配列が含まれます。 すべての配列の最大エントリ数は合計で 100 です。

  • すべてのデータベース表記で '*' を使用する場合、テーブル レベルの共有はサポートされません。
  • 具体化されたビューを含める場合は、それらのソース テーブルも含まれます。

次の例には、すべてのテーブルが含まれています。 既定では、すべてのテーブルは '*' 表記を使用せずにフォローされます。

tablesToInclude = []

次の例には、すべての関数が含まれています。 既定では、すべての関数は '*' 表記を使用せずにフォローされます。

functionsToInclude = []

次の例には、"Logs" で始まる名前を持つすべてのテーブルが含まれています。

tablesToInclude = ["Logs*"]

次の例には、すべての外部テーブルが含まれています。

externalTablesToExclude = ["*"]

次の例には、具体化されたすべてのビューが含まれています。

materializedViewsToExclude=["*"]

データベース名のオーバーライド

必要に応じて、フォロワー クラスターのデータベース名をリーダー クラスターとは異なる名前にすることができます。 たとえば、複数のリーダー クラスターからフォロワー クラスターに同じデータベース名をアタッチしたい場合などです。 別のデータベース名を指定するには、'DatabaseNameOverride' プロパティまたは 'DatabaseNamePrefix' プロパティを構成します。

C# を使用したデータベースのアタッチ

必要な NuGet パッケージ

C# の例

var followerClusterId = KustoClusterResource.CreateResourceIdentifier(subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "followerResourceGroup", clusterName: "follower");
var leaderClusterId = KustoClusterResource.CreateResourceIdentifier(subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "leaderResourceGroup", clusterName: "leader");
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration";

var credentials = new ManagedIdentityCredential();
var resourceManagementClient = new ArmClient(credentials);
var followerCluster = resourceManagementClient.GetKustoClusterResource(followerClusterId);
var attachedDatabaseConfigurations = followerCluster.GetKustoAttachedDatabaseConfigurations();
var attachedDatabaseConfigurationData = new KustoAttachedDatabaseConfigurationData
{
    ClusterResourceId = leaderClusterId,
    DatabaseName = "<databaseName>", // Can be a specific database name in a leader cluster or * for all databases
    DefaultPrincipalsModificationKind = KustoDatabaseDefaultPrincipalsModificationKind.Union,
    Location = AzureLocation.NorthCentralUS
};

// Table level sharing properties are not supported when using '*' all databases notation.
if (attachedDatabaseConfigurationData.DatabaseName != "*")
{
    // Set up the table level sharing properties - the following is just an example.
    attachedDatabaseConfigurationData.TableLevelSharingProperties = new KustoDatabaseTableLevelSharingProperties();
    attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToInclude.Add("table1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToExclude.Add("table2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToExclude.Add("exTable1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToInclude.Add("exTable2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToInclude.Add("matTable1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToExclude.Add("matTable2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToInclude.Add("func1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToExclude.Add("func2");
}

await attachedDatabaseConfigurations.CreateOrUpdateAsync(WaitUntil.Completed, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData);

データベースが正常にアタッチされたことを確認する

データベースが正常にアタッチされたことを確認するには、Azure portal でアタッチされたデータベースを見つけます。 フォロワーまたはリーダー のクラスターでデータベースが正常にアタッチされたことを確認できます。

フォロワー クラスターを確認する

  1. フォロワー クラスターを参照し、[データベース] を選択します。

  2. データベースの一覧で、新しい読み取り専用データベースを検索します。

    ポータルの読み取り専用フォロワー データベースのスクリーンショット。

    データベースの概要ページで、この一覧を表示することもできます。

    フォロワー クラスターの一覧を含むデータベースの概要ページのスクリーンショット。

リーダー クラスターを確認する

  1. リーダー クラスターを参照し、[データベース] を選択します。

  2. 関連するデータベースの [他のユーザーと共有]> が [はい] に設定されていることを確認します。

  3. リレーションシップ リンクを切り替えて、詳細を表示します。

    リーダー クラスターを確認するために他のユーザーと共有されているデータベースのスクリーンショット。

    これは、データベースの概要ページでも確認できます。

    他のユーザーと共有されているデータベースの一覧を含む概要のスクリーンショット。

フォロワー データベースをデタッチする

フォロワー側またはリーダー側からデータベースをデタッチするには、データベースをデタッチするクラスターで、少なくとも共同作成者ロールを持つユーザー、グループ、サービス プリンシパル、またはマネージド ID が必要です。 下の例では、サービス プリンシパルを使用します。

C#** を使用して、フォロワー クラスターにアタッチされたフォロワー データベースをデタッチする

フォロワー クラスターにアタッチされたフォロワー データベースは、次の方法でデタッチできます。

var attachedDatabaseConfigurationId = KustoAttachedDatabaseConfigurationResource.CreateResourceIdentifier(
    subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "testrg", clusterName: "follower",
    attachedDatabaseConfigurationName: "attachedDatabaseConfiguration");
var credentials = new ManagedIdentityCredential();
var resourceManagementClient = new ArmClient(credentials);
var attachedDatabaseConfiguration = resourceManagementClient.GetKustoAttachedDatabaseConfigurationResource(attachedDatabaseConfigurationId);
await attachedDatabaseConfiguration.DeleteAsync(WaitUntil.Completed);

C# を使用して、リーダー クラスターにアタッチされたフォロワー データベースをデタッチする

リーダー クラスターにアタッチされたデータベースは、次の方法でデタッチできます。

var leaderClusterId = KustoClusterResource.CreateResourceIdentifier(subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "testrg", clusterName: "leader");
var followerClusterId = KustoClusterResource.CreateResourceIdentifier(subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "followerResourceGroup", clusterName: "follower");
var followerDatabaseDefinition = new KustoFollowerDatabaseDefinition(
    clusterResourceId: followerClusterId,
    attachedDatabaseConfigurationName: "attachedDatabaseConfiguration"
);
var credentials = new ManagedIdentityCredential();
var resourceManagementClient = new ArmClient(credentials);
var leaderCluster = resourceManagementClient.GetKustoClusterResource(leaderClusterId);
await leaderCluster.DetachFollowerDatabasesAsync(WaitUntil.Completed, followerDatabaseDefinition);

プリンシパル、アクセス許可、キャッシュ ポリシーの管理

プリンシパルの管理

データベースをアタッチするときは、"既定のプリンシパル変更の種類" を指定します。 既定では、オーバーライドの承認されたプリンシパルと、承認されたプリンシパルのリーダー データベース コレクションを組み合わせます。

親切 説明
Union (結合) アタッチされたデータベース プリンシパルには、元のデータベース プリンシパルと、フォロワー データベースに追加されたその他の新しいプリンシパルが常に含まれます。
取り替える 元のデータベースから継承されるプリンシパルはありません。 アタッチされたデータベース用に新しいプリンシパルを作成する必要があります。
なし アタッチされたデータベース プリンシパルには、元のデータベースのプリンシパルのみが含まれます。その他のプリンシパルはありません。

管理コマンドを使用して承認されたプリンシパルを構成する方法について詳しくは、「フォロワー クラスターを管理するための管理コマンド」をご覧ください。

アクセス許可の管理

読み取り専用データベースのアクセス許可は、他のデータベースの種類と同じ方法で管理できます。 アクセス許可を割り当てるには、「Azure portal でのデータベースの管理アクセス許可」を参照するか、管理コマンドを使用してデータベース セキュリティ ロールを 管理します

キャッシュ ポリシーの構成

フォロワー データベースの管理者は、ホスティング クラスター上でアタッチされたデータベースまたはその任意のテーブルのキャッシュ ポリシー を変更できます。 既定では、リーダー クラスター データベースのソース データベースとテーブルレベルのキャッシュ ポリシーは、データベースで定義されているポリシーとテーブルレベルのオーバーライド ポリシーと組み合わされます。 たとえば、リーダー データベースでは月次レポートを実行するために 30 日間のキャッシュ ポリシーを設定し、フォロワー データベースでは、トラブルシューティング用に最新のデータのみのクエリを実行するため、3 日間のキャッシュ ポリシーを設定することができます。 管理コマンドを使用してフォロワー データベースやテーブルのキャッシュ ポリシーを構成する方法について詳しくは、「フォロワー クラスターを管理するための管理コマンド」をご覧ください。

メモ

次の注意事項を確認します。

  • リーダー/フォロワー クラスターのデータベース間に競合がある場合、フォロワー クラスターがすべてのデータベースをフォローすると、次のように解決されます。
    • フォロワー クラスターで作成された DB という名前のデータベースは、リーダー クラスターで作成された同じ名前のデータベースよりも優先されます。 そのため、フォロワー クラスターでリーダーのデータベース DB を含めるために、フォロワー クラスターのデータベース DB を削除または名前変更する必要があります。
    • 2 つ以上のリーダー クラスターからフォローされる DB という名前のデータベースは、リーダー クラスターの "いずれか" から任意に選択され、複数回フォローされなくなります。
  • フォロワー クラスターで実行された クラスター アクティビティ ログと履歴 を示すコマンドは、フォロワー クラスターのアクティビティと履歴を示し、その結果セットにはリーダー クラスターまたはクラスターの結果は含まれません。
    • たとえば、フォロワー クラスターで実行される .show queries コマンドでは、データベースに対して実行されたクエリとその後のフォロワー クラスターのみが表示され、リーダー クラスター内の同じデータベースに対して実行されるクエリは表示されません。

制限事項

次の制限事項を確認します。

  • フォロワー クラスターとリーダー クラスターは、同じリージョンに存在する必要があります。
  • フォロー対象のデータベースでストリーミング インジェストが使用されている場合は、ストリーミング インジェスト データをフォローできるように、フォロワー クラスターでストリーミング インジェストを有効にする必要があります。
  • カスタマー マネージド キー (CMK) を使用したデータ暗号化のクラスターのフォローには、次の制限があります。
    • フォロワー クラスターまたはリーダー クラスターが他のクラスターをフォローしていません。
    • フォロワー クラスターが CMK が有効になっているリーダー クラスターをフォローしていて、そのキーへのリーダーのアクセスが取り消された場合、リーダークラスターとフォロワー クラスターの両方が一時停止されます。 このような場合は、CMK の問題を解決してからフォロワー クラスターを再開するか、フォロワー クラスターからフォロワー データベースをデタッチしてリーダー クラスターから独立して再開することができます。
  • 別のクラスターにアタッチされているデータベースは、デタッチ前に削除することはできません。
  • 別のクラスターにアタッチされているデータベースを持つクラスターは、デタッチ前に削除することはできません。
  • すべてのデータベースをフォローしている場合、テーブル レベルの共有プロパティはサポートされません。
  • フォロワー データベースでは、認証方法としてマネージド ID を使用する外部テーブルに対してクエリを実行するには、マネージド ID をフォロワー クラスターに追加する必要があります。 リーダー クラスターとフォロワー クラスターが異なるテナントにプロビジョニングされている場合、この機能は動作しません。

次のステップ