この記事では、JavaScript 用 Azure Storage クライアント ライブラリを使用してデータを管理および検索するために BLOB インデックス タグを使用する方法について説明します。
前提条件
- この記事の例では、JavaScript 用の Azure Blob Storage クライアント ライブラリを操作するように設定されたプロジェクトが、既にあることを前提としています。 パッケージのインストール、モジュールのインポート、データ リソースの操作が認可されたクライアント オブジェクトの作成など、プロジェクトの設定については、「Azure Blob Storage および JavaScript の概要」を参照してください。
- 認可メカニズムには、BLOB インデックス タグを操作するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。
BLOB インデックス タグについて
キーと値のタグ属性を使用して、BLOB インデックス タグによってストレージ アカウント内のデータが分類されます。 これらのタグには自動的にインデックスが付けられ、検索可能な多次元インデックスとして公開されるため、データを簡単に見つけることができます。 この記事では、BLOB インデックス タグを使用してデータを設定、取得、および検索する方法について説明します。
階層型名前空間が有効になっているストレージ アカウントでは、BLOB インデックス タグはサポートされていません。 BLOB インデックス タグ機能と既知の問題および制限について詳しくは、「BLOB インデックス タグを使用して Azure BLOB データを管理および検索する」を参照してください。
タグを設定する
次のいずれかのメカニズムを使用してコードが BLOB データへのアクセスを認可されている場合は、インデックス タグを設定できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- BLOB のタグにアクセスするためのアクセス許可 (
t
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、BLOB インデックス タグの設定を参照してください。
次のメソッドを使用してタグを設定できます。
このメソッドで指定したタグは、既存のタグを置き換えます。 古い値を保持する必要がある場合は、ダウンロードしてこのメソッドの呼び出しに含める必要があります。 次の例はタグの設定方法を示しています。
async function setBlobTags(containerClient, blobName) {
const blockBlobClient = await containerClient.getBlockBlobClient(blobName);
const tags = {
'Sealed': 'false',
'Content': 'image',
'Date': '2022-07-18',
}
// Set tags
await blockBlobClient.setTags(tags);
}
空の JSON オブジェクトを setTags
メソッドに渡すと、すべてのタグを削除できます。
タグを取得する
次のいずれかのメカニズムを使用してコードが BLOB データへのアクセスを認可されている場合は、インデックス タグを取得できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- BLOB のタグにアクセスするためのアクセス許可 (
t
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、「BLOB インデックス タグの取得と一覧表示」を参照してください。
次のメソッドを使用してタグを取得できます。
次の例は、BLOB のタグを取得して反復処理する方法を示しています。
async function getBlobTags(containerClient, blobName) {
const blockBlobClient = await containerClient.getBlockBlobClient(blobName);
// Get tags
const result = await blockBlobClient.getTags();
for (const tag in result.tags) {
console.log(`TAG: ${tag}: ${result.tags[tag]}`);
}
}
BLOB インデックス タグを使用してデータをフィルター処理および検索する
次のいずれかのメカニズムを使用して、コードが BLOB データへのアクセスを認可されている場合は、インデックス タグを使用してデータを検索し、フィルター処理できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- タグで BLOB をフィルター処理するアクセス許可 (
f
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、「BLOB インデックス タグを使用したデータの検索」を参照してください。
Note
インデックス タグを使用して以前のバージョンを取得することはできません。 以前のバージョンのタグは BLOB インデックス エンジンに渡されません。 詳細については、条件と既知の問題に関するページを参照してください。
データのクエリが、文字列として送信された JSON オブジェクトを使用して行われます。 プロパティには文字列引用符を追加する必要はありませんが、値には文字列引用符を追加する必要があります。
次の表にいくつかのクエリ文字列を示します。
タグのクエリ文字列 (tagOdataQuery) | 説明 |
---|---|
id='1' AND project='billing' |
これら 2 つのプロパティに基づいてすべてのコンテナーで BLOB をフィルター処理します |
owner='PhillyProject' AND createdOn >= '2021-12' AND createdOn <= '2022-06' |
owner の厳密なプロパティ値と createdOn プロパティの日付の範囲に基づいて、すべてのコンテナーで BLOB をフィルター処理します。 |
@container = 'my-container' AND createdBy = 'Jill' |
フィルター処理をコンテナーと特定のプロパティで行います。 このクエリでは、createdBy がテキスト一致であり、Active Directory を介した承認一致を示すわけではありません。 |
次のメソッドを使用してデータを検索できます。
次の例では、tagOdataQuery
パラメーターに一致するすべての BLOB を検索します。
async function findBlobsByQuery(blobServiceClient, tagOdataQuery) {
// page size
const maxPageSize = 10;
let i = 1;
let marker;
const listOptions = {
includeMetadata: true,
includeSnapshots: false,
includeTags: true,
includeVersions: false
};
let iterator = blobServiceClient.findBlobsByTags(tagOdataQuery, listOptions).byPage({ maxPageSize });
let response = (await iterator.next()).value;
// Prints blob names
if (response.blobs) {
for (const blob of response.blobs) {
console.log(`Blob ${i++}: ${blob.name} - ${JSON.stringify(blob.tags)}`);
}
}
// Gets next marker
marker = response.continuationToken;
// no more blobs
if (!marker) return;
// Passing next marker as continuationToken
iterator = blobServiceClient
.findBlobsByTags(tagOdataQuery, listOptions)
.byPage({ continuationToken: marker, maxPageSize });
response = (await iterator.next()).value;
// Prints blob names
if (response.blobs) {
for (const blob of response.blobs) {
console.log(`Blob ${i++}: ${blob.name} - ${JSON.stringify(blob.tags)}`);
}
}
}
また、この関数の出力例は一致する BLOB とそのタグを、前の関数の console.log コードに基づいて示します。
Response |
---|
Blob 1: set-tags-1650565920363-query-by-tag-blob-a-1.txt - {"createdOn":"2022-01","owner":"PhillyProject","project":"set-tags-1650565920363"} |
リソース
JavaScript 用 Azure Blob Storage クライアント ライブラリを使用して、インデックス タグを使用したデータの管理と検索を行う方法の詳細については、次のリソースを参照してください。
コード サンプル
- こちらの記事 (GitHub) の JavaScript と TypeScript のコード サンプルを参照してください
REST API の操作
Azure SDK for JavaScript には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた JavaScript パラダイムを通じて REST API 操作を利用できます。 BLOB インデックス タグを管理および使用するためのクライアント ライブラリ メソッドは、次の REST API 操作を使用します。
- BloB タグを取得する (REST API)
- BloB タグを設定する (REST API)
- タグごとに BloB を検索する (REST API)