Azure Storage BLOB インベントリ

Azure Storageのブロブインベントリは、ストレージアカウント内のコンテナ、ブロブ、ブロブバージョン、スナップショット、関連するプロパティを一覧にします。 このサービスは、カンマ区切り値(CSV)またはApache Parquet形式で、毎日または週次でレポートを生成します。

在庫レポートを使って、ストレージアカウントの内容の保持状況、法的保有状況、暗号化状況を監査しましょう。 また、データの総サイズ、年齢、階層分布、その他の属性も分析できます。

ブロブインベントリはビジネスのワークフローを簡素化し、データ処理の作業を高速化します。 リストコンテナおよびリストブロブスAPIのスケジュール自動化を提供します。 インベントリルールは、ブロブの種類、プレフィックス、または選択したブロブプロパティで内容を報告します。

Azure Storage BLOB インベントリは、次の種類のストレージ アカウントで使用できます。

  • 標準汎用 v2
  • Premium ブロック BLOB ストレージ
  • BLOB ストレージ

インベントリ機能

Azure Storage Blob Inventoryは以下の機能と機能をサポートしています。

  • BLOB とコンテナーのインベントリ レポート

    BLOB とコンテナーのインベントリ レポートを生成できます。 ブロブのレポートには、ベースブロブ、スナップショット、コンテンツ長、バージョン、および作成時間や最終修正時間などの関連プロパティが含まれます。 報告書には空の容器は記載されていません。 コンテナのレポートは、コンテナおよびそれに関連する特性(不変性ポリシーの状態や法的保留状態)を記述します。

  • カスタム スキーマ

    レポートに表示するフィールドを選択できます。 サポートされているフィールドの一覧から選択します。 この一覧は、この記事の後半に記載されています。

  • CSV および Apache Parquet の出力形式

    インベントリ レポートは、CSV または Apache Parquet のいずれかの出力形式で生成できます。

  • インベントリ レポートごとのマニフェスト ファイルと Azure Event Grid イベント

    サービスは各インベントリレポートに対してマニフェストファイルとAzure Event Gridイベントを生成します。 この記事は後ほどこれらのアイテムについて説明しています。

インベントリ レポートの有効化

BLOB インベントリ レポートを有効にするには、1 つ以上のルールが含まれるポリシーを、ストレージ アカウントに追加します。 ガイダンスについては、「Azure Storage BLOB のインベントリレポートを有効にする」をご覧ください。

インベントリ ポリシーをアップグレードする

2021年6月以前にAzure Storageのブロブインベントリを設定していれば、ポリシーを読み込み、必要な変更を加えてから保存してください。 ポリシーを再読み込むと、サービスはルールごとの宛先、マニフェストファイル、Azure Event Gridのイベント設定にデフォルト値を割り当てます。 これらの価値観は変えられます。

  • 各ルールはポリシーレベルで一つの宛先を共有するのではなく、宛先コンテナをサポートします。

  • サービスはポリシーの代わりに、各ルールごとにマニフェストファイルとAzure Event Gridイベントを生成します。

インベントリ ポリシー

在庫レポートを設定するには、JSONドキュメントに1つ以上のルールを含む在庫ポリシーを追加してください。

{
  "enabled": true,
  "rules": [
  {
    "enabled": true,
    "name": "inventoryrule1",
    "destination": "inventory-destination-container",
    "definition": {
      "filters": {
        "blobTypes": ["blockBlob"]
      },
      "format": "csv",
      "objectType": "blob",
      "schedule": "daily",
      "schemaFields": ["Name"]
    }
  },
  {
    "enabled": true,
    "name": "inventoryrule2",
    "destination": "inventory-destination-container",
    "definition": {
      "filters": {},
      "format": "csv",
      "objectType": "container",
      "schedule": "weekly",
      "schemaFields": ["Name"]
    }
  }]
}

Azure portal の [BLOB インベントリ] セクションで [コード ビュー] タブを選択して JSON を表示し、 インベントリ ポリシーを確認します。

パラメーター名 パラメーターのタイプ 注記 必須ですか?
enabled ブーリアン ポリシー全体を無効にするために使用します。 trueに設定すると、ルールレベルのenabledフィールドがこのパラメータを上書きします。 無効になると、すべてのルールでインベントリが無効になります。 ○
rules ルール オブジェクトの配列 ポリシーには少なくとも 1 つのルールが必要です。 ポリシーごとに最大 100 のルールがサポートされています。 ○

インベントリ ルール

ルールには、インベントリ レポートを生成するためのフィルター条件と出力パラメーターが含まれます。 各ルールからインベントリ レポートが作成されます。 ルールには、重複するプレフィックスを含めることができます。 ルールの定義によっては、1 つの BLOB が複数のインベントリに出現する場合があります。

ポリシー内の各ルールには、次のいくつかのパラメーターがあります。

パラメーター名 パラメーターのタイプ 注記 必須ですか?
name 文字列 ルール名には、大文字と小文字が区別される英数字を最大256文字まで含めることができます。 名前は、ポリシー内で一意である必要があります。 ○
enabled ブーリアン ルールを有効化または無効化するためのフラグ。 既定値は true です。 ○
definition JSON インベントリ ルール定義 各定義は、ルール フィルター セットで構成されます。 ○
destination 文字列 サービスがすべての在庫ファイルを生成するデスティネーションコンテナです。 出力先コンテナーは既に存在している必要があります。

グローバルな [BLOB インベントリが有効] フラグの方が、ルールの enabled パラメーターよりも優先されます。

規則定義

パラメーター名 パラメーターのタイプ 注記 必須
filters JSON フィルターはブロブかコンテナかをインベントリの一部かを判断します。 ○
format 文字列 インベントリファイルの出力フォーマットを決定します。 有効な値は csv (CSV形式)と parquet (Apache Parquet形式)です。 ○
objectType 文字列 在庫ルールがブロブに適用されるのかコンテナに適用されるのかを示します。 有効な値は、blob、container です。 ○
schedule 文字列 ルールを実行するタイミングを指定します。 有効な値は、daily、weekly です。 ○
schemaFields JSON 配列 インベントリに含めるスキーマフィールドを一覧にします。 ○

ルールフィルター

ブロブインベントリレポートをカスタマイズするには、以下のフィルターを使ってください:

フィルター名 フィルターの種類 注記 必須ですか?
blobTypes 定義済みの列挙型の値の配列 有効な値は階層的な名前空間対応アカウントでは blockBlob と appendBlob 、その他のアカウントには blockBlob、 appendBlob、 pageBlob が割り当てられます。 このフィールドはコンテナインベントリには適用されません(objectType: container)。 ○
creationTime 数値 ブロブが何日前に作られたかを指定しています。 例えば、 3 の値は過去3日間に作成されたブロブのみを含みます。 いいえ
prefixMatch 最大10本の文字列の配列 prefixMatchを定義したり空のプレフィックスを指定していない場合、このルールはストレージアカウント内のすべてのブロブに適用されます。 プレフィックスは、コンテナー名のプレフィックスまたはコンテナー名である必要があります。 たとえば、container または container1/foo です。 いいえ
excludePrefix 最大10本の文字列の配列 インベントリ レポートから除外する BLOB パスを指定します。

excludePrefixはコンテナ名の接頭辞かコンテナ名でなければなりません。 空の excludePrefixでは、レポートは任意の prefixMatch 文字列に一致する名前を持つすべてのブロブを一覧にします。

接頭辞を含めるが特定のサブセットを除外する場合は、 excludePrefix フィルターを使います。 例えば、container-acontainer-a/folder以外のすべてのブロブを含めるには、prefixMatchをcontainer-aに、excludePrefixをcontainer-a/folderに設定します。
いいえ
includeSnapshots ブーリアン インベントリにスナップショットが含まれているかどうかを指定します。 既定値は false です。 このフィールドはコンテナインベントリには適用されません(objectType: container)。 いいえ
includeBlobVersions ブーリアン インベントリにブロブバージョンが含まれているかどうかを指定します。 既定値は false です。 このフィールドはコンテナインベントリには適用されません(objectType: container)。 いいえ
includeDeleted ブーリアン インベントリに削除されたブロブが含まれているかどうかを指定します。 既定値は false です。 階層的な名前空間を持つアカウントでは、このフィルターにはソフト削除状態のフォルダやブロブが含まれます。

レポートに表示されるのは明示的に削除されたフォルダやファイルだけです。 親フォルダを削除して削除された子フォルダやファイルは含まれません。
いいえ

Azure portal の [BLOB インベントリ] セクションで [コード ビュー] タブを選択して JSON を表示し、 インベントリ ルールを確認します。 ルール定義内でフィルターを指定します。

{
  "destination": "inventory-destination-container",
  "enabled": true,
  "rules": [
  {
    "definition": {
      "filters": {
        "blobTypes": ["blockBlob", "appendBlob", "pageBlob"],
        "prefixMatch": ["inventorytestcontainer1", "inventorytestcontainer2/abcd", "etc"],
        "excludePrefix": ["inventorytestcontainer10", "etc/logs"],
        "includeSnapshots": false,
        "includeBlobVersions": true
      },
      "format": "csv",
      "objectType": "blob",
      "schedule": "daily",
      "schemaFields": ["Name", "Creation-Time"]
    },
    "enabled": true,
    "name": "blobinventorytest",
    "destination": "inventorydestinationContainer"
  },
  {
    "definition": {
      "filters": {
        "prefixMatch": ["inventorytestcontainer1", "inventorytestcontainer2/abcd", "etc"]
      },
      "format": "csv",
      "objectType": "container",
      "schedule": "weekly",
      "schemaFields": ["Name", "HasImmutabilityPolicy", "HasLegalHold"]
    },
    "enabled": true,
    "name": "containerinventorytest",
    "destination": "inventorydestinationContainer"
    }
  ]
}

BLOB インベントリでサポートされているカスタム スキーマ フィールド

注

Data Lake Storage 列では、階層型名前空間機能が有効になっているアカウントでのサポートが示されます。

フィールド BLOB Storage (既定のサポート) Data Lake Storage
名前 (必須) はい はい
作成時刻 はい はい
更新日時 はい はい
LastAccessTime1 はい はい
ETag はい はい
Content-Length (コンテンツの長さ) はい はい
コンテンツタイプ はい はい
コンテンツエンコーディング はい はい
コンテンツ言語 はい はい
Content-CRC64 はい はい
Content-MD5 はい はい
キャッシュ制御 はい はい
Cache-Disposition はい はい
BlobType はい はい
アクセスティア はい はい
AccessTierChangeTime はい はい
リースステータス はい はい
LeaseState はい はい
サーバー暗号化 はい はい
カスタマー提供キーSHA256 はい はい
メタデータ はい はい
有効期限 いいえ はい
hdi_isfolder いいえ はい
所有者 いいえ はい
グループ いいえ はい
アクセス許可 いいえ はい
Acl いいえ はい
スナップショット (レポートにスナップショットを含めることを選択した場合に使用可能および必須) はい はい
削除 はい はい
DeletionId いいえ はい
DeletedTime いいえ はい
残りの保持日数 はい はい
VersionId (レポートに BLOB バージョンを含めることを選択した場合に使用可能および必須) はい いいえ
IsCurrentVersion (レポートに BLOB バージョンを含めることを選択した場合に使用可能および必須) はい いいえ
タグ数 はい いいえ
タグ はい いいえ
CopyId はい はい
コピーソース はい はい
CopyStatus はい はい
コピーの進行状況 はい はい
コピー完了時間 はい はい
CopyStatusDescription はい はい
不変ポリシーの有効期限日 はい はい
不変ポリシー モード はい はい
リーガルホールド はい はい
RehydratePriority (リハイドレート優先順位) はい はい
アーカイブステータス はい はい
暗号化スコープ はい はい
IncrementalCopy はい はい
x-ms-blob-sequence-number はい いいえ

1 規定で無効になっています。 オプションであるアクセス時間の追跡を有効にする。

コンテナー インベントリでサポートされているカスタム スキーマ フィールド

注

Data Lake Storage 列では、階層型名前空間機能が有効になっているアカウントでのサポートが示されます。

フィールド BLOB Storage (既定のサポート) Data Lake Storage
名前 (必須) はい はい
更新日時 はい はい
ETag はい はい
リースステータス はい はい
LeaseState はい はい
リース期間 はい はい
メタデータ はい はい
パブリックアクセス はい はい
デフォルト暗号化スコープ はい はい
暗号化範囲の上書きを拒否 (DenyEncryptionScopeOverride) はい はい
不変性ポリシーを持っている はい はい
HasLegalHold はい はい
バージョン管理が有効になった不変ストレージ はい はい
Deleted (削除されたコンテナーの包含が選択されている場合にのみ表示されます) はい はい
Version (削除されたコンテナーの包含が選択されている場合にのみ表示されます) はい はい
DeletedTime(削除済みコンテナを含める場合のみ表示されます) はい はい
RemainingRetentionDays(削除済みコンテナを含める場合のみ表示されます) はい はい

インベントリの実行

ルールを毎日実行するように設定すれば、毎日実行されます。 ルールを週ごとに実行するように設定すると、UTCの毎週日曜日に実行されます。

在庫管理は失敗するまでに最大6日かかることがあります。 ランタイムに影響を与える要因については、 Blob Inventoryのパフォーマンス特性をご覧ください。

ランは重複しないため、同じルールの次のランが始まる前に1回のランを完了しなければなりません。 例えば、前日のデイリールールの実行がまだ進行中の場合、その日にサービスは新しい実行を開始しません。 毎週日曜日には、前回のランが成功しても失敗でも週次ルールが適用されます。 もし成功しなかった場合は、サポートに連絡する前にその後のランを確認しましょう。 実行性能は変動するため、次の実行が成功裏に完了することもあります。

インベントリ ポリシーの読み取りと書き込みは、常に全体単位で行われます。 部分的な更新はサポートされません。 インベントリ ルールは日次で評価されます。 サービスがその日のポリシーを評価した後にルール定義を変更した場合、サービスは翌日にあなたの更新を評価します。

インベントリ完了イベント

BlobInventoryPolicyCompleted イベントは、インベントリの実行がルールに対して完了したときに生成されます。 このイベントは、インベントリの実行が開始前に失敗してユーザー エラーになった場合にも発生します。 例えば、無効なポリシーや宛先コンテナの欠落がイベントを引き起こします。 以下のJSONはイベント BlobInventoryPolicyCompleted 例を示しています。

{
  "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/BlobInventory/providers/Microsoft.EventGrid/topics/BlobInventoryTopic",
  "subject": "BlobDataManagement/BlobInventory",
  "eventType": "Microsoft.Storage.BlobInventoryPolicyCompleted",
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "data": {
    "scheduleDateTime": "2021-05-28T03:50:27Z",
    "accountName": "testaccount",
    "ruleName": "Rule_1",
    "policyRunStatus": "Succeeded",
    "policyRunStatusMessage": "Inventory run succeeded, refer manifest file for inventory details.",
    "policyRunId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "manifestBlobUrl": "https://testaccount.blob.core.windows.net/inventory-destination-container/2021/05/26/13-25-36/Rule_1/Rule_1-manifest.json"
  },
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2021-05-28T15:03:18Z"
}

次の表で、BlobInventoryPolicyCompleted イベントのスキーマについて説明します。

フィールド タイプ 説明
scheduleDateTime 文字列 インベントリ ルールがスケジュールされた時刻。
アカウント名 文字列 ストレージ アカウント名。
ルール名 文字列 ルール名。
policyRunStatus 文字列 インベントリ実行の状態。 指定できる値は、Succeeded、PartiallySucceeded、Failed です。
ポリシー実行状況メッセージ 文字列 インベントリ実行のステータス メッセージ。
policyRunId 文字列 インベントリ実行に対するポリシー実行 ID。
manifestBlobUrl 文字列 インベントリ実行用のマニフェスト ファイルの BLOB URL。

インベントリの出力

各インベントリルールは、そのルールの指定されたインベントリ宛先コンテナ内にファイルのセットを作成します。 インベントリ出力は以下のパスで利用可能です: https://<accountName>.blob.core.windows.net/<inventory-destination-container>/YYYY/MM/DD/HH-MM-SS/<ruleName> ここで:

  • accountName は、ご使用の Azure Blob Storage アカウント名です。
  • inventory-destination-container は、インベントリ ルールで指定した出力先コンテナーです。
  • YYYY/MM/DD/HH-MM-SS は在庫開始の時刻です。
  • ruleName はインベントリ ルール名です。

インベントリ ファイル

ルールのインベントリの実行ごとに、次のファイルが生成されます。

  • インベントリ ファイル: ルールを使ってインベントリを実行すると、1 つの CSV または Apache Parquet 形式のファイルが生成されます。 そのような各ファイルには、一致したオブジェクトとそのメタデータが含まれます。

    重要

    オブジェクト数が多い場合、インベントリランは複数のファイルを生成します。 詳細については、「複数のインベントリ ファイル出力に関する FAQ」を参照してください。

    Apache Parquet形式の報告書は以下の形式で日付を示します: timestamp_millis [number of milliseconds since 1970-01-01 00:00:00 UTC]。 CSV 形式のファイルの場合、最初の行は常にスキーマ行になります。 次の図は、Microsoft Excel で開いたインベントリ CSV ファイルを示しています。

    Microsoft Excel で開いたインベントリ CSV ファイルのスクリーンショット

    重要

    インベントリ ファイルに表示される BLOB パスは、特定の順序で表示されないことがあります。

  • チェックサムファイル: チェックサムファイルには manifest.json ファイルの内容のMD5チェックサムが含まれています。 チェックサムファイルの名前は <ruleName>-manifest.checksum です。 チェックサム ファイルの生成は、インベントリ ルールの実行の完了を示します。

  • マニフェストファイル:manifest.jsonファイルには、そのルールで生成された在庫ファイルの詳細が記載されています。 ファイルの名前が <ruleName>-manifest.json です。 このファイルにはルール定義とそのルールのインベントリへの経路も記録されています。 以下のJSONはサンプル manifest.json ファイルの内容を示しています。

    {
    "destinationContainer" : "inventory-destination-container",
    "endpoint" : "https://testaccount.blob.core.windows.net",
    "files" : [
      {
        "blob" : "2021/05/26/13-25-36/Rule_1/Rule_1.csv",
        "size" : 12710092
      }
    ],
    "inventoryCompletionTime" : "2021-05-26T13:35:56Z",
    "inventoryStartTime" : "2021-05-26T13:25:36Z",
    "ruleDefinition" : {
      "filters" : {
        "blobTypes" : [ "blockBlob" ],
        "includeBlobVersions" : false,
        "includeSnapshots" : false,
        "prefixMatch" : [ "penner-test-container-100003" ]
      },
      "format" : "csv",
      "objectType" : "blob",
      "schedule" : "daily",
      "schemaFields" : [
        "Name",
        "Creation-Time",
        "BlobType",
        "Content-Length",
        "LastAccessTime",
        "Last-Modified",
        "Metadata",
        "AccessTier"
      ]
    },
    "ruleName" : "Rule_1",
    "status" : "Succeeded",
    "summary" : {
      "objectCount" : 110000,
      "totalObjectSize" : 23789775
    },
    "version" : "1.0"
    }
    

    このファイルは、実行の開始時に作成されます。 このファイルの status フィールドは、実行が完了するまで に Pending に設定されます。 実行完了後、このフィールドは完了状態(例: Succeeded または Failed)に設定されます。

価格と課金

在庫の価格設定は、請求期間中にスキャンしたブロブやコンテナの数に基づいています。 [Azure Blob Storage 価格] ページには、スキャンされた 100 万個のオブジェクトあたりの価格が表示されます。 たとえば、100 万個のオブジェクトをスキャンする価格が $0.003 米ドルの場合、アカウントには 300 万個のオブジェクトが含まれており、1 か月に 4 つのレポートを作成すると、請求は 4 * 3 * $0.003 = $0.036 になります。

在庫ファイルを作成すると、アカウント内の在庫生成ファイルの保存、読み込み、書き込みにあたり、追加の標準データ保存および運用料金が発生します。

あるルールに他のルールの接頭辞と重複する接頭辞が含まれている場合、同じブロブが複数のインベントリレポートに現れることがあります。 この場合、両方の費用を支払うことになります。 たとえば、あるルールの prefixMatch 要素が ["inventory-blob-1", "inventory-blob-2"] に設定され、別のルールの prefixMatch 要素が ["inventory-blob-10", "inventory-blob-20"] に設定されているとします。 inventory-blob-200 という名前のオブジェクトが両方のインベントリ レポートに表示されます。

スナップショットやブロブのバージョンも、 includeSnapshots や includeBlobVersions フィルターを falseに設定しても請求にカウントされます。 これらのフィルター値は課金に影響しません。 レポートに表示される内容をフィルター処理するためにのみ使用できます。

Azure Storage BLOB インベントリの価格の詳細については、Azure Blob Storage の価格に関するページを参照してください。

機能サポート

Data Lake Storage Gen2、Network File System (NFS) 3.0 プロトコル、または SSH ファイル転送プロトコル (SFTP) を有効にすると、この機能のサポートが影響を受ける場合があります。 これらの機能のいずれかを有効にしている場合は、「Azure Storage アカウントでの Blob Storage 機能のサポート」 を参照して、この機能のサポートを評価してください。

既知の問題と制限事項

このセクションでは、Azure Storage BLOB インベントリ機能の制限事項と既知の問題について説明します。

インベントリレポートのオブジェクト数やデータサイズは請求と比較すべきではありません

在庫レポートにはメタデータ、システムログ、プロパティが含まれていないので、ストレージアカウントの請求されたオブジェクト数やデータサイズと比較しないでください。

在庫作業は場合によっては完了に時間がかかることがあります

このような場合、在庫管理の作業には時間がかかることがあります:

  • 大量の新しいデータを追加します。

  • ルールやルールのセットを初めて実行します。

    在庫管理はその後の実行よりも時間がかかることがあります。

  • インベントリランは階層的な名前空間対応アカウントで大量のデータを処理する。

    階層的な名前空間対応アカウントで数億のブロブを持つインベントリ作業は、完了までに1日以上かかることがあります。 インベントリ ジョブが失敗し、インベントリ ファイルが作成されないことがあります。 ジョブが正常に完了しない場合、サポートに連絡する前に、後続のジョブが完了するかどうかを確認してください。

  • 特定の日付に対してレポートをさかのぼって生成するオプションはありません。

オブジェクト レプリケーション ポリシーを持つコンテナーには、インベントリ ジョブからレポートを書き込めません。

オブジェクト レプリケーション ポリシーを使用すると、インベントリ ジョブによってインベントリ レポートが送信先コンテナーに書き込まれないようにすることができます。 他のシナリオではレポートをアーカイブしたり、部分的に完了したレポートを不変にしたりして、在庫ジョブの失敗を引き起こすことがあります。

在庫管理と不変の保管

アカウント内でバージョンレベルの不変性のサポートが有効になっている場合や、在庫ポリシーで定義した宛先コンテナでバージョンレベルの不変性が有効になっている場合、そのアカウント内でインベントリポリシーを設定することはできません。

レポートでは、階層型名前空間を持つアカウント内の論理的に削除された BLOB が除外される場合があります

ソフト削除が有効になっている状態でコンテナやディレクトリを削除すると、サービスはそのコンテナやすべての内容をソフト削除としてマークします。 しかし、インベントリレポートにはコンテナまたはディレクトリのみが、0長のブロブとして報告されます。 ポリシーの includeDeleted フィールドを trueにしても、ソフト削除された子ブロブは報告書には含まれていません。 この挙動は、Azureポータルの容量指標と在庫レポートの間に差異を生み出すことがあります。

レポートには明確に削除したブロブだけが表示されます。 ソフト削除されたすべてのブロブ(ディレクトリおよびすべての子ブロブ)の完全なリストを得るには、ワークロードはディレクトリ自体を削除する前に、ディレクトリ内の各ブロブを削除する必要があります。

ブロブインベントリ内の重複処理

Blob Inventoryは分散システム上で動作するため、稀に重複したブロブエントリーがレポートに現れることがあります。

インベントリレポートの後処理時にユニークなブロブエントリが必要な場合は、 Name フィールドでユニークなブロブだけを返してください。

レポートにブロブバージョンが含まれている場合は、 Name フィールドと Version ID フィールドの両方を組み合わせて、ユニークなブロブとバージョンのみを特定して返送してください。

次のステップ