단일 객체 삭제 - Amazon Simple Storage Service

단일 객체 삭제

Amazon S3 콘솔 또는 DELETE API를 사용하여 S3 버킷에서 단일의 기존 객체를 삭제할 수 있습니다.

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

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

다음 단계에 따라 Amazon S3 콘솔을 사용하여 버킷에서 단일 객체를 삭제합니다.

객체를 삭제하려면

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

  2. 버킷 이름 목록에서 객체를 삭제하려는 버킷 이름을 선택합니다.

  3. 버전 관리를 사용하는 버킷에서 버전 관리:

    • 끄기로 설정된 객체를 삭제하는 경우 Amazon S3가 삭제 마커를 만듭니다. 객체를 삭제하려면 객체를 선택하고 삭제를 선택한 다음 텍스트 필드에 delete를 입력하여 선택을 확인합니다.

    • 켜기로 설정된 객체를 삭제하는 경우 Amazon S3가 객체 버전을 영구적으로 삭제합니다. 삭제하려는 객체 버전을 선택하고 삭제를 선택한 다음 텍스트 필드에 permanently delete를 입력하여 선택을 확인합니다.

다음 예제에서는 AWS SDK를 사용하여 버킷에서 객체를 삭제하는 방법을 보여줍니다. 자세한 내용은 Amazon Simple Storage Service API 참조DELETE Object를 참조하세요.

S3 버전 관리를 사용하는 버킷의 경우 다음 옵션을 사용할 수 있습니다.

  • 버전 ID를 지정하여 특정 객체 버전을 삭제합니다.

  • 버전 ID를 지정하지 않고 객체를 삭제합니다. 이 경우 Amazon S3에서는 객체에 삭제 마커를 추가합니다.

S3 버전 관리에 대한 자세한 내용은 S3 버킷에서 버전 관리 사용 섹션을 참조하세요.

Java

예제 1: 객체 삭제(버전이 지정되지 않은 버킷)

다음 예제에서는 버킷에서 버전 관리를 사용하지 않고 객체에 버전 ID가 없다고 가정합니다. 삭제 요청 시, 객체 키만 지정하며 버전 ID는 지정하지 않습니다.

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

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.DeleteObjectRequest; import java.io.IOException; public class DeleteObjectNonVersionedBucket { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String keyName = "*** Key name ****"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); s3Client.deleteObject(new DeleteObjectRequest(bucketName, keyName)); } 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(); } } }

예제 2: 객체 삭제(버전이 지정된 버킷)

다음 예제는 버전이 지정된 버킷에서 객체를 삭제합니다. 이 예제에서는 객체 키 이름 및 버전 ID를 지정하여 특정 객체 버전을 삭제합니다.

이 예제는 다음을 수행합니다.

  1. 버킷에 샘플 객체를 추가합니다. Amazon S3에서는 새로 추가된 객체의 버전 ID를 반환합니다. 이 예제에서는 삭제 요청에 이 버전 ID를 사용합니다.

  2. 객체 키 이름 및 버전 ID를 지정하여 객체 버전을 삭제합니다. 해당 객체의 다른 버전이 없는 경우 Amazon S3에서는 그 객체를 완전히 삭제합니다. 그렇지 않은 경우 Amazon S3에서는 지정된 버전만 삭제합니다.

    참고

    ListVersions 요청을 보내 객체의 버전 ID를 가져올 수 있습니다.

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.DeleteVersionRequest; import com.amazonaws.services.s3.model.PutObjectResult; import java.io.IOException; public class DeleteObjectVersionEnabledBucket { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String keyName = "*** Key name ****"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Check to ensure that the bucket is versioning-enabled. String bucketVersionStatus = s3Client.getBucketVersioningConfiguration(bucketName).getStatus(); if (!bucketVersionStatus.equals(BucketVersioningConfiguration.ENABLED)) { System.out.printf("Bucket %s is not versioning-enabled.", bucketName); } else { // Add an object. PutObjectResult putResult = s3Client.putObject(bucketName, keyName, "Sample content for deletion example."); System.out.printf("Object %s added to bucket %s\n", keyName, bucketName); // Delete the version of the object that we just created. System.out.println("Deleting versioned object " + keyName); s3Client.deleteVersion(new DeleteVersionRequest(bucketName, keyName, putResult.getVersionId())); System.out.printf("Object %s, version %s deleted\n", keyName, putResult.getVersionId()); } } 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(); } } }
.NET

다음 예제는 버전이 지정된 버킷과 버전이 지정되지 않는 버킷 둘 다에서 객체를 삭제하는 방법을 보여줍니다. S3 버전 관리에 대한 자세한 내용은 S3 버킷에서 버전 관리 사용 단원을 참조하세요.

예 버전이 지정되지 않은 버킷에서 객체 삭제

다음 C# 예제는 버전이 지정되지 않은 버킷에서 객체를 삭제합니다. 이 예제에서는 해당 객체에 버전 ID가 없다고 가정합니다. 따라서 버전 ID를 지정하지 않습니다. 객체 키만 지정합니다.

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

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class DeleteObjectNonVersionedBucketTest { private const string bucketName = "*** bucket name ***"; private const string keyName = "*** object key ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); DeleteObjectNonVersionedBucketAsync().Wait(); } private static async Task DeleteObjectNonVersionedBucketAsync() { try { var deleteObjectRequest = new DeleteObjectRequest { BucketName = bucketName, Key = keyName }; Console.WriteLine("Deleting an object"); await client.DeleteObjectAsync(deleteObjectRequest); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when deleting an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when deleting an object", e.Message); } } } }

예 버전이 지정된 버킷에서 객체 삭제

다음 C# 예제는 버전이 지정된 버킷에서 객체를 삭제합니다. 여기에서는 객체 키 이름 및 버전 ID를 지정하여 객체의 특정 버전을 삭제합니다.

이 코드에서는 다음 작업을 수행합니다.

  1. 지정한 버킷에 대해 S3 버전 관리를 활성화합니다(이미 S3 버전 관리를 사용하는 경우 이 작업은 아무런 효과가 없음).

  2. 버킷에 샘플 객체를 추가합니다. 응답으로 Amazon S3는 새로 추가된 객체의 버전 ID를 반환합니다. 이 예제에서는 삭제 요청에 이 버전 ID를 사용합니다.

  3. 객체 키 이름 및 버전 ID를 지정하여 샘플 객체를 삭제합니다.

    참고

    ListVersions 요청을 보내 객체의 버전 ID를 가져올 수도 있습니다.

    var listResponse = client.ListVersions(new ListVersionsRequest { BucketName = bucketName, Prefix = keyName });

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

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class DeleteObjectVersion { private const string bucketName = "*** versioning-enabled bucket name ***"; private const string keyName = "*** Object Key Name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); CreateAndDeleteObjectVersionAsync().Wait(); } private static async Task CreateAndDeleteObjectVersionAsync() { try { // Add a sample object. string versionID = await PutAnObject(keyName); // Delete the object by specifying an object key and a version ID. DeleteObjectRequest request = new DeleteObjectRequest { BucketName = bucketName, Key = keyName, VersionId = versionID }; Console.WriteLine("Deleting an object"); await client.DeleteObjectAsync(request); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when deleting an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when deleting an object", e.Message); } } static async Task<string> PutAnObject(string objectKey) { PutObjectRequest request = new PutObjectRequest { BucketName = bucketName, Key = objectKey, ContentBody = "This is the content body!" }; PutObjectResponse response = await client.PutObjectAsync(request); return response.VersionId; } } }
PHP

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

이 예제에서는 이미 AWS SDK for PHP 사용 및 PHP 예제 실행의 지침에 따라 AWS SDK for PHP가 올바르게 설치되어 있다고 가정합니다. 이 가이드의 PHP 예제 실행에 대한 자세한 내용은 섹션을 참조하세요.PHP 예제 실행

다음 PHP 예제는 버킷에서 객체를 삭제합니다. 이 예제에서는 버전이 지정되지 않은 버킷에서 객체를 삭제하는 방법을 보여주기 때문에 삭제 요청 시 버킷 이름과 객체 키(버전 ID 아님)만 제공합니다.

<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // 1. Delete the object from the bucket. try { echo 'Attempting to delete ' . $keyname . '...' . PHP_EOL; $result = $s3->deleteObject([ 'Bucket' => $bucket, 'Key' => $keyname ]); if ($result['DeleteMarker']) { echo $keyname . ' was deleted or does not exist.' . PHP_EOL; } else { exit('Error: ' . $keyname . ' was not deleted.' . PHP_EOL); } } catch (S3Exception $e) { exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL); } // 2. Check to see if the object was deleted. try { echo 'Checking to see if ' . $keyname . ' still exists...' . PHP_EOL; $result = $s3->getObject([ 'Bucket' => $bucket, 'Key' => $keyname ]); echo 'Error: ' . $keyname . ' still exists.'; } catch (S3Exception $e) { exit($e->getAwsErrorMessage()); }
Javascript

이 예에서는 AWS SDK for JavaScript의 버전 3을 사용하여 객체를 삭제하는 방법을 보여줍니다. AWS SDK for JavaScript에 대한 자세한 내용은 AWS SDK for JavaScript 사용 단원을 참조하세요.

import { DeleteObjectCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js" // Helper function that creates Amazon S3 service client module. export const bucketParams = { Bucket: "BUCKET_NAME", Key: "KEY" }; export const run = async () => { try { const data = await s3Client.send(new DeleteObjectCommand(bucketParams)); console.log("Success. Object deleted.", data); return data; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

요청당 하나의 객체를 삭제하려면 DELETE API를 사용합니다. 자세한 내용은 DELETE Object(객체 삭제) 단원을 참조하세요. CLI를 사용하여 객체를 삭제하는 방법에 대한 자세한 내용은 delete-object를 참조하세요.

AWS SDK를 사용하여 객체를 삭제할 수 있습니다. 하지만 애플리케이션에서 요구할 경우 REST 요청을 직접 전송할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service API 참조DELETE Object를 참조하세요.