web-dev-qa-db-ja.com

Amazon s3バケットからファイルを削除する方法は?

Amazon s3バケットから必要なファイルを削除するコードをpythonで記述する必要があります。Amazons3バケットに接続し、ファイルを保存することもできますが、どのように削除できますかファイル?

64
Suhail

ボトを使用してそれを行うもう1つの方法を見つけました:

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)
79
Suhail

_boto3_(現在のバージョン1.4.4)を使用する場合は、 S3.Object.delete() を使用します。

_import boto3

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

Python boto3 SDK (および資格情報がAWS用にセットアップされていると仮定)を使用して、次はバケット内の指定されたオブジェクトを削除します。

import boto3

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

このような簡単な方法がないことに驚いています: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()
3
Cyril N.

どのインターフェース経由? RESTインターフェイスを使用すると、単に 削除を送信

_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>
_

Pythonライブラリ boto など)を使用している場合、 delete_key() のような「削除」機能を公開する必要があります。 =。

2
T.J. Crowder

それは私のために働いています。

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)   
1
muthu

今のところ、Linuxユーティリティ s3cmd を使用して問題を解決しました。 Pythonで次のように使用しました。

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

aws cliを使用して行うことができます: https://aws.Amazon.com/cli/ およびいくつかのUNIXコマンド。

このaws cliコマンドは動作するはずです:

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

サブフォルダーを含める場合は、フラグ-recursiveを追加する必要があります

またはUNIXコマンドの場合:

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. 4番目のパラメーター(ファイル名)を取得-pipe->//パターンに一致するようにlinuxコマンドで置き換えることができます
  3. aws cliで削除スクリプトを実行します
1
ggcarmi

最終更新方法 を探してみてください。 Boto3は、時々変更される可能性があります。私は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
            }
        ]
    }
)

0
Javi