여러 객체 삭제 - Amazon Simple Storage Service

여러 객체 삭제

S3 버킷에 있는 모든 객체에 스토리지 비용이 발생하기 때문에 더 이상 필요하지 않은 객체는 삭제해야 합니다. 예를 들어 로그 파일을 수집하는 경우, 더 이상 필요가 없는 로그 파일은 삭제하는 것이 좋습니다. 로그 파일과 같은 객체를 자동으로 삭제하도록 수명 주기 규칙을 설정할 수 있습니다. 자세한 내용은 버킷에서 수명 주기 구성 설정 섹션을 참조하세요.

Amazon S3 기능 및 요금에 대한 자세한 내용은 Amazon S3 요금을 참조하세요.

Amazon S3 콘솔 또는 다중 객체 삭제 API를 사용하여 S3 버킷에서 여러 객체를 동시에 삭제할 수 있습니다.

Amazon S3 콘솔을 사용하여 버킷에서 여러 객체를 삭제하려면 다음 단계를 수행합니다.

객체 삭제

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 삭제할 객체가 포함된 Amazon S3 버킷 또는 폴더로 이동합니다.

  3. 삭제할 객체의 이름 왼쪽에 있는 확인란을 선택합니다.

  4. 작업(Actions)을 선택하고 표시되는 옵션 목록에서 삭제(Delete)를 선택합니다.

    또는 오른쪽 상단의 옵션에서 삭제(Delete)를 선택합니다.

  5. 이러한 객체를 삭제할 것인지 묻는 메시지가 나타나면 delete를 입력합니다.

  6. 오른쪽 하단의 객체 삭제를 선택하면 Amazon S3가 지정된 객체를 삭제합니다.

주의
  • 지정된 객체를 삭제하면 실행 취소할 수 없습니다.

  • 이 작업은 지정된 모든 객체를 삭제합니다. 폴더를 삭제할 때 폴더에 새 객체를 추가하기 전에 삭제 작업이 완료될 때까지 기다립니다. 그러지 않으면 새 객체도 삭제될 수 있습니다.

  • 버전 관리가 활성화된 버킷에서 버전 관리가 끄기로 설정된 객체를 삭제하는 경우 Amazon S3가 삭제 마커를 만듭니다. 삭제 작업을 취소하려면 이 삭제 마커를 삭제합니다. 이 작업을 확인하려면 delete를 입력합니다.

  • 버전 관리가 활성화된 버킷에서 버전 관리가 켜기로 설정된 객체를 삭제하는 경우 Amazon S3가 객체 버전을 영구적으로 삭제합니다. 이 작업을 확인하려면 permanently delete를 입력합니다.

Amazon S3는 단일 요청으로 여러 객체를 삭제하는 데 사용할 수 있는 Multi-Object Delete API를 제공합니다. API는 상세 정보 표시 모드 및 자동 모드의 두 가지 응답을 지원합니다. 상세 정보 표시 모드는 기본적으로 꺼져 있습니다. 상세 정보 표시 모드에서는 요청에 지정된 각 키의 삭제 결과가 응답에 포함됩니다. 자동 모드의 응답에는 삭제 작업에 오류가 발생한 키만 포함됩니다. 자동 모드를 사용하는 경우 모든 키가 성공적으로 삭제되면 Amazon S3는 빈 응답을 반환합니다. 자세한 내용은 삭제 - 다중 객체 삭제를 참조하세요.

객체 삭제에 대한 자세한 내용은 Amazon S3 objects 삭제 단원을 참조하세요.

Java

AWS SDK for Java는 여러 객체를 삭제하기 위한 AmazonS3Client.deleteObjects() 메서드를 제공합니다. 삭제하려는 각 객체에 대해 키 이름을 지정합니다. 버전 관리를 사용하는 버킷의 경우, 다음 옵션을 사용할 수 있습니다.

  • 객체의 키 이름만 지정합니다. Amazon S3가 객체에 삭제 마커를 추가합니다.

  • 삭제할 객체의 키 이름과 버전 ID를 모두 지정합니다. 그러면 Amazon S3가 지정된 버전의 객체를 삭제합니다.

다음 코드 예제는 Multi-Object Delete API를 사용하여 버전 관리 미사용 버킷에서 객체를 삭제합니다. 이 예제에서는 샘플 객체를 버킷에 업로드한 다음 AmazonS3Client.deleteObjects() 메서드를 사용하여 단일 요청으로 객체를 삭제합니다. 이 예제에서는 객체에 버전 ID가 없으므로 DeleteObjectsRequest에서 객체 키 이름만 지정합니다.

실제 예제를 작성 및 테스트하는 방법에 대한 자세한 내용은 Amazon S3 Java 코드 예제 테스트 단원을 참조하세요.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.DeleteObjectsRequest; import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion; import com.amazonaws.services.s3.model.DeleteObjectsResult; import java.io.IOException; import java.util.ArrayList; public class DeleteMultipleObjectsNonVersionedBucket { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .build(); // Upload three sample objects. ArrayList<KeyVersion> keys = new ArrayList<KeyVersion>(); for (int i = 0; i < 3; i++) { String keyName = "delete object example " + i; s3Client.putObject(bucketName, keyName, "Object number " + i + " to be deleted."); keys.add(new KeyVersion(keyName)); } System.out.println(keys.size() + " objects successfully created."); // Delete the sample objects. DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(bucketName) .withKeys(keys) .withQuiet(false); // Verify that the objects were deleted successfully. DeleteObjectsResult delObjRes = s3Client.deleteObjects(multiObjectDeleteRequest); int successfulDeletes = delObjRes.getDeletedObjects().size(); System.out.println(successfulDeletes + " objects successfully deleted."); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }

다음 코드 예제는 Multi-Object Delete API를 사용하여 버전 관리를 사용하는 버킷에서 객체를 삭제합니다. 이 예제에서는 작업을 수행합니다.

  1. 샘플 객체를 만든 후 삭제할 각 객체의 키 이름과 버전 ID를 지정하여 삭제합니다. 이 작업에서는 지정된 객체 버전만 삭제합니다.

  2. 샘플 객체를 만든 후 키 이름만 지정하여 삭제합니다. 이 예제에서는 버전 ID를 지정하지 않으므로 이 작업은 특정 객체 버전을 삭제하지 않고 각 객체에 삭제 마커를 추가합니다. 삭제 마커가 추가된 객체는 AWS Management Console에 표시되지 않습니다.

  3. 삭제 마커의 객체 키와 버전 ID를 지정하여 삭제 마커를 제거합니다. 이 작업은 삭제 마커를 삭제합니다. 그러면 해당 객체가 AWS Management Console에 다시 표시됩니다.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.BucketVersioningConfiguration; import com.amazonaws.services.s3.model.DeleteObjectsRequest; import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion; import com.amazonaws.services.s3.model.DeleteObjectsResult; import com.amazonaws.services.s3.model.DeleteObjectsResult.DeletedObject; import com.amazonaws.services.s3.model.PutObjectResult; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class DeleteMultipleObjectsVersionEnabledBucket { private static AmazonS3 S3_CLIENT; private static String VERSIONED_BUCKET_NAME; public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; VERSIONED_BUCKET_NAME = "*** Bucket name ***"; try { S3_CLIENT = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Check to make sure that the bucket is versioning-enabled. String bucketVersionStatus = S3_CLIENT.getBucketVersioningConfiguration(VERSIONED_BUCKET_NAME).getStatus(); if (!bucketVersionStatus.equals(BucketVersioningConfiguration.ENABLED)) { System.out.printf("Bucket %s is not versioning-enabled.", VERSIONED_BUCKET_NAME); } else { // Upload and delete sample objects, using specific object versions. uploadAndDeleteObjectsWithVersions(); // Upload and delete sample objects without specifying version IDs. // Amazon S3 creates a delete marker for each object rather than deleting // specific versions. DeleteObjectsResult unversionedDeleteResult = uploadAndDeleteObjectsWithoutVersions(); // Remove the delete markers placed on objects in the non-versioned create/delete method. multiObjectVersionedDeleteRemoveDeleteMarkers(unversionedDeleteResult); } } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } private static void uploadAndDeleteObjectsWithVersions() { System.out.println("Uploading and deleting objects with versions specified."); // Upload three sample objects. ArrayList<KeyVersion> keys = new ArrayList<KeyVersion>(); for (int i = 0; i < 3; i++) { String keyName = "delete object without version ID example " + i; PutObjectResult putResult = S3_CLIENT.putObject(VERSIONED_BUCKET_NAME, keyName, "Object number " + i + " to be deleted."); // Gather the new object keys with version IDs. keys.add(new KeyVersion(keyName, putResult.getVersionId())); } // Delete the specified versions of the sample objects. DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(VERSIONED_BUCKET_NAME) .withKeys(keys) .withQuiet(false); // Verify that the object versions were successfully deleted. DeleteObjectsResult delObjRes = S3_CLIENT.deleteObjects(multiObjectDeleteRequest); int successfulDeletes = delObjRes.getDeletedObjects().size(); System.out.println(successfulDeletes + " objects successfully deleted"); } private static DeleteObjectsResult uploadAndDeleteObjectsWithoutVersions() { System.out.println("Uploading and deleting objects with no versions specified."); // Upload three sample objects. ArrayList<KeyVersion> keys = new ArrayList<KeyVersion>(); for (int i = 0; i < 3; i++) { String keyName = "delete object with version ID example " + i; S3_CLIENT.putObject(VERSIONED_BUCKET_NAME, keyName, "Object number " + i + " to be deleted."); // Gather the new object keys without version IDs. keys.add(new KeyVersion(keyName)); } // Delete the sample objects without specifying versions. DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(VERSIONED_BUCKET_NAME).withKeys(keys) .withQuiet(false); // Verify that delete markers were successfully added to the objects. DeleteObjectsResult delObjRes = S3_CLIENT.deleteObjects(multiObjectDeleteRequest); int successfulDeletes = delObjRes.getDeletedObjects().size(); System.out.println(successfulDeletes + " objects successfully marked for deletion without versions."); return delObjRes; } private static void multiObjectVersionedDeleteRemoveDeleteMarkers(DeleteObjectsResult response) { List<KeyVersion> keyList = new ArrayList<KeyVersion>(); for (DeletedObject deletedObject : response.getDeletedObjects()) { // Note that the specified version ID is the version ID for the delete marker. keyList.add(new KeyVersion(deletedObject.getKey(), deletedObject.getDeleteMarkerVersionId())); } // Create a request to delete the delete markers. DeleteObjectsRequest deleteRequest = new DeleteObjectsRequest(VERSIONED_BUCKET_NAME).withKeys(keyList); // Delete the delete markers, leaving the objects intact in the bucket. DeleteObjectsResult delObjRes = S3_CLIENT.deleteObjects(deleteRequest); int successfulDeletes = delObjRes.getDeletedObjects().size(); System.out.println(successfulDeletes + " delete markers successfully deleted"); } }
.NET

AWS SDK for .NET는 여러 객체를 삭제하기 위한 편리한 메서드인 DeleteObjects를 제공합니다. 삭제하려는 각 객체에 대해 객체의 키 이름과 버전을 지정합니다. 버전 관리를 사용하지 않는 버킷의 경우, 버전 ID에 null을 지정합니다. 예외가 발생하면 DeleteObjectsException 응답을 검토하여 삭제되지 않은 객체와 이유를 확인합니다.

예 버전 관리 미사용 버킷에서 여러 객체 삭제

다음 C# 예제는 multi-object delete API를 사용하여 버전 관리 미사용 버킷에서 객체를 삭제합니다. 이 예제에서는 샘플 객체를 버킷에 업로드한 다음 DeleteObjects 메서드를 사용하여 단일 요청으로 객체를 삭제합니다. 이 예제에서는 버전 ID가 null이므로 DeleteObjectsRequest에서 객체 키 이름만 지정합니다.

실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은Amazon S3 .NET 코드 예제 실행 섹션을 참조하세요.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class DeleteMultipleObjectsNonVersionedBucketTest { private const string bucketName = "*** versioning-enabled bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); MultiObjectDeleteAsync().Wait(); } static async Task MultiObjectDeleteAsync() { // Create sample objects (for subsequent deletion). var keysAndVersions = await PutObjectsAsync(3); // a. multi-object delete by specifying the key names and version IDs. DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest { BucketName = bucketName, Objects = keysAndVersions // This includes the object keys and null version IDs. }; // You can add specific object key to the delete request using the .AddKey. // multiObjectDeleteRequest.AddKey("TickerReference.csv", null); try { DeleteObjectsResponse response = await s3Client.DeleteObjectsAsync(multiObjectDeleteRequest); Console.WriteLine("Successfully deleted all the {0} items", response.DeletedObjects.Count); } catch (DeleteObjectsException e) { PrintDeletionErrorStatus(e); } } private static void PrintDeletionErrorStatus(DeleteObjectsException e) { // var errorResponse = e.ErrorResponse; DeleteObjectsResponse errorResponse = e.Response; Console.WriteLine("x {0}", errorResponse.DeletedObjects.Count); Console.WriteLine("No. of objects successfully deleted = {0}", errorResponse.DeletedObjects.Count); Console.WriteLine("No. of objects failed to delete = {0}", errorResponse.DeleteErrors.Count); Console.WriteLine("Printing error data..."); foreach (DeleteError deleteError in errorResponse.DeleteErrors) { Console.WriteLine("Object Key: {0}\t{1}\t{2}", deleteError.Key, deleteError.Code, deleteError.Message); } } static async Task<List<KeyVersion>> PutObjectsAsync(int number) { List<KeyVersion> keys = new List<KeyVersion>(); for (int i = 0; i < number; i++) { string key = "ExampleObject-" + new System.Random().Next(); PutObjectRequest request = new PutObjectRequest { BucketName = bucketName, Key = key, ContentBody = "This is the content body!", }; PutObjectResponse response = await s3Client.PutObjectAsync(request); KeyVersion keyVersion = new KeyVersion { Key = key, // For non-versioned bucket operations, we only need object key. // VersionId = response.VersionId }; keys.Add(keyVersion); } return keys; } } }

예 버전 관리 사용 버킷의 여러 객체 삭제

다음 C# 코드 예제는 multi-object delete API를 사용하여 버전 관리를 사용하는 버킷에서 객체를 삭제합니다. 이 예제에서는 다음 작업을 수행합니다.

  1. 샘플 객체를 만들고 각 객체의 키 이름과 버전 ID를 지정하여 삭제합니다. 이 작업에서는 특정 객체 버전을 삭제합니다.

  2. 샘플 객체를 만들고 키 이름만 지정하여 삭제합니다. 이 예제에서는 버전 ID를 지정하지 않으므로 이 작업은 삭제 마커만 추가합니다. 특정 객체 버전은 삭제하지 않습니다. 삭제 후 이러한 객체는 Amazon S3 콘솔에 표시되지 않습니다.

  3. 삭제 마커의 객체 키와 버전 ID를 지정하여 삭제 마커를 삭제합니다. 이 작업에서 삭제 마커를 삭제하면 해당 객체가 콘솔에 다시 표시됩니다.

실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은Amazon S3 .NET 코드 예제 실행 섹션을 참조하세요.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class DeleteMultipleObjVersionedBucketTest { private const string bucketName = "*** versioning-enabled bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); DeleteMultipleObjectsFromVersionedBucketAsync().Wait(); } private static async Task DeleteMultipleObjectsFromVersionedBucketAsync() { // Delete objects (specifying object version in the request). await DeleteObjectVersionsAsync(); // Delete objects (without specifying object version in the request). var deletedObjects = await DeleteObjectsAsync(); // Additional exercise - remove the delete markers S3 returned in the preceding response. // This results in the objects reappearing in the bucket (you can // verify the appearance/disappearance of objects in the console). await RemoveDeleteMarkersAsync(deletedObjects); } private static async Task<List<DeletedObject>> DeleteObjectsAsync() { // Upload the sample objects. var keysAndVersions2 = await PutObjectsAsync(3); // Delete objects using only keys. Amazon S3 creates a delete marker and // returns its version ID in the response. List<DeletedObject> deletedObjects = await NonVersionedDeleteAsync(keysAndVersions2); return deletedObjects; } private static async Task DeleteObjectVersionsAsync() { // Upload the sample objects. var keysAndVersions1 = await PutObjectsAsync(3); // Delete the specific object versions. await VersionedDeleteAsync(keysAndVersions1); } private static void PrintDeletionReport(DeleteObjectsException e) { var errorResponse = e.Response; Console.WriteLine("No. of objects successfully deleted = {0}", errorResponse.DeletedObjects.Count); Console.WriteLine("No. of objects failed to delete = {0}", errorResponse.DeleteErrors.Count); Console.WriteLine("Printing error data..."); foreach (var deleteError in errorResponse.DeleteErrors) { Console.WriteLine("Object Key: {0}\t{1}\t{2}", deleteError.Key, deleteError.Code, deleteError.Message); } } static async Task VersionedDeleteAsync(List<KeyVersion> keys) { // a. Perform a multi-object delete by specifying the key names and version IDs. var multiObjectDeleteRequest = new DeleteObjectsRequest { BucketName = bucketName, Objects = keys // This includes the object keys and specific version IDs. }; try { Console.WriteLine("Executing VersionedDelete..."); DeleteObjectsResponse response = await s3Client.DeleteObjectsAsync(multiObjectDeleteRequest); Console.WriteLine("Successfully deleted all the {0} items", response.DeletedObjects.Count); } catch (DeleteObjectsException e) { PrintDeletionReport(e); } } static async Task<List<DeletedObject>> NonVersionedDeleteAsync(List<KeyVersion> keys) { // Create a request that includes only the object key names. DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(); multiObjectDeleteRequest.BucketName = bucketName; foreach (var key in keys) { multiObjectDeleteRequest.AddKey(key.Key); } // Execute DeleteObjects - Amazon S3 add delete marker for each object // deletion. The objects disappear from your bucket. // You can verify that using the Amazon S3 console. DeleteObjectsResponse response; try { Console.WriteLine("Executing NonVersionedDelete..."); response = await s3Client.DeleteObjectsAsync(multiObjectDeleteRequest); Console.WriteLine("Successfully deleted all the {0} items", response.DeletedObjects.Count); } catch (DeleteObjectsException e) { PrintDeletionReport(e); throw; // Some deletes failed. Investigate before continuing. } // This response contains the DeletedObjects list which we use to delete the delete markers. return response.DeletedObjects; } private static async Task RemoveDeleteMarkersAsync(List<DeletedObject> deletedObjects) { var keyVersionList = new List<KeyVersion>(); foreach (var deletedObject in deletedObjects) { KeyVersion keyVersion = new KeyVersion { Key = deletedObject.Key, VersionId = deletedObject.DeleteMarkerVersionId }; keyVersionList.Add(keyVersion); } // Create another request to delete the delete markers. var multiObjectDeleteRequest = new DeleteObjectsRequest { BucketName = bucketName, Objects = keyVersionList }; // Now, delete the delete marker to bring your objects back to the bucket. try { Console.WriteLine("Removing the delete markers ....."); var deleteObjectResponse = await s3Client.DeleteObjectsAsync(multiObjectDeleteRequest); Console.WriteLine("Successfully deleted all the {0} delete markers", deleteObjectResponse.DeletedObjects.Count); } catch (DeleteObjectsException e) { PrintDeletionReport(e); } } static async Task<List<KeyVersion>> PutObjectsAsync(int number) { var keys = new List<KeyVersion>(); for (var i = 0; i < number; i++) { string key = "ObjectToDelete-" + new System.Random().Next(); PutObjectRequest request = new PutObjectRequest { BucketName = bucketName, Key = key, ContentBody = "This is the content body!", }; var response = await s3Client.PutObjectAsync(request); KeyVersion keyVersion = new KeyVersion { Key = key, VersionId = response.VersionId }; keys.Add(keyVersion); } return keys; } } }
PHP

이 예제에서는 AWS SDK for PHP 버전 3의 클래스를 사용하여 버전이 지정되거나 지정되지 않은 Amazon S3 버킷에서 여러 객체를 삭제하는 방법을 보여 줍니다. 버전 관리에 대한 자세한 내용은 S3 버킷에서 버전 관리 사용 섹션을 참조하세요.

이 예제에서는 이미 AWS SDK for PHP 사용 및 PHP 예제 실행의 지침에 따라 AWS SDK for PHP가 올바르게 설치되어 있다고 가정합니다.

예 버전 관리 미사용 버킷에서 여러 객체 삭제

다음 PHP 예제는 deleteObjects() 메서드를 사용하여 버전 관리 미사용 버킷에서 여러 객체를 삭제합니다.

이 가이드의 PHP 예제 실행에 대한 자세한 내용은 PHP 예제 실행 섹션을 참조하세요.

<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // 1. Create a few objects. for ($i = 1; $i <= 3; $i++) { $s3->putObject([ 'Bucket' => $bucket, 'Key' => "key{$i}", 'Body' => "content {$i}", ]); } // 2. List the objects and get the keys. $keys = $s3->listObjects([ 'Bucket' => $bucket ]); // 3. Delete the objects. foreach ($keys['Contents'] as $key) { $s3->deleteObjects([ 'Bucket' => $bucket, 'Delete' => [ 'Objects' => [ [ 'Key' => $key['Key'] ] ] ] ]); }

예 버전 관리 사용 버킷에서 여러 객체 삭제

다음 PHP 예제는 deleteObjects() 메서드를 사용하여 버전이 지정된 버킷에서 여러 객체를 삭제합니다.

이 가이드의 PHP 예제 실행에 대한 자세한 내용은 PHP 예제 실행 섹션을 참조하세요.

<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // 1. Enable object versioning for the bucket. $s3->putBucketVersioning([ 'Bucket' => $bucket, 'VersioningConfiguration' => [ 'Status' => 'Enabled' ] ]); // 2. Create a few versions of an object. for ($i = 1; $i <= 3; $i++) { $s3->putObject([ 'Bucket' => $bucket, 'Key' => $keyname, 'Body' => "content {$i}", ]); } // 3. List the objects versions and get the keys and version IDs. $versions = $s3->listObjectVersions(['Bucket' => $bucket]); // 4. Delete the object versions. $deletedResults = 'The following objects were deleted successfully:' . PHP_EOL; $deleted = false; $errorResults = 'The following objects could not be deleted:' . PHP_EOL; $errors = false; foreach ($versions['Versions'] as $version) { $result = $s3->deleteObjects([ 'Bucket' => $bucket, 'Delete' => [ 'Objects' => [ [ 'Key' => $version['Key'], 'VersionId' => $version['VersionId'] ] ] ] ]); if (isset($result['Deleted'])) { $deleted = true; $deletedResults .= "Key: {$result['Deleted'][0]['Key']}, " . "VersionId: {$result['Deleted'][0]['VersionId']}" . PHP_EOL; } if (isset($result['Errors'])) { $errors = true; $errorResults .= "Key: {$result['Errors'][0]['Key']}, " . "VersionId: {$result['Errors'][0]['VersionId']}, " . "Message: {$result['Errors'][0]['Message']}" . PHP_EOL; } } if ($deleted) { echo $deletedResults; } if ($errors) { echo $errorResults; } // 5. Suspend object versioning for the bucket. $s3->putBucketVersioning([ 'Bucket' => $bucket, 'VersioningConfiguration' => [ 'Status' => 'Suspended' ] ]);

AWS SDK를 사용하여 Multi-Object Delete API를 통해 여러 객체를 삭제할 수 있습니다. 하지만 애플리케이션에서 요구할 경우 REST 요청을 직접 전송할 수 있습니다.

자세한 내용은 Amazon Simple Storage Service API 참조여러 객체 삭제를 참조하세요.