bugfix> python > 投稿

Python経由で画像をS3にアップロードしようとしています。私のコードは次のようになります。

import os
from PIL import Image
import boto
from boto.s3.key import Key
def upload_to_s3(aws_access_key_id, aws_secret_access_key, file, bucket, key, callback=None, md5=None, reduced_redundancy=False, content_type=None):
    conn = boto.connect_s3(aws_access_key_id, aws_secret_access_key)
    bucket = conn.get_bucket(bucket, validate=False)
    k = Key(bucket)
    k.key = key
    k.set_contents_from_file(file)
AWS_ACCESS_KEY = "...."
AWS_ACCESS_SECRET_KEY = "....."
filename = "images/image_0.jpg"
file = Image.open(filename)
key = "image"
bucket = 'images'
upload_to_s3(AWS_ACCESS_KEY, AWS_ACCESS_SECRET_KEY, file, bucket, key)

このエラーメッセージが表示されます。

S3ResponseError: S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidRequest</Code><Message> The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.</Message> 
<RequestId>90593132BA5E6D6C</RequestId> 
<HostId>...</HostId></Error>

このコードは、このWebサイトのチュートリアルに基づいています。http://stackabuse.com/example-upload-a-file-to-aws-s3/

私はk.set_contents_from_fileとk.set_contents_from_filenameを試しましたが、どちらもうまくいかないようです。

エラーはAWS4-HMAC-SHA256の使用について何かを述べていますが、その方法はわかりません。 AWS4-HMAC-SHA256を使用する以外に、この問題を解決する別の方法はありますか?誰かが私を助けてくれたら、本当に感謝しています。

ありがとうございました!

回答 1 件
  • 使用するだけ:

    import boto3
    client = boto3.client('s3', region_name='us-west-2')
    client.upload_file('images/image_0.jpg', 'mybucket', 'image_0.jpg')
    
    

    コードに資格情報を入れないようにしてください。代わりに:

    Amazon EC2インスタンスからコードを実行している場合は、単にIAMロール 適切な権限を持つインスタンスに。資格情報は自動的に使用されます。

    自分のコンピューターでコードを実行している場合は、AWS Command-Line Interface(CLI) aws configure を使用します  資格情報をファイルに保存するコマンド。これはコードで自動的に使用されます。

あなたの答え