development

Amazon s3 버킷에서 파일을 삭제하는 방법은 무엇입니까?

big-blog 2020. 11. 6. 21:00
반응형

Amazon s3 버킷에서 파일을 삭제하는 방법은 무엇입니까?


Amazon s3 버킷에서 필요한 파일을 삭제하는 코드를 Python으로 작성해야합니다. Amazon s3 버킷에 연결하고 파일을 저장할 수 있지만 파일을 삭제하려면 어떻게해야합니까?


boto를 사용하여 한 가지 더 방법을 찾았습니다.

from boto.s3.connection import S3Connection, Bucket, Key

conn = S3Connection(AWS_ACCESS_KEY, AWS_SECERET_KEY)

b = Bucket(conn, S3_BUCKET_NAME)

k = Key(b)

k.key = 'images/my-images/'+filename

b.delete_key(k)

사용 boto3(현재 버전 1.4.4)를 사용 S3.Object.delete().

import boto3

s3 = boto3.resource('s3')
s3.Object('your-bucket', 'your-key').delete()

Python boto3 SDK를 사용하고 (그리고 AWS에 대한 자격 증명이 설정되었다고 가정) 다음은 버킷에서 지정된 객체를 삭제합니다.

import boto3

client = boto3.client('s3')
client.delete_object(Bucket='mybucketname', Key='myfile.whatever')

이 쉬운 방법이 없다는 것에 놀랐습니다 : key.delete():

from boto.s3.connection import S3Connection, Bucket, Key

conn = S3Connection(AWS_ACCESS_KEY, AWS_SECERET_KEY)
bucket = Bucket(conn, S3_BUCKET_NAME)
k = Key(bucket = bucket, name=path_to_file)
k.delete()

어떤 인터페이스를 통해? REST 인터페이스를 사용하면 다음과 같이 delete를 보냅니다 .

DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: signatureValue

SOAP 인터페이스를 통해 :

<DeleteObject xmlns="http://doc.s3.amazonaws.com/2006-03-01">
  <Bucket>quotes</Bucket>
  <Key>Nelson</Key>
  <AWSAccessKeyId> 1D9FVRAYCP1VJEXAMPLE=</AWSAccessKeyId>
  <Timestamp>2006-03-01T12:00:00.183Z</Timestamp>
  <Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</DeleteObject>

당신은 파이썬 라이브러리를 사용하는 경우 BOTO 등이 , 그것은처럼 "삭제"기능을 노출한다 delete_key().


지금은 Linux 유틸리티 s3cmd를 사용하여 문제를 해결했습니다 . Python에서 다음과 같이 사용했습니다.

delFile = 's3cmd -c /home/project/.s3cfg del s3://images/anon-images/small/' + filename
os.system(delFile)

그것은 나를 위해 일했습니다.

import boto
import sys
from boto.s3.key import Key
import boto.s3.connection

AWS_ACCESS_KEY_ID = '<access_key>'
AWS_SECRET_ACCESS_KEY = '<secret_access_key>'
Bucketname = 'bucket_name' 

conn = boto.s3.connect_to_region('us-east-2',
        aws_access_key_id=AWS_ACCESS_KEY_ID,
        aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
        is_secure=True,              
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )
bucket = conn.get_bucket(Bucketname)

k = Key(bucket)

k.key = 'filename to delete'
bucket.delete_key(k)   

aws cli : https://aws.amazon.com/cli/ 및 일부 unix 명령을 사용하여 수행 할 수 있습니다 .

이 aws cli 명령이 작동해야합니다.

aws s3 rm s3://<your_bucket_name> --exclude "*" --include "<your_regex>" 

하위 폴더를 포함하려면 --recursive 플래그를 추가해야합니다.

또는 유닉스 명령으로 :

aws s3 ls s3://<your_bucket_name>/ | awk '{print $4}' | xargs -I%  <your_os_shell>   -c 'aws s3 rm s3:// <your_bucket_name>  /% $1'

설명:

  1. 버킷 --pipe-> 의 모든 파일 나열
  2. 네 번째 매개 변수 (파일 이름) 가져 오기 --pipe-> // 패턴과 일치하도록 linux 명령으로 바꿀 수 있습니다.
  3. aws cli로 삭제 스크립트 실행

Try to look for the last updated method. Boto3, might change from time to time. I used my_bucket.delete_objects():

import boto3
from boto3.session import Session

session = Session(aws_access_key_id='your_key_id',
                  aws_secret_access_key='your_secret_key')

# s3_client = session.client('s3')
s3_resource = session.resource('s3')
my_bucket = s3_resource.Bucket("your_bucket_name")

response = my_bucket.delete_objects(
    Delete={
        'Objects': [
            {
                'Key': "your_file_name_key"   # the_name of_your_file
            }
        ]
    }
)

참고URL : https://stackoverflow.com/questions/3140779/how-to-delete-files-from-amazon-s3-bucket

반응형