JavaScript を使用してコンテナーのリースを作成および管理する
この記事では、JavaScript 用の Azure Storage クライアント ライブラリを使用してコンテナーのリースを作成および管理する方法を示します。 クライアント ライブラリを使用して、コンテナー リースを取得、更新、解放、および中断できます。
前提条件
- この記事の例では、JavaScript 用の Azure Blob Storage クライアント ライブラリを操作するように設定されたプロジェクトが、既にあることを前提としています。 パッケージのインストール、モジュールのインポート、データ リソースを操作するための認可済みクライアント オブジェクトの作成など、プロジェクトのセットアップについては、「Azure Blob Storage と JavaScript の概要」を参照してください。
- 認可メカニズムには、コンテナーのリースを操作するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。
コンテナー リースについて
リースは、コンテナーでの削除操作のロックを設定および管理します。 ロック期間は、15 ~ 60 秒にすることも、無限にすることもできます。 コンテナーのリースによって、コンテナーへの排他的削除アクセスが提供されます。 コンテナー リースでは、Delete Container REST API 操作を使用してコンテナーを削除する機能のみが制御されます。 アクティブなリースを使用してコンテナーを削除するには、クライアントが削除要求に有効なリース ID を含める必要があります。 他のコンテナー操作については、リース ID なしでも、リースされたコンテナーで成功します。 コンテナーの論理的な削除を有効にしている場合は、削除されたコンテナーを復元できます。
リースの状態とリースに対して特定のアクションを実行できるタイミングの詳細については、「リースの状態とアクション」を参照してください。
リース操作は BlobLeaseClient クラスによって処理されます。このクラスでは、BLOB とコンテナーのすべてのリース操作を含むクライアントが提供されます。 クライアント ライブラリを使用した BLOB リースの詳細については、「JavaScript を使用して BLOB のリースを作成および管理する」を参照してください。
リースを取得する
コンテナー リースを取得すると、コードによるコンテナーの操作に使用できるリース ID が取得されます。 コンテナーに既にアクティブなリースがある場合、新しいリースを要求するには、アクティブなリース ID を使用する必要があります。 ただし、新しいリース期間を指定できます。
リースを取得するには、BlobLeaseClient クラスのインスタンスを作成し、次のいずれかのメソッドを使用します。
次の例では、コンテナーの 30 秒間のリースを取得します。
async function acquireContainerLeaseAsync(blobContainerClient) {
const leaseClient = blobContainerClient.getBlobLeaseClient();
await leaseClient.acquireLease(30);
return leaseClient;
}
リースを更新する
要求で指定したリース ID がコンテナーに関連付けられているリース ID と一致する場合、コンテナー リースを更新できます。 リースの有効期限が切れていても、そのリースの期限切れ以降にコンテナーが変更されたり、再度リースされたりしていなければ、リースを更新できます。 リースを更新すると、リースの期間がリセットされます。
リースを更新するには、BlobLeaseClient インスタンスで次のいずれかのメソッドを使用します。
次の例では、コンテナー リースを更新します。
async function renewContainerLeaseAsync(blobContainerClient, leaseID) {
const leaseClient = blobContainerClient.getBlobLeaseClient(leaseID);
await leaseClient.renewLease();
}
リースを解放する
要求で指定したリース ID がコンテナーに関連付けられているリース ID と一致する場合、コンテナー リースを解放できます。 リースを解放すると、解放が完了した直後に、別のクライアントがそのコンテナーのリースを取得できるようになります。
BlobLeaseClient インスタンスで次のいずれかのメソッドを使用して、リースを解放できます。
次の例では、コンテナー リースを解放します。
async function releaseContainerLeaseAsync(blobContainerClient, leaseID) {
const leaseClient = blobContainerClient.getBlobLeaseClient(leaseID);
await leaseClient.releaseLease();
}
リースを中断する
コンテナーにアクティブなリースが存在する場合、コンテナー リースを中断できます。 すべての認可済みの要求によってリースを中断できます。要求で一致するリース ID を指定する必要はありません。 リースは、中断後に更新できません。また、リースを中断すると、元のリースが期限切れになるか、解放されるまで、新しいリースの取得ができません。
BlobLeaseClient インスタンスで次のいずれかのメソッドを使用して、リースを中断できます。
次の例では、コンテナー リースを中断します。
async function breakContainerLeaseAsync(blobContainerClient) {
const leaseClient = blobContainerClient.getBlobLeaseClient();
await leaseClient.breakLease();
}
リースの状態とアクション
次の図は、リースの 5 つの状態とリースの状態を変えるコマンドまたはイベントを示しています。
次の表に、5 つのリース状態の一覧を表示し、それぞれの簡単な説明を示し、特定の状態で許可されるリース アクションの一覧を表示します。 これらのリース アクションは、図に示すように状態遷移を発生させます。
リース状態 | 説明 | 許可されるリース アクション |
---|---|---|
利用可能 | リースはロックが解除されていて、取得できます。 | acquire |
Leased | リースはロックされています。 | acquire (同じリース ID のみ)、renew 、change 、release 、および break |
Expired | リース期間が終了しています。 | acquire 、renew 、release 、および break |
あり | リースは中断されていますが、中断期間が終了するまでリースが引き続きロックされます。 | release および break |
中断 | リースは中断されていて、中断期間が終了しました。 | acquire 、release 、break |
リースの有効期限が切れると、コンテナーが変更されるか再度リースされるまで、リース ID は BLOB service によって維持されます。 クライアントは、期限切れのリース ID を使用してリースを更新または解放しようとする場合があります。 要求が失敗した場合、リースが最後にアクティブだった時点以降にコンテナーが再度リースされたか、コンテナーが削除されたことをクライアントが認識します。
リースを明示的に解放するのではなく、期限切れにした場合、クライアントはそのコンテナーに対する新しいリースを取得する前に、最大 1 分間だけ待つことが必要になる場合があります。 ただし、クライアントは、有効期限切れのリース ID でリースを直ちに更新できます。
リソース
JavaScript 用 Azure Blob Storage クライアント ライブラリを使用したコンテナー リースの管理の詳細については、次のリソースを参照してください。
REST API の操作
Azure SDK for JavaScript には Azure REST API に基づいて構築されたライブラリが含まれるため、使い慣れた JavaScript パラダイムを通じて REST API 操作を利用できます。 コンテナー リースを管理するためのクライアント ライブラリ メソッドでは、次の REST API 操作が使用されます。