Share via


Lease Blob

この操作により Lease Blob 、書き込み操作と削除操作用の BLOB のロックが作成および管理されます。 ロック期間は、15 ~ 60 秒にすることも、無限にすることもできます。 2012-02-12 より前のバージョンでは、ロック期間は 60 秒です。

重要

バージョン 2012-02-12 以降では、Lease Blob 操作の一部の動作が以前のバージョンとは異なります。 たとえば、以前のバージョンでは、リリース後にリースを更新できます。 バージョン 2012-02-12 以降、このリース要求は失敗しますが、古いバージョンの Lease Blob を使用する呼び出しは引き続き成功します。 この操作の動作に対する変更の一覧については、この記事で後述する「解説」セクションを参照してください。

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

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

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

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

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

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

要求

要求は Lease Blob 次のように構築できます。 HTTPS が推奨されます。 myaccount をストレージ アカウントの名前に置き換えます。

PUT メソッド要求 URI HTTP バージョン
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease HTTP/1.1

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

エミュレートされたストレージ サービスに対して要求を行う場合は、エミュレーターのホスト名とAzure Blob Storage ポートを として127.0.0.1:10000指定し、その後にエミュレートされたストレージ アカウント名を指定します。

PUT メソッド要求 URI HTTP バージョン
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=lease HTTP/1.0

HTTP/1.1

詳細については、「 Azure Storage のローカル開発に Azurite エミュレーターを使用する」を参照してください。

URI パラメーター

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

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

要求ヘッダー

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

要求ヘッダー 説明
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 コンストラクター (String)」 を参照してください。
x-ms-lease-action: <acquire ¦ renew ¦ change ¦ release ¦ break> acquire: 新しいリースを要求します。 BLOB にアクティブなリースがない場合、Blob Storage は BLOB にリースを作成し、新しいリース ID を返します。 BLOB にアクティブなリースがある場合は、アクティブなリース ID を使用してのみ新しいリースを要求できます。 ただし、無期限のリースに対して負の 1 (-1) を含む新しい x-ms-lease-durationを指定できます。

renew: リースを更新します。 要求で指定されたリース ID が BLOB に関連付けられているリース ID と一致する場合は、リースを更新できます。 リースが期限切れになった場合でも、そのリースの有効期限が切れてから BLOB が変更またはリースされていない限り、リースを更新できることに注意してください。 リースを更新すると、リース期間の時間がリセットされます。

change: バージョン 2012-02-12 以降。 アクティブなリースのリース ID を変更します。 にはchange、現在のリース ID を に、新しいリース ID を にx-ms-proposed-lease-idx-ms-lease-id含める必要があります。

release: リースを解放します。 要求で指定されたリース ID が BLOB に関連付けられているリース ID と一致する場合は、リースを解放できます。 リースを解放すると、リリースが完了するとすぐに、別のクライアントが BLOB のリースをすぐに取得できます。

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

破損したリースを解放することもできます。その場合、別のクライアントが BLOB のリースをすぐに取得できます。
x-ms-lease-break-period: N 省略可能。 バージョン 2012-02-12 以降。 break 操作の場合、これはリースを中断するまでのリース保持推奨期間 (0 ~ 60 秒) です。 この中断期間は、リースの残り時間よりも短い場合にのみ使用されます。 長い場合は、リースの残り時間が使用されます。 新しいリースは、休憩期間が切れる前には使用できませんが、リースは中断期間よりも長く保持できます。 このヘッダーが操作と共に break 表示されない場合は、残りのリース期間が経過した後に固定期間のリースが中断され、無限リースが直ちに中断されます。
x-ms-lease-duration: -1 ¦ n seconds バージョン 2012-02-12 以降。 操作でのみ許可され、必要 acquire です。 リース期間 (秒単位) を指定します。無期限のリースには -1 を指定します。 無限リースでない場合は、15 ~ 60 秒を指定できます。 または changeを使用してリース期間をrenew変更することはできません。
x-ms-proposed-lease-id: <ID> バージョン 2012-02-12 以降。 の場合は acquire省略可能で、 の場合 changeは必須です。 GUID 文字列形式の推奨リース ID。 提案されたリース ID が正しい形式でない場合、Blob Storage は を返 400 (Invalid request) します。 有効な形式の一覧については、「 Guid コンストラクター (String)」 を参照してください。
Origin 省略可能。 要求の送信元を指定します。 このヘッダーが存在する場合、応答のクロス オリジン リソース共有 (CORS) ヘッダーになります。 詳細については、「 ストレージ サービスの CORS サポート 」を参照してください。
x-ms-client-request-id 省略可能。 ログ記録の構成時にログに記録される 1 kibibyte (KiB) 文字制限を使用して、クライアントによって生成された不透明な値を提供します。 このヘッダーを使用して、クライアント側のアクティビティとサーバーが受信する要求を関連付けるよう強くお勧めします。 詳細については、「Azure Blob Storageの監視」を参照してください。

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

要求本文

[なし] :

要求のサンプル

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

  
Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease HTTP/1.1  
  
Request Headers:  
x-ms-version: 2015-02-21  
x-ms-lease-action: acquire  
x-ms-lease-duration: -1  
x-ms-proposed-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5  
x-ms-date: <date>  
Authorization: SharedKey testaccount1:esSKMOYdK4o+nGTuTyeOLBI+xqnqi6aBmiW4XI699+o=  
  

Response

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

status code

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

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

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

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

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

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

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

応答ヘッダー

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

構文 説明
ETag 条件付きで操作を実行するために使用できる値が含まれています。 詳細については、「 Blob Storage 操作の条件付きヘッダーの指定 」を参照してください。

このヘッダーは、バージョン 2013-08-15 以降に対して行われた要求に対して返され ETag 、値は引用符で囲まれています。

Lease Blobこの操作では、このプロパティは変更されません。
Last-Modified BLOB が最後に更新された日時。 詳細については、「 ヘッダーでの日時値の表現」を参照してください。

BLOB の書き込み操作 (BLOB のメタデータやプロパティの更新など) を行うと、BLOB の最終更新時刻が変更されます。 Lease Blobこの操作では、このプロパティは変更されません。
x-ms-lease-id: <id> リースを要求すると、Blob Storage は一意のリース ID を返します。 リースがアクティブである間は、BLOB への書き込みや、リースの更新、変更、解放を実行するためのすべての要求にリース ID を含める必要があります。

更新操作が正常に行われた場合も、アクティブなリースのリース ID が返されます。
x-ms-lease-time: seconds リース期間のおおよその残り時間 (秒単位)。 このヘッダーは、リース中断要求が正常に処理された場合にのみ返されます。 中断が即時の場合は、 0 が返されます。
x-ms-request-id このヘッダーは、行われた要求を一意に識別し、要求のトラブルシューティングに使用できます。 詳細については、「 API 操作のトラブルシューティング」を参照してください。
x-ms-version 要求の実行に使用される Blob Storage のバージョンを示します。 このヘッダーはバージョン 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 このヘッダーを使用して、要求と対応する応答のトラブルシューティングを行うことができます。 このヘッダーの値は、要求に存在する x-ms-client-request-id 場合は、ヘッダーの値と同じです。 この値は、最大 1,024 文字の可視 ASCII 文字です。 ヘッダーが 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: 2015-02-21  
x-ms-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5  
Date: <date>  
  

承認

Azure Storage でデータ アクセス操作を呼び出す場合は、承認が必要です。 操作は、以下で Lease Blob 説明するように承認できます。

重要

Microsoft では、マネージド ID でMicrosoft Entra IDを使用して、Azure Storage への要求を承認することをお勧めします。 Microsoft Entra IDは、共有キーの承認と比較して優れたセキュリティと使いやすさを提供します。

Azure Storage では、Microsoft Entra ID を使用して BLOB データへの要求を承認することがサポートされています。 Microsoft Entra IDでは、Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、セキュリティ プリンシパルにアクセス許可を付与できます。 セキュリティ プリンシパルには、ユーザー、グループ、アプリケーション サービス プリンシパル、または Azure マネージド ID を指定できます。 セキュリティ プリンシパルは、OAuth 2.0 トークンを返すためにMicrosoft Entra IDによって認証されます。 その後、そのトークンを、Blob service に対する要求を認可するために使用できます。

Microsoft Entra IDを使用した承認の詳細については、「Microsoft Entra IDを使用して BLOB へのアクセスを承認する」を参照してください。

アクセス許可

Microsoft Entraユーザー、グループ、マネージド ID、またはサービス プリンシパルが操作を呼び出Lease Blobすために必要な RBAC アクションと、このアクションを含む最小特権の組み込み Azure RBAC ロールを次に示します。

Azure RBAC を使用したロールの割り当ての詳細については、「 BLOB データにアクセスするための Azure ロールの割り当て」を参照してください。

注釈

BLOB のリースによって、BLOB への書き込みアクセスと削除アクセスが排他的になります。 アクティブなリースのある BLOB に書き込むには、クライアントはアクティブなリースの ID を書き込み要求に含める必要があります。 リースは、リースの取得時に指定された期間に付与されます。 この期間には、15 秒から 60 秒の間、または無限の期間を指定できます。

クライアントがリースを取得すると、リース ID が返されます。 取得要求でリース ID が指定されていない場合、Blob Storage によってリース ID が生成されます。 クライアントはこのリース ID を使用して、リースの更新、リース ID の変更、またはリースの解放を行うことができます。

リースがアクティブのときは、以下の操作を行うためには要求にリース ID を含める必要があります。

リース ID が含まれていない場合、これらの操作は、 を使用して、リースされた BLOB で 412 – Precondition failed失敗します。

リース ID を含めずに、リースされた BLOB に対して次の操作が成功します。

アクティブなリースを持つ BLOB に対する操作の GET リース ID を含める必要はありません。 ただし、すべての GET 操作で条件付きリース パラメーターがサポートされており、要求に含まれるリース ID が有効な場合にのみ操作が続行されます。

コンテナーの場合、アクティブなリースを保持する BLOB を格納したコンテナーに対して、Delete Container も含めたすべての操作が許可されます。 そのため、コンテナー内の BLOB にアクティブなリースがある場合でも、コンテナーを削除できます。 コンテナーを削除する権限を制御するには、Lease Container 操作を使用します。

リースの状態

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

BLOB リース状態と状態変更トリガーを示す図。

リースは、リースがロックされているかロック解除されているか、およびその状態でリースが更新可能かどうかに基づいて、これらの状態のいずれかになります。 前の図に示したリース アクションは、状態遷移を引き起こします。

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

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

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

  • Breaking: リースは解除されましたが、中断期間が切れるまでリースはロックされ続けます。 許可される操作: release および break

  • Broken: リースが解除され、中断期間が切れています。 許可される操作: acquirerelease、および break

リースの有効期限が切れた後、BLOB が変更または再びリースされるまで、リース ID は Blob Storage によって維持されます。 クライアントは、期限切れのリース ID を使用して、リースの更新または解放を試みることができます。 操作が成功した場合は、リース ID が最後に有効になった後に BLOB が変更されていないことを意味します。

クライアントが以前のリース ID を使用してリースを更新または解放しようとして、要求が失敗した場合、クライアントのリースが最後にアクティブになった後に BLOB が変更またはリースされました。 その場合、クライアントは BLOB に対する新しいリースを要求する必要があります。

リースが明示的に解放されるのではなく期限切れになった場合、クライアントは BLOB の新しいリースを取得できるようになるまで最大 1 分待つ必要がある場合があります。 ただし、BLOB が変更されていない場合、クライアントはリース ID を使用してリースをすぐに更新できます。

スナップショットは読み取り専用であるため、BLOB スナップショットにリースを付与できないことに注意してください。 スナップショットに対するリースを要求すると、ステータス コード 400 (Bad Request) が返されます。

BLOB の Last-Modified-Time プロパティは、 の Lease Blob呼び出しによって更新されません。

次の表は、さまざまなリース状態のリースを保持する BLOB に対する操作の結果を示しています。 文字 (A)、(B)、および (C) はリース ID を表し、(X) は Blob Storage によって生成されたリース ID を表します。

BLOB におけるリース状態別使用試行の結果

アクション 使用可能 Leased (A) Breaking (A) Broken (A) Expired (A)
を使用した書き込み (A) 失敗 (412) Leased (A)、書き込み成功 Breaking (A)、書き込み成功 失敗 (412) 失敗 (412)
を使用した書き込み (B) 失敗 (412) 失敗 (409) 失敗 (412) 失敗 (412) 失敗 (412)
書き込み (リースの指定なし) Available、書き込み成功 失敗 (412) 失敗 (412) Available、書き込み成功 Available、書き込み成功
で読み取る (A) 失敗 (412) Leased (A)、読み取り成功 Breaking (A)、読み取り成功 失敗 (412) 失敗 (412)
で読み取る (B) 失敗 (412) 失敗 (409) 失敗 (409) 失敗 (412) 失敗 (412)
読み取り (リースの指定なし) Available、読み取り成功 Leased (A)、読み取り成功 Breaking (A)、読み取り成功 Broken (A)、読み取り成功 Expired (A)、読み取り成功

BLOB におけるリース状態別リース操作の結果

アクション 使用可能 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) (BLOB が変更されていない場合)。

失敗 (409) (BLOB が変更された場合)。
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)

バージョン 2012-02-12 で導入されたリース BLOB の変更

次の一覧では、バージョン 2012-02-12 で導入された動作の変更 Lease Blob を指定します。

  • リースを取得するための を Lease Blob 呼び出すには、リース期間ヘッダーを含める必要があります。 リース期間を指定せずにリースを取得しようとすると、サービスは を返します 400 Bad Request – Missing required header

  • リースを解放すると、リースを更新できなくなります。 これを行おうとすると、サービスは を返します 409 Conflict – The lease ID specified did not match the lease ID for the blob。 release を呼び出し、更新を呼び出したアプリケーションは、リリース呼び出しから を ETag 保存する必要があります。 その後、アプリケーションは、BLOB が変更されていない場合にのみリースを If-Match 取得するために、条件付きヘッダーを使用して acquire を呼び出す必要があります。

  • リースを解放すると、リースを中断できなくなります。 これを行おうとすると、サービスは を返します 409 Conflict – There is currently no lease on the blob

  • 中断操作をべき等操作 (何回実行しても結果が変わらない操作) にすることで、Breaking または Broken 状態のリースを中断できるようになりました。 以前のバージョンでは、この操作は 409 Conflict – The lease has already been broken and cannot be broken again が返されて失敗していました。 この変更により、中断期間を短縮できるようになります。 中断状態のリースを中断し、残りの中断期間よりも短い期間を含める場合は、短い期間が使用されます。

請求

価格要求は、Blob Storage REST API を介して直接、または Azure Storage クライアント ライブラリから Blob Storage API を使用するクライアントから送信できます。 これらの要求では、トランザクションあたりの料金が発生します。 トランザクションの種類は、アカウントの課金方法に影響します。 たとえば、読み取りトランザクションは、書き込みトランザクションとは異なる課金カテゴリに計上されます。 次の表は、ストレージ アカウントの種類に基づく要求の課金カテゴリ Lease Blob を示しています。

操作 ストレージ アカウントの種類 課金カテゴリ
リース BLOB (取得、リリース、更新) Premium ブロック BLOB
Standard 汎用 v2
その他の操作
リース BLOB (取得、リリース、更新) Standard 汎用 v1 操作を読み取ります。
BLOB のリース (中断、変更) Premium ブロック BLOB
Standard 汎用 v2
その他の操作
BLOB のリース (中断、変更) Standard 汎用 v1 書き込み操作

こちらもご覧ください

new-blob-lease-features-infinite-leases-smaller-lease-times-and-more.aspx)
Azure Storage への要求を承認する
状態コードとエラー コード
Blob Storage のエラー コード
Lease Container