このpythonスクリプトを使用して、ローカルフォルダからS3フォルダに変更または新しく作成したファイルをアップロードしています。ローカルファイルとS3の内容を確認して変更したファイルをアップロード
スクリプトが機能しません。それはちょうどバケット名を得ることに失敗した。私はpython2.7でbotoを使用しています。私はグーグルで答えは得られませんでした。
ご迷惑をおかけして申し訳ございません。
多くのありがとうございます。ここで
はここでエラー
Traceback (most recent call last):
File "s3update.py", line 20, in <module>
bucket = conn.get_bucket(BUCKET_NAME)
File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 506, in get_bucket
return self.head_bucket(bucket_name, headers=headers)
File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 539, in head_bucket
raise err
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
であるあなたは、あなたのバケット名が正しく、あなたがそれにアクセスする権限を持っていることだけでなく、存在を確認する必要がありますコード
#!/usr/bin/env python
# Compare a file on S3 to see if we have the latest version
# If not, upload it and invalidate CloudFront
import fnmatch
import os
import boto
import pprint
import re
import hashlib
from boto.s3.key import Key
# Where source is checked out
SOURCE_DIR = '/Downloads/local/folder'
BUCKET_NAME = 's3bucket'
# Connect to S3 and get bucket
conn = boto.connect_s3()
bucket = conn.get_bucket('s3bucket')
# Shortcut to MD5
def get_md5(filename):
f = open(filename, 'rb')
m = hashlib.md5()
while True:
data = f.read(10240)
if len(data) == 0:
break
m.update(data)
return m.hexdigest()
def to_uri(filename):
return re.sub(SOURCE_DIR, '', f)
# Assemble a list of all files from SOURCE_DIR
files = []
for root, dirnames, filenames in os.walk(SOURCE_DIR):
for filename in filenames:
files.append(os.path.join(root, filename))
# Compare them to S3 checksums
files_to_upload = []
for f in files:
uri = to_uri(f)
key = bucket.get_key(uri)
if key is None:
# new file, upload
files_to_upload.append(f)
else:
# check MD5
md5 = get_md5(f)
etag = key.etag.strip('"').strip("'")
if etag != md5:
print(f + ": " + md5 + " != " + etag)
files_to_upload.append(f)
# Upload + invalidate the ones that are different
for f in files_to_upload:
uri = to_uri(f)
key = Key(bucket)
key.key = uri
key.set_contents_from_filename(f)
# CloudFront invalidation code goes here
権限を持って何かする必要がありますか? –
権限はOKです。私はBoto3でバケット名を得ることができます。しかし、私はboto3でこのスクリプトを修正する方法を知らない。 –
バケット作成者のみがオブジェクトを追加する完全な権限を持ちます。あなたは他のアクセスキーに許可を与える必要があります。 – mootmoot