추가 블록Append Block

Append Block작업은 기존 추가 blob의 끝에 새 데이터 블록을 커밋합니다.The Append Block operation commits a new block of data to the end of an existing append blob.

Append Block 설정 된으로 blob을 만든 경우에만 작업을 수행할 수 x-ms-blob-type AppendBlob 있습니다.The Append Block operation is permitted only if the blob was created with x-ms-blob-type set to AppendBlob. Append Block는 버전 2015-02-21 이상 에서만 지원 됩니다.Append Block is supported only on version 2015-02-21 version or later.

요청Request

다음과 같이 Append Block 요청을 생성할 수 있습니다.The Append Block request may be constructed as follows. HTTPS를 사용하는 것이 좋습니다.HTTPS is recommended. myaccount를 사용자의 저장소 계정으로 바꿉니다.Replace myaccount with the name of your storage account:

PUT 메서드 요청 URIPUT Method Request URI HTTP 버전HTTP Version
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=appendblock HTTP/1.1HTTP/1.1

에뮬레이트된 저장소 서비스에 대해 요청을 수행할 때는 에뮬레이터 호스트 이름 및 Blob 서비스 포트를 127.0.0.1:10000으로 지정하고 뒤에 에뮬레이트된 저장소 계정 이름을 붙입니다.When making a request against the emulated storage service, specify the emulator hostname and Blob service port as 127.0.0.1:10000, followed by the emulated storage account name:

PUT 메서드 요청 URIPUT Method Request URI HTTP 버전HTTP Version
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=appendblock HTTP/1.1HTTP/1.1

자세한 내용은 개발 및 테스트에 Azure Storage 에뮬레이터 사용을 참조 하세요.For more information, see Using the Azure Storage Emulator for Development and Testing.

URI 매개 변수URI parameters

매개 변수Parameter 설명Description
시간 제한timeout 선택 사항입니다.Optional. 시간 초과 매개 변수는 초 단위로 표현됩니다.The timeout parameter is expressed in seconds. 자세한 내용은 Blob 서비스 작업에 대 한 시간 제한 설정을 참조 하세요.For more information, see Setting Timeouts for Blob Service Operations.

요청 헤더Request Headers

다음 표에서는 필수 요청 헤더와 선택적 요청 헤더에 대해 설명합니다.The following table describes required and optional request headers.

요청 헤더Request Header 설명Description
Authorization 필수 요소.Required. 인증 체계, 계정 이름 및 서명을 지정 합니다.Specifies the authorization scheme, account name, and signature. 자세한 내용은 Azure Storage에 요청 권한 부여를 참조 하세요.See Authorize requests to Azure Storage for more information.
Date 또는 x-ms-dateDate or x-ms-date 필수 요소.Required. 요청에 대한 UTC(협정 세계시)를 지정합니다.Specifies the Coordinated Universal Time (UTC) for the request. 자세한 내용은 Azure Storage에 요청 권한 부여를 참조 하세요.For more information, see Authorize requests to Azure Storage.
x-ms-version 모든 권한이 부여 된 요청에 필요 합니다.Required for all authorized requests. 이 요청에 사용할 작업의 버전을 지정합니다.Specifies the version of the operation to use for this request. 자세한 내용은 Azure Storage Services에 대 한 버전 관리를 참조 하세요.For more information, see Versioning for the Azure Storage Services.
Content-Length 필수 요소.Required. 블록 콘텐츠의 길이(바이트 수)입니다.The length of the block content in bytes. 블록의 크기는 4 MiB 보다 작거나 같아야 합니다.The block must be less than or equal to 4 MiB in size.

길이가 제공되지 않은 경우 작업이 실패하고 상태 코드 411(길이 필요)이 나타납니다.When the length is not provided, the operation will fail with the status code 411 (Length Required).
Content-MD5 선택 사항입니다.Optional. 블록 콘텐츠의 MD5 해시입니다.An MD5 hash of the block content. 이 해시는 전송 중 블록의 무결성을 확인하는 데 사용됩니다.This hash is used to verify the integrity of the block during transport. 이 헤더를 지정하면 저장소 서비스가 도착한 콘텐츠의 해시를 이 헤더 값과 비교합니다.When this header is specified, the storage service compares the hash of the content that has arrived with this header value.

이 MD5 해시는 blob에 저장되지 않습니다.Note that this MD5 hash is not stored with the blob.

두 해시가 일치하지 않으면 작업이 실패하고 오류 코드 400(잘못된 요청)이 표시됩니다.If the two hashes do not match, the operation will fail with error code 400 (Bad Request).
x-ms-content-crc64 선택 사항입니다.Optional. 추가 블록 콘텐츠의 CRC64 해시입니다.A CRC64 hash of the append block content. 이 해시는 전송 중에 추가 블록의 무결성을 확인 하는 데 사용 됩니다.This hash is used to verify the integrity of the append block during transport. 이 헤더를 지정하면 저장소 서비스가 도착한 콘텐츠의 해시를 이 헤더 값과 비교합니다.When this header is specified, the storage service compares the hash of the content that has arrived with this header value.

이 CRC64 해시는 blob과 함께 저장 되지 않습니다.Note that this CRC64 hash is not stored with the blob.

두 해시가 일치하지 않으면 작업이 실패하고 오류 코드 400(잘못된 요청)이 표시됩니다.If the two hashes do not match, the operation will fail with error code 400 (Bad Request).

Content-MD5및 헤더가 모두 x-ms-content-crc64 있는 경우 요청이 실패 하 고 400 (잘못 된 요청)이 표시 됩니다.If both Content-MD5 and x-ms-content-crc64 headers are present, the request will fail with a 400 (Bad Request).

이 헤더는 버전 2019-02-02 이상에서 지원 됩니다.This header is supported in versions 2019-02-02 or later.
x-ms-encryption-scope 선택 사항입니다.Optional. 요청 콘텐츠를 암호화 하는 데 사용할 암호화 범위를 나타냅니다.Indicates the encryption scope to use to encrypt the request contents. 이 헤더는 버전 2019-02-02 이상에서 지원 됩니다.This header is supported in versions 2019-02-02 or later.
x-ms-lease-id:<ID> blob에 활성 임대가 포함된 경우 필수입니다.Required if the blob has an active lease. 활성 임대가 포함된 blob에서 이 작업을 수행하려면 이 헤더에 대해 유효한 임대 ID를 지정합니다.To perform this operation on a blob with an active lease, specify the valid lease ID for this header.
x-ms-client-request-id 선택 사항입니다.Optional. 저장소 분석 로깅을 사용 하도록 설정한 경우 분석 로그에 기록 되는 1 KiB 문자 제한이 있는 클라이언트 생성 불투명 값을 제공 합니다.Provides a client-generated, opaque value with a 1 KiB character limit that is recorded in the analytics logs when storage analytics logging is enabled. 이 헤더를 사용하면 클라이언트 쪽 작업을 서버에서 받은 요청과 관련시키는 것이 좋습니다.Using this header is highly recommended for correlating client-side activities with requests received by the server. 자세한 내용은 스토리지 분석 로깅Azure 로깅: 로그를 사용 하 여 저장소 요청 추적을 참조 하세요.For more information, see About Storage Analytics Logging and Azure Logging: Using Logs to Track Storage Requests.
x-ms-blob-condition-maxsize 선택적 조건부 헤더입니다.Optional conditional header. 추가 blob에 허용 되는 최대 길이 (바이트)입니다.The max length in bytes permitted for the append blob. 작업으로 Append Block 인해 blob이 해당 제한을 초과 하는 경우 또는 blob 크기가이 헤더에 지정 된 값 보다 이미 큰 경우 요청은 실패 하 고 MaxBlobSizeConditionNotMet 오류 (HTTP 상태 코드 412 – 전제 조건 실패)가 발생 합니다.If the Append Block operation would cause the blob to exceed that limit or if the blob size is already greater than the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error (HTTP status code 412 – Precondition Failed).
x-ms-blob-condition-appendpos 작업에만 사용 되는 선택적 조건부 헤더입니다 Append Block .Optional conditional header, used only for the Append Block operation. 비교할 바이트 오프셋을 나타내는 숫자입니다.A number indicating the byte offset to compare. Append Block는 append 위치가이 숫자와 동일한 경우에만 성공 합니다.Append Block will succeed only if the append position is equal to this number. 그렇지 않은 경우 해당 요청은 AppendPositionConditionNotMet 오류 (HTTP 상태 코드 412 – 전제 조건 실패)와 함께 실패 합니다.If it is not, the request will fail with the AppendPositionConditionNotMet error (HTTP status code 412 – Precondition Failed).

이 작업은 지정 된 조건이 충족 될 경우에만 API가 성공 하도록 추가 조건부 헤더 사용을 지원 합니다.This operation supports the use of additional conditional headers to ensure that the API succeeds only if a specified condition is met. 자세한 내용은 Blob 서비스 작업의 조건부 헤더 지정을 참조하세요.For more information, see Specifying Conditional Headers for Blob Service Operations.

요청 헤더 (고객이 제공한 암호화 키)Request Headers (Customer-provided encryption keys)

버전 2019-02-02부터, 고객이 제공한 키로 blob을 암호화 하는 요청에 다음 헤더를 지정할 수 있습니다.Beginning with version 2019-02-02, the following headers may be specified on the request to encrypt a blob with a customer-provided key. 고객이 제공한 키 (및 해당 헤더 집합)를 사용 하는 암호화는 선택 사항입니다.Encryption with a customer-provided key (and the corresponding set of headers) is optional.

요청 헤더Request header 설명Description
x-ms-encryption-key 필수 요소.Required. B a s e 64로 인코딩된 AES-256 암호화 키입니다.The Base64-encoded AES-256 encryption key.
x-ms-encryption-key-sha256 필수 요소.Required. 암호화 키의 b a s e 64로 인코딩된 SHA256 해시입니다.The Base64-encoded SHA256 hash of the encryption key.
x-ms-encryption-algorithm: AES256 필수 요소.Required. 암호화에 사용할 알고리즘을 지정 합니다.Specifies the algorithm to use for encryption. 이 헤더의 값은 이어야 합니다 AES256 .The value of this header must be AES256.

요청 본문Request Body

요청 본문에는 블록 콘텐츠가 포함됩니다.The request body contains the content of the block.

샘플 요청Sample Request

Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=appendblock  HTTP/1.1  
  
Request Headers:  
x-ms-version: 2015-02-21  
x-ms-date: <date>  
x-ms-blob-condition-appendpos: 2097152  
x-ms-blob-condition-maxsize: 4194304  
Authorization: SharedKey myaccount:J4ma1VuFnlJ7yfk/Gu1GxzbfdJloYmBPWlfhZ/xn7GI=  
Content-Length: 1048  
If-Match: "0x8CB172A360EC34B"  
  

응답Response

응답에는 HTTP 상태 코드 및 응답 헤더 집합이 포함되어 있습니다.The response includes an HTTP status code and a set of response headers.

상태 코드Status Code

작업에 성공하면 상태 코드 201(만들어짐)이 반환됩니다.A successful operation returns status code 201 (Created).

상태 코드에 대 한 자세한 내용은 상태 및 오류 코드를 참조 하세요.For information about status codes, see Status and Error Codes.

응답 헤더Response Headers

이 작업의 응답에는 다음과 같은 헤더가 포함됩니다.The response for this operation includes the following headers. 응답에는 추가 표준 HTTP 헤더가 포함될 수도 있습니다.The response may also include additional standard HTTP headers. 모든 표준 헤더는 HTTP/1.1 프로토콜 사양을따릅니다.All standard headers conform to the HTTP/1.1 protocol specification.

응답 헤더Response header DescriptionDescription
ETag ETag에는 클라이언트가 If Match 요청 헤더를 사용 하 여 조건부 PUT 작업을 수행 하는 데 사용할 수 있는 따옴표 안에 포함 된 값이 포함 됩니다.The ETag contains a value in quotes that the client can use to perform conditional PUT operations by using the If-Match request header.
Last-Modified Blob을 마지막으로 수정한 날짜/시간입니다.The date/time that the blob was last modified. 날짜 형식은 RFC 1123을 따릅니다.The date format follows RFC 1123. 자세한 내용은 헤더의 날짜-시간 값 표현을 참조 하십시오.For more information, see Representation of Date-Time Values in Headers.

Blob의 메타 데이터 또는 속성에 대 한 업데이트를 포함 하 여 blob에 대 한 모든 쓰기 작업은 blob의 마지막 수정 시간을 변경 합니다.Any write operation on the blob (including updates on the blob's metadata or properties) changes the last-modified time of the blob.
Content-MD5 이 헤더는 클라이언트가 메시지 콘텐츠 무결성을 확인할 수 있도록 반환됩니다.This header is returned so that the client can check for message content integrity. 이 헤더 값은 Blob 서비스에 의해 계산되며, 요청 헤더에 지정된 것과 동일한 값일 필요는 없습니다.The value of this header is computed by the Blob service; it is not necessarily the same value specified in the request headers. 2019-02-02 이상 버전의 경우이 헤더는 요청에이 헤더가 있는 경우에만 반환 됩니다.For versions 2019-02-02 or later, This header is only returned when the request has this header.
x-ms-content-crc64 버전 2019-02-02 이상에서는 클라이언트가 메시지 콘텐츠 무결성을 확인할 수 있도록이 헤더가 반환 됩니다.For versions 2019-02-02 or later, This header is returned so that the client can check for message content integrity. 이 헤더 값은 Blob 서비스에 의해 계산되며, 요청 헤더에 지정된 것과 동일한 값일 필요는 없습니다.The value of this header is computed by the Blob service; it is not necessarily the same value specified in the request headers.

이 헤더는 요청에 헤더가 없는 경우 반환 됩니다 Content-md5 .This header is returned when Content-md5 header is not present in the request.
x-ms-request-id 이 헤더는 수행된 요청을 고유하게 식별하며, 이 헤더를 사용해서 요청 문제를 해결할 수 있습니다.This header uniquely identifies the request that was made and can be used for troubleshooting the request. 자세한 내용은 API 작업 문제 해결을 참조하세요.For more information, see Troubleshooting API Operations.
x-ms-version 요청을 실행하는 데 사용되는 Blob 서비스의 버전을 나타냅니다.Indicates the version of the Blob service used to execute the request. 이 헤더는 2009-09-19 버전 이상에 대해 수행된 요청에 대해 반환됩니다.This header is returned for requests made against version 2009-09-19 and later.
Date 응답이 시작된 시간을 나타내는 서비스에서 생성된 UTC 날짜/시간 값입니다.A UTC date/time value generated by the service that indicates the time at which the response was initiated.
x-ms-blob-append-offset 이 응답 헤더는 추가 작업에 대해서만 반환 됩니다.This response header is returned only for append operations. 블록이 커밋된 오프셋 (바이트)을 반환 합니다.It returns the offset at which the block was committed, in bytes.
x-ms-blob-committed-block-count Blob에 있는 커밋된 블록 수입니다.The number of committed blocks present in the blob. 더 많은 추가 작업을 수행할 수 있는 방법을 제어 하는 데 사용할 수 있습니다.This can be used to control how many more appends can be done.
x-ms-request-server-encrypted: true/false 2015-12-11 이상 버전Version 2015-12-11 or newer. true지정 된 알고리즘을 사용 하 여 요청의 내용이 성공적으로 암호화 되 면이 헤더의 값이로 설정 되 고, 그렇지 않으면로 설정 됩니다 false .The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise.
x-ms-encryption-key-sha256 2019-02-02 이상 버전Version 2019-02-02 or newer. 요청에서 암호화에 고객이 제공한 키를 사용 하 여 요청의 콘텐츠가 제공 된 키를 사용 하 여 성공적으로 암호화 되었는지 확인할 수 있는 경우이 헤더가 반환 됩니다.This header is returned if the request used a customer-provided key for encryption, so the client can ensure the contents of the request are successfully encrypted using the provided key.
x-ms-encryption-scope 2019-02-02 이상 버전Version 2019-02-02 or newer. 요청에서 암호화 범위를 사용 하 여 요청의 콘텐츠가 암호화 범위를 사용 하 여 성공적으로 암호화 되었는지 확인할 수 있도록 요청에서 암호화 범위를 사용 하는 경우이 헤더가 반환 됩니다.This header is returned if the request used an encryption scope, so the client can ensure the contents of the request are successfully encrypted using the encryption scope.
x-ms-client-request-id 이 헤더를 사용 하 여 요청 및 해당 응답의 문제를 해결할 수 있습니다.This header can be used to troubleshoot requests and corresponding responses. 이 헤더의 값은 요청에 있는 경우 헤더의 값과 같으며 x-ms-client-request-id , 값은 최대 1024 표시 ASCII 문자입니다.The value of this header is equal to the value of the x-ms-client-request-id header if it is present in the request and the value is at most 1024 visible ASCII characters. x-ms-client-request-id요청에 헤더가 없는 경우이 헤더는 응답에 표시 되지 않습니다.If the x-ms-client-request-id header is not present in the request, this header will not be present in the response.

샘플 응답Sample Response

Response Status:  
HTTP/1.1 201 Created  
  
Response Headers:  
Transfer-Encoding: chunked  
x-ms-content-crc64: 77uWZTolTHU  
Date: <date>  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  
x-ms-blob-append-offset: 2097152  
x-ms-blob-committed–block-count: 1000  
  

권한 부여Authorization

이 작업은 계정 소유자 또는 이 blob 또는 해당 콘텐츠에 쓰기 권한이 있는 공유 액세스 서명을 갖고 있는 모든 사용자가 호출할 수 있습니다.This operation can be called by the account owner and by anyone with a Shared Access Signature that has permission to write to this blob or its container.

설명Remarks

추가 블록 은 기존 추가 blob의 끝에 블록을 업로드 합니다.Append Block uploads a block to the end of an existing append blob. 서버에서 호출이 성공 하면 데이터 블록을 즉시 사용할 수 있습니다.The block of data is immediately available once the call succeeds on the server. 블록의 크기는 최대 4 MiB 일 수 있습니다.A block may be up to 4 MiB in size.

Append Blockblob이 이미 있는 경우에만 성공 합니다.Append Block succeeds only if the blob already exists.

을 사용 하 여 업로드 Append Block 된 blob은 블록 id를 노출 하지 않으므로 추가 blob에 대해 Get block List 를 호출할 수 없습니다.Blobs uploaded using Append Block do not expose block IDs, so you cannot call Get Block List against an append blob. 이렇게 하면 409 오류가 발생 합니다.Doing so results in a 409 error.

요청에 다음과 같은 선택적 조건부 헤더를 지정할 수 있습니다.The following optional conditional headers can be specified on the request:

  1. x-ms-blob-condition-appendpos: 클라이언트에서 블록을 추가할 것으로 예상 하는 바이트 오프셋으로이 헤더를 설정할 수 있습니다.x-ms-blob-condition-appendpos: You can set this header to a byte offset at which the client expects to append the block. 현재 오프셋이 클라이언트에서 지정한 것과 일치 하는 경우에만 요청이 성공 합니다.The request succeeds only if the current offset matches that specified by the client. 그렇지 않으면 AppendPositionConditionNotMet 오류가 발생 하 여 요청이 실패 합니다 (HTTP 상태 코드 412 – 전제 조건이 실패 함).Otherwise, the request fails with the AppendPositionConditionNotMet error (HTTP status code 412 – Precondition Failed).

    단일 기록기를 사용 하는 클라이언트는이 헤더를 사용 하 여 네트워크 오류에도 불구 하 고 추가 블록 작업이 성공 했는지 여부를 확인할 수 있습니다.Clients using a single writer may use this header to determine whether when an Append Block operation succeeded despite network failure.

  2. x-ms-blob-condition-maxsize: 클라이언트는이 헤더를 사용 하 여 추가 작업이 blob 크기를 예상 하는 최대 크기 (바이트)를 초과 하지 않도록 합니다.x-ms-blob-condition-maxsize: Clients can use this header to ensure that append operations do not increase the blob size beyond an expected maximum size in bytes. 조건이 실패 하면 요청이 실패 하 고 MaxBlobSizeConditionNotMet 오류가 발생 합니다 (HTTP 상태 코드 412 – 전제 조건이 실패 함).If the condition fails, the request will fail with MaxBlobSizeConditionNotMet error (HTTP status code 412 – Precondition Failed).

각 블록의 크기는 최대 4 MiB까지 다를 수 있습니다.Each block can be a different size, up to a maximum of 4 MiB. 각 추가 blob에 대 한 최대 5만 추가가 허용 됩니다.A maximum of 50,000 appends are permitted for each append blob. 따라서 추가 blob의 최대 크기는 195 GiB (MiB X 5만 블록 4 개) 보다 약간 더 큰 것입니다.The maximum size of an append blob is therefore slightly more than 195 GiB (4 MiB X 50,000 blocks). 4 MiB 보다 큰 블록을 업로드 하려고 시도 하면 서비스에서 HTTP 상태 코드 413 (요청 엔터티 너무 큼)을 반환 합니다.If you attempt to upload a block that is larger than 4 MiB, the service returns HTTP status code 413 (Request Entity Too Large). 또한 서비스에서 허용된 최대 블록 크기(바이트)가 포함된 추가 오류 정보가 응답으로 반환됩니다.The service also returns additional information about the error in the response, including the maximum block size permitted in bytes. 5만 개 보다 많은 블록을 업로드 하려고 시도 하면 서비스에서 BlockCountExceedsLimit 오류 (HTTP 상태 코드 409 – 충돌)를 반환 합니다.If you attempt to upload more than 50,000 blocks, the service returns the BlockCountExceedsLimit error (HTTP status code 409 – Conflict).

blob에 활성 임대가 포함된 경우 클라이언트가 blob에 블록을 기록하려면 요청에 유효한 임대 ID를 지정해야 합니다.If the blob has an active lease, the client must specify a valid lease ID on the request in order to write a block to the blob. 클라이언트가 임대 ID를 지정하지 않거나 잘못된 임대 ID를 지정할 경우 Blob service가 상태 코드 412(전제 조건 실패)를 반환합니다.If the client does not specify a lease ID, or specifies an invalid lease ID, the Blob service returns status code 412 (Precondition Failed). 클라이언트가 임대 ID를 지정하지만 blob에 활성 임대가 없는 경우에도 Blob 서비스가 상태 코드 412(전제 조건 실패)를 반환합니다.If the client specifies a lease ID but the blob does not have an active lease, the Blob service also returns status code 412 (Precondition Failed).

기존 블록 blob 또는 페이지 blob에서 추가 블록 을 호출 하면 InvalidBlobType 오류가 반환 됩니다 (HTTP 상태 코드 409-충돌).Calling Append Block on an existing block blob or page blob will return an InvalidBlobType error (HTTP status code 409 - Conflict). 존재 하지 않는 blob에서 추가 블록 을 호출 하면 blobnotfound 오류가 반환 됩니다 (HTTP 상태 코드 404 – 찾을 수 없음).Calling Append Block on a non-existent blob will return a BlobNotFound error (HTTP status code 404 – Not Found).

중복 되거나 지연 된 추가 방지Avoiding duplicate or delayed appends

단일 작성기 시나리오에서 클라이언트는 x-y-appendpos 조건부 헤더를 사용 하 여 현재 오프셋을 확인 하거나를 사용 하 여 조건부로 ETag를 확인 하 여 중복 된 추가 또는 지연 된 쓰기를 방지할 수 있습니다 If-Match .In a single writer scenario, the client can avoid duplicate appends or delayed writes either by using the x-ms-blob-condition-appendpos conditional header to check the current offset, or by checking the ETag conditionally using If-Match.

여러 작성기 시나리오에서 각 클라이언트는 조건부 헤더를 사용할 수 있지만 성능 측면에서 최적의 방법이 아닐 수도 있습니다.In a multiple writer scenario, each client can use conditional headers, but this may not be an optimal approach in terms of performance. 최대 동시 추가 처리량을 위해 응용 프로그램은 응용 프로그램 계층에서 중복 추가 및 지연 된 추가를 처리 해야 합니다 (예: 추가 되는 데이터에 epoch 또는 시퀀스 번호 추가).For the highest concurrent append throughput, applications should handle redundant appends and delayed appends in their application layer (e.g., add epochs or sequence numbers in the data being appended).