web-dev-qa-db-ja.com

python boto3を使用してs3オブジェクトをあるバケットから別のバケットにコピーする方法

あるs3バケットから別のバケットにファイルをコピーしたい。次のエラーが表示されます。

s3.meta.client.copy(source、dest)
TypeError:copy()は少なくとも4つの引数を取ります(3つ指定)

ドキュメントを読んで解決策を見つけることができません。ここに私のコードがあります:

#!/usr/bin/env python
import boto3
s3 = boto3.resource('s3')
source= { 'Bucket' : 'bucketname1','Key':'objectname'}
dest ={ 'Bucket' : 'Bucketname2','Key':'backupfile'}
s3.meta.client.copy(source,dest)
9
vishal.k

あなたが試すことができます:

import boto3
s3 = boto3.resource('s3')
copy_source = {
      'Bucket': 'mybucket',
      'Key': 'mykey'
    }
bucket = s3.Bucket('otherbucket')
bucket.copy(copy_source, 'otherkey')

または

import boto3
s3 = boto3.resource('s3')
copy_source = {
    'Bucket': 'mybucket',
    'Key': 'mykey'
 }
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey')

パラメータの違いに注意してください

23
Adarsh

S3サービスリソースを使用しているので、独自の copy method を最後まで使用しないのはなぜですか?

#!/usr/bin/env python
import boto3
s3 = boto3.resource('s3')
source= { 'Bucket' : 'bucketname1', 'Key': 'objectname'}
dest = s3.Bucket('Bucketname2')
dest.copy(source, 'backupfile')
2
hjpotter92

これはドキュメントの構文です

import boto3
s3 = boto3.resource('s3')
copy_source = {
'Bucket': 'mybucket',
'Key': 'mykey'
}
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey')

決定バケットとキーを別々に指定する必要があります。 http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.copy

0
Jibran