Pythonライブラリboto
を使用してAmazonS3に接続し、静的Webサイトのバケットとキーを作成しています。私のキーと値は動的に生成されるため、Webインターフェイスを介さずにプログラムでこれを実行しているのはなぜですか(Webインターフェイスを使用して機能します)。私のコードは現在次のようになっています:
import boto
from boto.s3.connection import S3Connection
from boto.s3.key import Key
conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = conn.create_bucket(BUCKET_NAME)
bucket.configure_website('index.html', 'error.html')
bucket.set_acl('public-read')
for template in ['index.html', 'contact-us.html', 'cart.html', 'checkout.html']:
k = Key(bucket)
k.key = key
k.set_acl('public-read')
k.set_metadata('Content-Type', 'text/html')
k.set_contents_from_string(get_page_contents(template))
このコードでさまざまなエラーや問題が発生しています。キーがすでに存在し、このコードを使用してキーを更新した場合、各キーのACLをに設定しpublic-read
ましたが、ブラウザーでファイルを表示すると、403の禁止エラーが発生します。
すべてのキーを削除して最初から再作成しようとしましたが、NoSuchKey
例外が発生しました。明らかに、私はそれを作成しようとしているので、キーはありません。
私はこれを間違った方法で行っていますか?キーを更新するのではなく、キーを作成するためにこれを行う別の方法はありますか?そして、許可が固執しないときに、ある種の競合状態が発生していますか?