Cognitive Searchを使ってblob中のデータを検索したい

このエントリは2021/01/17現在の情報に基づいています。将来の機能追加・変更に伴い、記載内容との乖離が発生する可能性があります。

以下はAzure Cognitive SearchとBlob Storageってどういう感じで連携できるのか調べた際の備忘録。

Azure Cognitive Search(旧Azure Search)

概要は以下。

Azure Cognitive Search とは / What is Azure Cognitive Search?
https://docs.microsoft.com/azure/search/search-what-is-azure-search

データベースだけでなくBlob Storageもデータソースとして利用できる。

Blob Storageを対象にCognitive Searchを構成する

例えば以下のようなデータが1ファイルに1件以上入っているとする(見る限り、データ操作の証跡ログのようで、xxxxxというユーザーがログインしてからログアウトまでの操作情報を記録している感じだが、このデータについては議論しない)。

{
  "user":"xxxxx",
  "enteredAt": "2021-01-14T18:25:43.511Z",
  "operations" : [
    {
      "type": "ログイン",
      "result": "成功",
      "detail": "なし",
      "date": "2021-01-14T18:25:43.511Z"
    },
    {
      "type": "データ書き換え",
      "result": "失敗",
      "detail": "○○のデータがロックされています",
      "date": "2021-01-14T18:43:21.087Z"
    },
    {
      "type": "データ読み取り",
      "result": "成功",
      "detail": "○○のデータ",
      "date": "2021-01-14T18:44:06.182Z"
    },
    {
      "type": "データ書き換え",
      "result": "成功",
      "detail": "○○のデータ",
      "date": "2021-01-14T18:45:01.432Z"
    },
    {
      "type": "ログアウト",
      "result": "成功",
      "detail": "なし",
      "date": "2021-01-14T18:49:43.511Z"
    }
  ],
  "leftAt": "2021-01-14T18:49:43.511Z"
}

この場合、以下のドキュメントの通り構成すればOK。フィルターの可否やデータ取得可否を要素ごとに指定できる。

Azure Blob Storage のコンテンツを検索する / Search over Azure Blob storage content
https://docs.microsoft.com/azure/search/search-blob-storage-integration
Azure Cognitive Search で BLOB インデクサーを使用して JSON BLOB のインデックスを作成する方法 / How to index JSON blobs using a Blob indexer in Azure Cognitive Search
https://docs.microsoft.com/azure/search/search-howto-index-json-blobs

データソース形式をJSONと設定すれば、全文検索だけでなく、JSONの要素で検索したり、必要な要素だけピックアップすることもできる。インデックス作成の最小インターバルは5分なので、blob着信をトリガーにしたFunctionsでのデータの取得の仕組みに比べると、直近のデータへの対応という点では少々時間がかかるが、リアルタイム性を求められないのであれば十分と思われる。

削除されたblobが検索に現れないようにする

blobの論理削除を有効にしている場合、blobの論理削除時にインデックス生成対象外にすることも可能(Preview)。これにより、論理削除されたblobのデータは検索結果に現れなくなる。blobのメタデータを使ってCognitive Searchに対してインデックス作成対象から外すこともできる。

論理削除を無効にしている場合、Cognitive Searchではblob削除を検知できないため、インデックスには削除されたblobが残存する。更新のためにはデータの再インポート、インデックスの再作成が必要。

Azure Cognitive Search のインデックス作成で BLOB の変更と削除の検出を設定する方法 / How to set up change and deletion detection for blobs in Azure Cognitive Search indexing
https://docs.microsoft.com/azure/search/search-howto-index-changed-deleted-blobs

その他

blobの保護

アクセスポリシーで不変blob (Immutable Blob) を指定することで、blobを格納するBlobコンテナーは追加のみを許容できるように構成できる。これにより、改ざんや誤削除を回避できる。アクセスポリシーで指定できるのは以下の2種類。このアクセスポリシーの設定はBlobコンテナー単位なので注意が必要。

Immutable Storage有効時、LastModifiedタイムスタンプの変更ができないため、blobの削除はもとより、メタデータの付与も不可能。そのため、blobの削除が必要であれば、以下のいずれかの方法をとる必要がある。

  • Immutable Storageを解除して削除する
  • Retention Policyを定め、その定めた時間が経過したものを削除する(Retention Policyに定めた期間を過ぎたとしてもメタデータの設定はできない)

さまざまな不変シナリオで無効になる blob ストレージ操作の種類は以下のドキュメントの通り。

シナリオ / Scenarios
https://docs.microsoft.com/azure/storage/blobs/storage-blob-immutable-storage#scenarios

もしImmutable Storageを構成しているBlobコンテナーをCognitive Searchのデータソースとして利用するのであれば、blobのネイティブ論理削除を構成しておき、Retention Policy期間を経過したものを論理削除するようにしておけば、保護期間を過ぎたblobをCognitive Searchのインデックス生成対象から自動的に外すことも可能。

Blob Storageで論理削除を有効にしておけば、訴訟ホールドを解除して誤ってblobを削除したとしても、論理削除なのでblobを救出できる。また、Blobコンテナーも論理削除を有効にできる(Preview)。

不変ストレージを使用してビジネスに不可欠な BLOB データを保存する / Store business-critical blob data with immutable storage
https://docs.microsoft.com/azure/storage/blobs/storage-blob-immutable-storage
BLOB ストレージの不変ポリシーを設定および管理する / Set and manage immutability policies for Blob storage
https://docs.microsoft.com/azure/storage/blobs/storage-blob-immutability-policies-manage
BLOB の論理的な削除の有効化と管理 / Enable and manage soft delete for blobs
https://docs.microsoft.com/azure/storage/blobs/soft-delete-blob-enable
コンテナーの論理的な削除を有効にして管理する (プレビュー) / Enable and manage soft delete for containers (preview)
https://docs.microsoft.com/azure/storage/blobs/soft-delete-container-enable

Immutable Storageは以下のエントリでも簡単に記載している。

Azure Blob StorageをImmutableにする
https://logico-jp.io/2020/01/28/blob-immutable-storage/

アクセスの監視

Blob Storageへのアクセスは、Azure Defender for Storageで監視できる。

Azure Defender for Storage を構成する / Configure Azure Defender for Storage
https://docs.microsoft.com/azure/storage/common/azure-defender-storage-configure

アーカイブ

blobの削除ができない場合、例えば法令上どうしても保持せざるを得ない場合がある。その場合、Cool TierもしくはArchive Tierに移動することでコストを抑えることができる。

Azure Blob Storage のアクセス層 – ホット、クール、およびアーカイブ / Access tiers for Azure Blob Storage – hot, cool, and archive
https://docs.microsoft.com/azure/storage/blobs/storage-blob-storage-tiers

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中