Lease Container

Lease Container 操作は、コンテナーでの削除操作のロックを設定および管理します。 ロック期間は、15 ~ 60 秒にすることも、無限にすることもできます。

Lease Container 操作は、次の 5 つのモードのいずれかで呼び出すことができます。

  • Acquire: 新しいリースを要求します。

  • Renew: 既存のリースを更新します。

  • Change: 既存のリースの ID を変更します。

  • Release。リースが必要なくなった場合、別のクライアントがコンテナーに対するリースをすぐに取得できるよう、リースを解放します。

  • Break。リースを終了しますが、現在のリース期間が終了するまで、別のクライアントが新しいリースを取得できないようにします。

注意

Lease Container 操作は、バージョン 2012-02-12 以降で使用できます。

Request

Lease Container 要求の構成は次のとおりです。 HTTPS が推奨されます。 myaccount をストレージ アカウントの名前に置き換えます。

Method 要求 URI HTTP バージョン
PUT https://myaccount.blob.core.windows.net/mycontainer?comp=lease&restype=container HTTP/1.1

ルート コンテナーを指定するには、コンテナー名として $root を入力します。

エミュレートされたストレージ サービス URI

エミューレートされたストレージ サービスに対する要求では、エミュレーターのホスト名と BLOB Service ポートを 127.0.0.1:10000 と指定し、その後にエミューレートされたストレージ アカウント名を指定します。

Method 要求 URI HTTP バージョン
PUT http://127.0.0.1:10000/mycontainer?comp=lease&restype=container HTTP/1.0

HTTP/1.1

詳細については、「開発とテストにAzure Storage Emulatorを使用する」を参照してください。

URI パラメーター

次の追加パラメーターを要求の URI で指定できます。

パラメーター 説明
timeout 省略可能。 timeout パラメーターは、秒単位で表されます。 詳細については、「 BLOB サービス操作のタイムアウトの設定」を参照してください

要求ヘッダー

必須要求ヘッダーと省略可能な要求ヘッダーを次の表に示します。

要求ヘッダー 説明
Authorization 必須です。 承認スキーム、アカウント名、署名を指定します。 詳細については、「Azure Storage要求を承認する」を参照してください。
Date または x-ms-date 必須です。 要求に対して協定世界時 (UTC) を指定します。 詳細については、「Azure Storage要求を承認する」を参照してください。
x-ms-version 省略可能。 この要求に使用する操作のバージョンを指定します。 詳細については、「Azure Storage サービスのバージョン管理」を参照してください。
x-ms-lease-id: <ID> リースを更新、変更、または解放する場合は必須です。

x-ms-lease-id の値は、すべての有効な GUID 文字列形式で指定できます。 有効な GUID 文字列形式の一覧については、 Guid コンストラクター (文字列) を参照してください。
x-ms-lease-action: <acquire &#124; renew &#124; change &#124; release &#124; break> acquire: 新しいリースを要求します。 コンテナーにアクティブなリースがない場合、BLOB Service はそのコンテナーのリースを作成し、新しいリース ID を返します。 コンテナーにアクティブなリースがある場合、新しいリースを要求するには、アクティブなリース ID を使用する必要があります。ただし、新しい x-ms-lease duration を指定できます。たとえば、リースを無期限にする場合は -1 を指定します。

renew: リースを更新します。 要求で指定したリース ID がコンテナーに関連付けられているリース ID と一致する場合、リースを更新できます。 リースの有効期限が切れていても、そのリースの期限切れ以降にコンテナーが再度リースされていなければ、リースを更新できます。 リースを更新すると、リース期間の時間がリセットされます。

change: アクティブなリースのリース ID を変更します。 change には、x-ms-lease-id の現在のリース ID と x-ms-proposed-lease-id の新しいリース ID を含める必要があります。

release: リースを解放します。 要求で指定したリース ID がコンテナーに関連付けられているリース ID と一致する場合、リースを解放できます。 リースを解放すると、解放が完了した直後から、別のクライアントがそのコンテナーのリースを取得できるようになります。

break: コンテナーにアクティブなリースが存在する場合、リースを中断します。 いったん中断したリースは更新できません。 承認済みの要求によってリースを中断できます。要求で一致するリース ID を指定する必要はありません。 リースを中断した場合、リース中断期間はそのまま経過します。その間、そのコンテナーに対して breakrelease 以外のリース操作は実行できません。 リースが正常に中断されると、応答で新しいリースを取得できるようになるまでの時間 (秒単位) が示されます。

中断されたリースを解放することもできます。 解放されたコンテナー リースは、クライアントが直ちに取得できます。
x-ms-lease-break-period: N 省略可能。 break 操作の場合は、リースを中断するまでのリース保持推奨期間 (0 ~ 60 秒) です。 この中断期間は、リースの残り時間よりも短い場合にのみ使用されます。 長い場合は、リースの残り時間が使用されます。 中断期間が終了するまで新しいリースは使用できなくなりますが、中断期間よりも長い期間リースが保持される場合があります。 break 操作でこのヘッダーが含まれていない場合、固定期間のリースは残りのリース期間が経過してから中断され、無限リースは即座に中断されます。
x-ms-lease-duration: -1 &#124; N acquire の場合は必須。 リース期間 (秒単位) を指定します。無期限のリースには -1 を指定します。 無限リースでない場合は、15 ~ 60 秒を指定できます。 renew または change を使用して、リース期間を変更することはできません。
x-ms-proposed-lease-id: <ID> acquire の場合は省略可能。change の場合は必須。 GUID 文字列形式の推奨リース ID。 推奨リース ID が正しい形式ではない場合、BLOB サービスから 400 (Invalid request) が返されます。 有効な GUID 文字列形式の一覧については、 Guid コンストラクター (文字列) を参照してください。
Origin 省略可能。 要求の送信元を指定します。 このヘッダーが存在する場合、応答のクロス オリジン リソース共有ヘッダーになります。 詳細については、Storage サービスの CORS サポートを参照してください。
x-ms-client-request-id 省略可能。 ストレージ分析ログが有効になっているときに分析ログに記録される 1 KiB 文字の制限を持つクライアント生成の不透明な値を提供します。 クライアント側のアクティビティをサーバーが受信した要求と関連付けるには、このヘッダーを使用することが強く推奨されます。 詳細については、「Storage Analyticsログ記録と Azure ログ記録: ログを使用したStorage要求の追跡」を参照してください。

この操作では、条件ヘッダーを使用して、指定した条件を満たした場合にのみ操作を実行することもできます。 詳細については、「BLOB サービス操作の条件ヘッダーの指定」を参照してください。

要求本文

[なし] :

要求のサンプル

次の要求例は、リースを取得する方法を示しています。

  
Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=lease HTTP/1.1  
  
Request Headers:  
x-ms-version: 2012-02-12  
x-ms-lease-action: acquire  
x-ms-lease-duration: -1  
x-ms-proposed-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5  
x-ms-date: Thu, 26 Jan 2012 23:30:18 GMT  
Authorization: SharedKey testaccount1:esSKMOYdK4o+nGTuTyeOLBI+xqnqi6aBmiW4XI699+o=  
  

Response

応答には、HTTP 状態コードおよび一連の応答ヘッダーが含まれています。

状態コード

リース操作に対して返される成功ステータス コードは次のとおりです。

  • Acquire: 操作が正常に終了すると、ステータス コード 201 (Created) が返されます。

  • Renew: 操作が正常に終了すると、ステータス コード 200 (OK) が返されます。

  • Change: 操作が正常に終了すると、ステータス コード 200 (OK) が返されます。

  • Release: 操作が正常に終了すると、ステータス コード 200 (OK) が返されます。

  • Break: 操作が正常に終了すると、ステータス コード 202 (Accepted) が返されます。

状態コードの詳細については、「 状態コードとエラー コード」を参照してください

レスポンス ヘッダー

この操作の応答には、次のヘッダーが含まれています。 応答に追加の標準 HTTP ヘッダーが含まれる場合もあります。 すべての標準ヘッダーは 、HTTP/1.1 プロトコル仕様に準拠しています

構文 説明
ETag コンテナーの ETag。 このヘッダーは、バージョン 2013-08-15 以降に対する要求に対して返されます。ETag の値は引用符で囲まれます。 バージョン 2013-08-15 以降に対する Lease Container 操作では、このプロパティは変更されませんが、2013-08-15 より前のバージョンでは変更されます。
Last-Modified このヘッダーは、バージョン 2013-08-15 以降に対して行われた要求に対して返されます。 コンテナーが最後に更新された日時を返します。 日付形式は RFC 1123 に従います。 詳細については、「 ヘッダー内のDate-Time値の表現」を参照してください。

コンテナーまたはそのプロパティやメタデータを変更する操作 (コンテナーのアクセス許可の設定など) を行うと、最終更新時刻が更新されます。 BLOB に対する操作は、コンテナーの最終更新時刻に影響しません。 バージョン 2013-08-15 以降に対する Lease Container 操作では、このプロパティは変更されませんが、2013-08-15 より前のバージョンでは変更されます。
x-ms-lease-id: <id> リースを要求すると、BLOB サービスから一意のリース ID が返されます。 リースがアクティブである間は、コンテナーの削除や、リースの更新、変更、解放を実行するためのすべての要求にリース ID を含める必要があります。

更新操作が正常に行われた場合も、アクティブなリースのリース ID が返されます。
x-ms-lease-time: seconds リース期間のおおよその残り時間 (秒単位)。 このヘッダーは、リース中断要求が正常に処理された場合にのみ返されます。 即時中断の場合は 0 が返されます。
x-ms-request-id このヘッダーは要求を一意に識別するので、要求のトラブルシューティングに使用できます。 詳細については、「 API 操作のトラブルシューティング」を参照してください。
x-ms-version 要求の実行に使用する BLOB サービスのバージョンを示します。 このヘッダーはバージョン 2009-09-19 以降で行った要求に対して返されます。
Date サービスによって生成される、応答の開始時刻を示す UTC 日付/時刻値。
Access-Control-Allow-Origin 要求に Origin ヘッダーが含まれ、照合ルールで CORS が有効な場合に返されます。 このヘッダーは、一致の場合にオリジン要求ヘッダーの値を返します。
Access-Control-Expose-Headers 要求に Origin ヘッダーが含まれ、照合ルールで CORS が有効な場合に返されます。 要求のクライアントや発行元に公開される応答ヘッダーの一覧を返します。
Access-Control-Allow-Credentials 要求に Origin ヘッダーが含まれ、すべてのオリジンを許可しない照合ルールで CORS が有効な場合に返されます。 このヘッダーは true に設定されます。
x-ms-client-request-id このヘッダーは、要求と対応する応答のトラブルシューティングに使用できます。 このヘッダーの値は、要求に存在し、値が最大 1024 の ASCII 文字で表示される場合、ヘッダーの値 x-ms-client-request-id と等しくなります。 ヘッダーが x-ms-client-request-id 要求に存在しない場合、このヘッダーは応答に存在しません。

応答本文

[なし] :

応答のサンプル

次に示すのは、リース取得要求に対する応答の例です。

Response Status:  
HTTP/1.1 201 Created  
  
Response Headers:  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402  
x-ms-version: 2012-02-12  
x-ms-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5  
Date: Thu, 26 Jan 2012 23:30:18 GMT  
  

承認

この操作を呼び出すことができるのはアカウント所有者のみです。

解説

コンテナーのリースによって、コンテナーへの排他的削除アクセスが提供されます。 コンテナー リースは、 コンテナーの削除 操作を使用してコンテナーを削除する機能のみを制御します。 アクティブなリースを使用してコンテナーを削除するには、クライアントが削除要求に有効なリース ID を含める必要があります。 リース ID が含まれない場合、操作は 412 (Precondition failed) で失敗します。 他のコンテナー操作については、リース ID を含めなくても、リースされたコンテナーで成功します。 リース期間は、リースの取得時に 15 秒~ 1 分の範囲内で指定できます。また、期間を無限にすることもできます。

クライアントがリースを取得すると、リース ID が返されます。 取得要求でリース ID が指定されていない場合、BLOB サービスはリース ID を生成します。 クライアントは、このリース ID を使用して、リースの更新、リース ID の変更、またはリースの解放を実行できます。 次の図は、リースの 5 つの状態とリースの状態を変えるコマンドまたはイベントを示しています。

次の図は、リースの 5 つの状態とリースの状態を変えるコマンドまたはイベントを示しています。

Container lease states and state change triggers

リースの状態

リースがロックされているかまたはロック解除されているか、また、その状態でリースを更新できるかどうかによって、リースには 5 つの状態があります。 前の各リース操作によって状態遷移が発生します。

更新の状態 ロックされたリース ロック解除されたリース
再生可能なリース Leased 有効期限切れ
非再生可能なリース あり Broken、Available
  • Available: リースはロック解除されており、リースを取得できます。 許可されるアクション: acquire.

  • Leased: リースはロックされています。 許可される操作: acquire (同じリース ID のみ)、renewchangerelease、および break

  • Expired: リース期間の有効期限が切れています。 許可される操作: acquirerenewrelease、および break

  • Breaking: リースは中断されていますが、中断期間が終了するまでリースは引き続きロックされます。 許可される操作: release および break

  • Broken: リースは中断されており、中断期間が終了しました。 許可される操作: acquirerelease、および break

リース ID は、コンテナー リースの有効期限が切れた後は BLOB Service で保持されます クライアントは、有効期限切れのリース ID を使用してリースを更新または解放できます。 以前のリース ID を使用して有効期限切れのリースの更新や解放を試行し、要求が失敗した場合は、リースが最後にアクティブであったとき以降にコンテナーが再度リースされているか、削除されていることになります。 リースを明示的に解放するのではなく、期限切れにした場合、クライアントはそのコンテナーに対する新しいリースを取得する前に、最大 1 分間だけ待つことが必要になる場合があります。 ただし、クライアントは、有効期限切れのリース ID でリースを直ちに更新できます。

コンテナーの Last-Modified-Time プロパティは、Lease Container を呼び出していも更新されません。

次の表は、さまざまなリース状態のリースが含まれるコンテナーにおけるアクションの結果を示しています。 文字 (A)、(B)、(C) はリース ID を表し、(X) は BLOB サービスによって生成されたリース ID を表します。

コンテナーにおけるリース状態別の使用試みの結果

アクション 利用可能 Leased (A) Breaking (A) Broken (A) Expired (A)
(A) を使用した削除 失敗 (412) リースされた (A)、削除成功 中断中の (A)、削除成功 失敗 (412) 失敗 (412)
(B) を使用した削除 失敗 (412) 失敗 (409) 失敗 (412) 失敗 (412) 失敗 (412)
削除、リースの指定なし 使用可能、削除成功 失敗 (412) 失敗 (412) 使用可能、削除成功 使用可能、削除成功
(A) を使用した他の操作 失敗 (412) リースされた (A)、操作成功 中断中の (A)、操作成功 失敗 (412) 失敗 (412)
(B) を使用した他の操作 失敗 (412) 失敗 (409) 失敗 (409) 失敗 (412) 失敗 (412)
リースが指定されていない 使用可能、操作成功 リースされた (A)、操作成功 中断中の (A)、操作成功 中断された (A)、操作成功 有効期限切れの (A)、操作成功

コンテナーにおけるリース状態別のリース操作の結果

アクション 利用可能 Leased (A) Breaking (A) Broken (A) Expired (A)
Acquire (推奨リース ID なし) Leased (X) 失敗 (409) 失敗 (409) Leased (X) Leased (X)
Acquire (A) Leased (A) Leased (A)、新しい期間 失敗 (409) Leased (A) Leased (A)
Acquire (B) Leased (B) 失敗 (409) 失敗 (409) Leased (B) Leased (B)
Break、期間 = 0 失敗 (409) Broken (A) Broken (A) Broken (A) Broken (A)
Break、期間>0 失敗 (409) Breaking (A) Breaking (A) Broken (A) Broken (A)
Change、(A) から (B) 失敗 (409) Leased (B) 失敗 (409) 失敗 (409) 失敗 (409)
Change、(B) から (A) 失敗 (409) Leased (A) 失敗 (409) 失敗 (409) 失敗 (409)
Change、(B) から (C) 失敗 (409) 失敗 (409) 失敗 (409) 失敗 (409) 失敗 (409)
Renew (A) 失敗 (409) Leased (A)、有効期限の時間のリセット 失敗 (409) 失敗 (409) Leased (A)
Renew (B) 失敗 (409) 失敗 (409) 失敗 (409) 失敗 (409) 失敗 (409)
Release (A) 失敗 (409) 利用可能 利用可能 利用可能 利用可能
Release (B) 失敗 (409) 失敗 (409) 失敗 (409) 失敗 (409) 失敗 (409)
有効期限切れ 利用可能 Expired (A) Broken (A) Broken (A) Expired (A)

関連項目

BLOB の新しいリース機能: 無限リース、短期間のリースなど
Azure Storageへの要求を承認する
ステータス コードとエラー コード
BLOB サービスのエラー コード
Lease Blob