次の方法で共有


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

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

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

フォローされているデータベースはどれですか?

  • クラスターは、1 つのデータベース、複数のデータベース、またはリーダー クラスターのすべてのデータベースに従うことができます。
  • 1 つのクラスターは、複数のリーダー クラスターのデータベースに従うことができます。
  • クラスターには、フォロワー データベースとリーダー データベースの両方を含めることができます。
  • EngineV3 クラスターがフォローできるのは EngineV3 クラスターのみです。同様に、EngineV2 クラスターがフォローできるのは V2 クラスターのみです。

[前提条件]

データベースを接続する

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

テーブルレベルの共有

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

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

すべてのデータベース表記で '*' を使用する場合、テーブル レベルの共有はサポートされていません。

具体化されたビューを含めると、ソース テーブルも含まれます。

例示

  1. すべてのテーブルを含めてください。 すべてのテーブルの後に既定で続くため、'*' は必要ありません。

    tablesToInclude = []
    
  2. "Logs" で始まる名前を持つすべてのテーブルを含めます。

    tablesToInclude = ["Logs*"]
    
  3. すべての外部テーブルを除外します。

    externalTablesToExclude = ["*"]
    
  4. マテリアライズドビューを除外します。

    materializedViewsToExclude=["*"]
    

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

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

C を使用してデータベースをアタッチする#

必要な NuGet パッケージ

C# の例

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = followerSubscriptionId };
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new AttachedDatabaseConfiguration
{
    ClusterResourceId = $"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}",
    DatabaseName = "<databaseName>", // Can be specific database name or * for all databases
    DefaultPrincipalsModificationKind = "Union",
    Location = "North Central US"
};
// 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 TableLevelSharingProperties(
        tablesToInclude:new List<string> { "table1" },
        tablesToExclude:new List<string> { "table2" },
        externalTablesToInclude:new List<string> { "exTable1" },
        externalTablesToExclude:new List<string> { "exTable2" },
        materializedViewsToInclude:new List<string> { "matTable1" },
        materializedViewsToExclude:new List<string> { "matTable2" }
    );
}
await resourceManagementClient.AttachedDatabaseConfigurations.CreateOrUpdateAsync(
    followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData
);

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

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

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

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

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

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

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

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

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

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

  2. 関連するデータベースが SHARED WITH OTHERS としてマークされていることを確認します>Yes

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

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

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

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

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

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

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

フォロワー クラスターは、アタッチされているフォロワー データベースを次のようにデタッチできます。

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = followerSubscriptionId };
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
await resourceManagementClient.AttachedDatabaseConfigurations.DeleteAsync(
    followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationsName
);

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

リーダー クラスターは、接続されているデータベースを次のようにデタッチできます。

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = leaderSubscriptionId };
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerResourceGroupName = "followerResourceGroup";
//The cluster and attached database configuration that are created as part of the Prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var followerDatabaseDefinition = new FollowerDatabaseDefinition
{
    ClusterResourceId = $"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}",
    AttachedDatabaseConfigurationName = attachedDatabaseConfigurationsName
};
await resourceManagementClient.Clusters.DetachFollowerDatabasesAsync(
    leaderResourceGroupName, leaderClusterName, followerDatabaseDefinition
);

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

プリンシパルの管理

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

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

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

アクセス許可の管理

読み取り専用データベース権限の管理は、すべてのデータベースの種類と同じです。 Azure portal でのアクセス許可の管理に関するページを参照してください。

キャッシュ ポリシーを構成する

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

注記

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

制限事項

  • フォロワーとリーダー クラスターは、同じリージョンに存在する必要があります。
  • フォローされているデータベースで ストリーミング インジェスト を使用する場合は、ストリーミング インジェストでフォロワー クラスターを有効にして、ストリーミング インジェスト データのフォローを許可する必要があります。
  • カスタマー マネージド キーを使用したデータ暗号化は、リーダー クラスターとフォロワー クラスターの両方でサポートされていません。
  • 別のクラスターにアタッチされているデータベースをデタッチする前に削除することはできません。
  • デタッチする前に、データベースが別のクラスターにアタッチされているクラスターを削除することはできません。
  • すべてのデータベースをフォローする場合、テーブル レベルの共有プロパティはサポートされません。

次のステップ