次の方法で共有


Azure Storage BLOB インベントリ

Azure Storage の BLOB インベントリでは、ストレージ アカウント内のコンテナー、BLOB、BLOB のバージョン、スナップショットの一覧と、関連するプロパティが示されます。 毎日または毎週、コンマ区切り値 (CSV) または Apache Parquet 形式で出力レポートが生成されます。 レポートを使用して、ストレージ アカウントの内容の保持、訴訟ホールド、または暗号化の状態を監査したり、データの合計サイズ、年数、階層の分布、またはデータのその他の属性を理解するために使用したりすることができます。 BLOB インベントリを使用して、List ContainersList Blobs API のスケジュールされた自動化として BLOB インベントリを使用することで、ビジネス ワークフローを簡素化したり、データ処理ジョブを高速化したりすることもできます。 BLOB インベントリ ルールを使用すると、BLOB の種類、プレフィックス、またはレポートに含める BLOB プロパティを選択して、レポートの内容をフィルター処理できます。

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

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

インベントリ機能

次の一覧では、Azure Storage BLOB インベントリの現在のリリースで使用できる機能について説明します。

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

    BLOB とコンテナーのインベントリ レポートを生成できます。 BLOB のレポートには、ベース BLOB、スナップショット、コンテンツの長さ、BLOB バージョン、およびそれらに関連付けられたプロパティ (作成時刻、最終更新時刻など) を含めることができます。 BLOB インベントリ レポートには空のコンテナーは表示されません。 コンテナーのレポートでは、コンテナーとそれに関連付けられているプロパティ (不変ポリシーの状態、法的なホールドの状態など) が記述されます。

  • カスタム スキーマ

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

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

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

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

    インベントリ レポートごとのマニフェスト ファイルと Azure Event Grid イベントが生成されます。 これらは、この記事の後半で説明します。

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

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

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

2021 年 6月より前にインベントリを構成した既存の Azure Storage BLOB インベントリ ユーザーの場合、ポリシーを読み込んで変更した後に、ポリシーを保存し直すことで、新しい機能の使用を開始できます。 ポリシーを再読み込みすると、ポリシーの新しいフィールドに既定値が設定されます。 これらの値は、必要に応じて変更できます。 また、次の 2 つの機能が使用可能になります。

  • ポリシーに対してのみサポートされるのではなく、すべての規則でターゲット コンテナーがサポートされるようになりました。

  • ポリシーごとではなく、マニフェスト ファイルと Azure Event Grid イベントがルールごとに生成されるようになりました。

インベントリ ポリシー

インベントリ レポートは、1 つまたは複数のルールを含むインベントリ ポリシーを追加することによって構成されます。 インベントリ ポリシーは、JSON ドキュメントに記述されたルールのコレクションです。

{
  "enabled": true,
  "rules": [
  {
    "enabled": true,
    "name": "inventoryrule1",
    "destination": "inventory-destination-container",
    "definition": {. . .}
  },
  {
    "enabled": true,
    "name": "inventoryrule2",
    "destination": "inventory-destination-container",
    "definition": {. . .}
  }]
}

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

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

インベントリ ルール

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

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

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

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

規則定義

パラメーター名 パラメーターのタイプ Notes 必須
filters json フィルターは、BLOB またはコンテナーが在庫の一部であるかどうかを判断します。 はい
format string インベントリ ファイルの出力を決定します。 有効な値は csv であり (CSV形式の場合)、parquet (Apache Parquet 形式の場合) です。 はい
objectType string これが BLOB またはコンテナーのインベントリ ルールであるかどうかを示します。 有効な値は、blobcontainer です。 はい
schedule string このルールを実行するスケジュールです。 有効な値は、dailyweekly です。 はい
schemaFields JSON 配列 インベントリの一部となるスキー マフィールドの一覧。 はい

ルール フィルター

BLOB インベントリ レポートをカスタマイズするには、いくつかのフィルターを使用できます。

フィルター名 フィルターの種類 Notes 必須
blobTypes 定義済みの列挙型の値の配列 有効な値は、階層型名前空間が有効になっているアカウントの場合は blockBlobappendBlob、他のアカウントの場合は blockBlobappendBlob、および pageBlob です。 このフィールドは、コンテナー (objectType: container) のインベントリには適用されません。 はい
creationTime 数値 BLOB が過去何日間以内に作成されたものである必要があるかを指定します。 たとえば、値 3 では、過去 3 日間に作成された BLOB のみがレポートに含まれます。 いいえ
prefixMatch プレフィックスを照合する最大 10 の文字列の配列。 prefixMatch を定義していない場合、または空のプレフィックスを指定した場合、ルールはストレージ アカウント内のすべての BLOB に適用されます。 プレフィックスは、コンテナー名のプレフィックスまたはコンテナー名である必要があります。 たとえば、containercontainer1/foo のようになります。 いいえ
excludePrefix 除外するプレフィックスを示す最大 10 個の文字列の配列。 インベントリ レポートから除外する BLOB パスを指定します。

excludePrefix は、コンテナー名のプレフィックスまたはコンテナー名である必要があります。 excludePrefix が空の場合、prefixMatch 文字列に一致する名前を持つすべての BLOB がリストされます。

特定のプレフィックスを含め、そこから特定のサブセットを除外する場合、excludePrefix フィルターを使用できます。 たとえば、container-a/folder フォルダーの下の BLOB を除く、container-a の下のすべての BLOB を含める場合、prefixMatchcontainer-a に設定し、excludePrefixcontainer-a/folder に設定する必要があります。
いいえ
includeSnapshots boolean インベントリにスナップショットを含めるかどうかを指定します。 既定値は false です。 このフィールドは、コンテナー (objectType: container) のインベントリには適用されません。 いいえ
includeBlobVersions boolean インベントリに BLOB バージョンを含めるかどうかを指定します。 既定値は false です。 このフィールドは、コンテナー (objectType: container) のインベントリには適用されません。 いいえ
includeDeleted boolean インベントリに専用 BLOB を含めるか指定します。 既定値は false です。 階層型名前空間があるアカウントでは、このフィルターには、フォルダーが含まれ、論理的に削除された状態の BLOB も含まれます。

明示的に削除されたフォルダーとファイル (BLOB) のみ、レポートに表示されます。 親フォルダーを削除した結果、子のフォルダーとファイルが削除されても、それらはレポートに含まれません。
いいえ

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 インベントリでサポートされているカスタム スキーマ フィールド

Note

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

フィールド BLOB Storage (既定のサポート) Data Lake Storage
名前 (必須) はい はい
作成時刻 はい はい
更新日時 はい はい
LastAccessTime1 はい はい
ETag はい はい
Content-Length はい はい
Content-Type はい はい
Content-Encoding はい はい
Content-Language はい はい
Content-CRC64 はい はい
Content-MD5 はい はい
Cache-Control はい はい
Cache-Disposition はい はい
BlobType はい はい
AccessTier はい はい
AccessTierChangeTime はい はい
LeaseStatus はい はい
LeaseState はい はい
ServerEncrypted はい はい
CustomerProvidedKeySHA256 はい はい
メタデータ はい はい
有効期限 いいえ はい
hdi_isfolder No はい
所有者 No はい
グループ化 No はい
アクセス許可 いいえ はい
Acl いいえ はい
スナップショット (レポートにスナップショットを含めることを選択した場合に使用可能および必須) はい はい
Deleted はい はい
DeletedId No はい
DeletedTime No はい
RemainingRetentionDays はい はい
VersionId (レポートに BLOB バージョンを含めることを選択した場合に使用可能および必須) はい No
IsCurrentVersion (レポートに BLOB バージョンを含めることを選択した場合に使用可能および必須) はい No
TagCount はい いいえ
Tags はい No
CopyId はい はい
CopySource はい はい
CopyStatus はい はい
CopyProgress はい はい
CopyCompletionTime はい はい
CopyStatusDescription はい はい
ImmutabilityPolicyUntilDate はい はい
ImmutabilityPolicyMode はい はい
LegalHold はい はい
RehydratePriority はい はい
ArchiveStatus はい はい
EncryptionScope はい はい
IncrementalCopy はい はい
x-ms-blob-sequence-number はい いいえ

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

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

Note

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

フィールド BLOB Storage (既定のサポート) Data Lake Storage
名前 (必須) はい はい
更新日時 はい はい
ETag はい はい
LeaseStatus はい はい
LeaseState はい はい
LeaseDuration はい はい
メタデータ はい はい
PublicAccess はい はい
DefaultEncryptionScope はい はい
DenyEncryptionScopeOverride はい はい
HasImmutabilityPolicy はい はい
HasLegalHold はい はい
ImmutableStorageWithVersioningEnabled はい はい
Deleted (削除されたコンテナーの包含が選択されている場合にのみ表示されます) はい はい
Version (削除されたコンテナーの包含が選択されている場合にのみ表示されます) はい はい
DeletedTime (削除されたコンテナーの包含が選択されている場合にのみ表示されます) はい はい
RemainingRetentionDays (削除されたコンテナーの包含が選択されている場合にのみ表示されます) はい はい

インベントリの実行

日次実行するようにルールを構成すると、毎日実行するようにスケジュールされます。 週次実行するようにルールを構成すると、毎週 UTC 時刻で日曜日に実行されるようにスケジュールされます。

ほとんどのインベントリの実行は 24 時間以内に完了します。 階層型名前空間が有効になっているアカウントの場合、実行に 2 日間かかる可能性があります。また、処理されるファイルの数によっては、2 日間経過しても実行が完了しない場合があります。 失敗せずに実行を完了できる最大時間は 6 日間です。

実行は重複しないため、同じルールの別の実行を開始するには実行を完了する必要があります。 たとえば、ルールが日次実行されるようにスケジュールされている一方で、その同じルールの前日の実行がまだ進行中の場合、その日に新しい実行は開始されません。 週次実行するようにスケジュールされているルールは、前の実行が成功するか失敗したかに関係なく、日曜日ごとに実行されます。 実行が正常に完了しない場合、サポートに連絡する前に、後続の実行が完了するかどうかを確認してください。 実行のパフォーマンスは変化する可能性があるため、実行が完了しない場合でも、その後の実行は完了する可能性があります。

インベントリ ポリシーの読み取りまたは書き込みは全体に対して行われます。 部分的な更新はサポートされません。 インベントリ ルールは日次で評価されます。 そのため、ルールの定義を変更しても、その日にポリシーのルールが既に評価されている場合、更新は次の日まで評価されません。

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

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 string インベントリ ルールがスケジュールされた時刻。
accountName string ストレージ アカウント名。
ruleName string ルール名。
policyRunStatus string インベントリの実行の状態。 指定できる値は、SucceededPartiallySucceededFailed です。
policyRunStatusMessage string インベントリ実行のステータス メッセージ。
policyRunId string インベントリ実行のポリシー実行 ID。
manifestBlobUrl string インベントリ実行用のマニフェスト ファイルの 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 形式のファイルが生成されます。 そのような各ファイルには、一致したオブジェクトとそのメタデータが含まれます。

    重要

    2023 年 10 月以降、オブジェクト数が多い場合、インベントリを実行すると複数のファイルが生成されるようになります。 詳細については、「複数のインベントリ ファイル出力に関する 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.jsの内容を示しています。

    {
    "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)。

価格と課金

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

インベントリ ファイルを作成した後、アカウントでインベントリによって生成されたファイルの格納、読み取り、書き込みを行うために、追加の標準データ ストレージと操作料金が発生します。

ルールに他のルールのプレフィックスと重複するプレフィックスが含まれている場合、同じ BLOB が複数のインベントリ レポートに表示されることがあります。 この場合、両方のインスタンスに対して課金されます。 たとえば、あるルールの prefixMatch 要素が ["inventory-blob-1", "inventory-blob-2"] に設定され、別のルールの prefixMatch 要素が ["inventory-blob-10", "inventory-blob-20"] に設定されているとします。 inventory-blob-200 という名前のオブジェクトが両方のインベントリ レポートに表示されます。

includeSnapshotsincludeVersions のフィルターを false に設定していても、BLOB のスナップショットやバージョンも課金対象となります。 これらのフィルター値は課金に影響しません。 レポートに表示される内容をフィルター処理するためにのみ使用できます。

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 がある場合、インベントリ ジョブが完了するまでに 1 日を超えることがあります。 インベントリ ジョブが失敗し、インベントリ ファイルが作成されないことがあります。 ジョブが正常に完了しない場合、サポートに連絡する前に、後続のジョブが完了するかどうかを確認してください。

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

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

オブジェクト レプリケーション ポリシーを使用すると、インベントリ ジョブによってインベントリ レポートが送信先コンテナーに書き込まれないようにすることができます。 他の一部のシナリオでは、レポートが部分的にしか完了していないときにレポートがアーカイブされる場合や、レポートが変更不可になる場合があります。その結果、インベントリ ジョブが失敗することがあります。

インベントリと不変ストレージ

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

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

論理的な削除を有効にしてコンテナーまたはディレクトリを削除すると、コンテナーまたはディレクトリとそのすべての内容が論理的に削除済みとしてマークされます。 ただし、ポリシーの includeDeleted フィールドを true に設定した場合でも、インベントリ レポートにはコンテナーまたはディレクトリ (長さ 0 の BLOB として報告されます) のみが表示され、そのコンテナーまたはディレクトリ内の論理的に削除された BLOB は表示ます。 これにより、Azure portal で取得した容量メトリックに表示される内容と、インベントリ レポートによって報告される内容が異なる可能性があります。

明示的に削除された BLOB のみ、レポートに表示されます。 そのため、論理的に削除されたすべての BLOB (ディレクトリとすべての子 BLOB) の完全な一覧を取得するには、ディレクトリ自体を削除する前に、ワークロードでディレクトリ内の各 BLOB を削除する必要があります。

次のステップ