조건부 삭제를 수행하는 방법 - Amazon Simple Storage Service

조건부 삭제를 수행하는 방법

조건부 삭제를 사용하여 객체 삭제 전에 객체가 존재하는지 또는 변경되지 않았는지 여부를 평가할 수 있습니다. S3 범용 및 디렉터리 버킷에서 DeleteObject 또는 DeleteObjects API 작업을 사용하여 조건부 삭제를 수행할 수 있습니다. 조건부 삭제 요청을 할 때 사전 조건 값 *가 포함된 HTTP If-Match 헤더를 사용하여 객체가 존재하는지 여부를 확인하거나, 제공된 ETag가 포함된 If-Match 헤더를 사용하여 객체가 수정되었는지 여부를 확인할 수 있습니다.

S3 버킷 또는 Identity and Access Management(IAM) 정책을 사용하여 범용 버킷 수준에서 조건부 삭제를 적용할 수 있습니다. 자세한 내용은 Amazon S3 버킷에 조건부 삭제 강제 적용 섹션을 참조하세요.

참고

조건부 삭제 평가는 객체의 현재 버전에만 적용됩니다.

객체 삭제 전에 객체가 수정되었는지 여부를 확인하는 방법

조건부 삭제를 사용하면 실수로 객체가 삭제되지 않도록 애플리케이션을 보호할 수 있습니다. HTTP If-Match헤더를 ETag 값과 함께 사용하여 객체가 수정되었는지 여부를 확인할 수 있습니다. S3 버킷에 있는 객체의 ETag 값이 삭제 작업 중에 제공한 ETag와 일치하지 않으면 작업이 실패합니다. DeleteObjects 작업을 사용하여 여러 객체를 조건부로 삭제하려면 XML 요청 본문에 있는 객체의 ETag 요소에 ETag 값을 제공해야 합니다. 자세한 내용은 Content-MD5 및 ETag를 사용하여 업로드된 객체 확인 섹션을 참조하세요.

참고

ETag값이 포함된 If-Match 헤더로 조건부 삭제를 수행하려면 s3:DeleteObjects3:GetObject 권한이 있어야 합니다.

ETag 값이 포함된 If-Match 헤더는 버킷의 기존 객체와 비교하여 평가합니다. 동일한 키 이름 및 일치하는 ETag를 가진 기존 객체가 있는 경우 DeleteObject 요청이 성공하고 204 No content 응답을 반환합니다. ETag가 일치하지 않으면 412 Precondition Failed 응답과 함께 삭제 작업이 실패합니다. 성공하면 DeleteObjects API는 200 OK로 응답하고 배치 삭제 요청의 응답 본문에 있는 각 객체의 상태를 제공합니다. DeleteObjects 요청에 대한 사전 조건이 충족되지 않으면 Amazon S3는 객체를 삭제하지 않고 Pre-condition 실패 오류 응답을 반환합니다.

동시 요청이 발생하는 경우 해당 객체에 대한 조건부 삭제 작업이 완료되기 전에 객체에 대한 DELETE 또는 PUT 요청이 성공하면 409 Conflict 오류 응답을 받을 수도 있습니다. 객체에 대한 조건부 쓰기 작업이 완료되기 전에 해당 객체에 대한 동시 삭제 요청이 성공하는 경우 객체 키가 더 이상 존재하지 않으므로 404 Not Found 응답이 반환됩니다.

ETag 값이 포함된 If-Match 헤더를 다음 API와 함께 사용할 수 있습니다.

다음 delete-object 예제 명령은 제공된 ETag 값 6805f2cfc46c0f04559748bb039d69al을 사용해 조건부 쓰기를 수행하려고 시도합니다.

aws s3api delete-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69al"

자세한 내용은 AWS CLI 명령 참조delete-object 섹션을 참조하십시오.

다음 delete-objects 예제 명령은 제공된 ETag 값 6805f2cfc46c0f04559748bb039d69al을 사용해 조건부 쓰기를 수행하려고 시도합니다.

aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "6805f2cfc46c0f04559748bb039d69al"}]}'

자세한 내용은 AWS CLI 명령 참조delete-objects 섹션을 참조하십시오.

AWS CLI에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서AWS Command Line Interface란 무엇입니까?를 참조하세요.

객체 삭제 전에 객체가 존재하는지 여부를 확인하는 방법

* 값이 포함된 If-Match 헤더를 사용하여 객체 삭제 전에 객체가 존재하는지 여부를 확인할 수 있습니다. * 값은 객체가 수정되었는지 여부에 관계없이 객체가 존재하는 경우에만 작업을 진행해야 함을 나타냅니다.

삭제 마커는 버전이 관리되는 S3 범용 버킷에서 객체가 삭제되었음을 나타내는 특수 객체입니다. 이전 버전을 유지하면서 객체가 삭제된 것처럼 보이도록 하는 자리 표시자입니다. 따라서 DeleteObject API와 함께 If-Match:*를 사용하면 객체가 존재하는 경우에만 204 No Content로 작업이 성공합니다. 최신 버전의 객체가 삭제 마커인 경우 객체가 존재하지 않으며 DeleteObject API가 실패하고 412 Precondition Failed 응답을 반환합니다. 삭제 마커에 대한 자세한 내용은 삭제 마커를 통한 작업 단원을 참조하십시오.

DeleteObjects 작업을 사용하여 여러 객체를 조건부로 삭제하려면 XML 요청 본문의 객체에 있는 ETag 요소에 *를 제공할 수 있습니다. 사전 조건이 성공하면 DeleteObjects 작업은 200 OK로 응답하고 응답 본문에 있는 각 객체의 상태를 제공합니다. 사전 조건이 성공하면 해당 객체에 대한 응답이 응답 본문의 <Deleted> 요소에 캡처됩니다. 사전 조건이 실패하면 해당 객체에 대한 응답이 응답 본문의 <Error> 요소에 캡처됩니다. 사전 조건 중 하나를 평가할 때 객체가 존재하지 않는 경우 S3는 요청을 거부하고 Not Found 오류 응답을 반환합니다.

참고

If-Match:*를 사용하여 조건부 삭제를 수행하려면 s3:DeleteObject 권한이 있어야 합니다.

* 값이 포함된 If-Match 헤더를 다음 API와 함께 사용할 수 있습니다.

다음 delete-object 예제 명령은 모든 ETag를 나타내는 * 값을 가진 키 이름 my_images.tar.bz2의 객체에 대해 조건부 삭제를 시도합니다.

aws s3api delete-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --if-match "*"

자세한 내용은 AWS CLI 명령 참조delete-object 섹션을 참조하십시오.

다음 delete-objects 예제 명령은 모든 ETag를 나타내는 * 값을 가진 키 이름 my_images.tar.bz2의 객체에 대해 조건부 삭제를 시도합니다.

aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "*"}]}'

자세한 내용은 AWS CLI 명령 참조delete-objects 섹션을 참조하십시오.

AWS CLI에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서AWS Command Line Interface란 무엇입니까?를 참조하세요.