S3にバケットがあり、そこにある画像のURLをプルしようとしています。
私はboto3を使用していますが、boto3にはgenerate urlメソッドが実装されていないようです。
このようなURLを生成するコアメソッドがあり、
import botocore.session
session = botocore.session.get_session()
client = session.create_client('s3')
presigned_url = client.generate_presigned_url(
'get_object', Params={'Bucket': self.bucket_name, 'Key': self.key})
強制されていることの1つは、セッションオブジェクトを使用して各リクエストとともにパラメーターを送信する必要があることです。そして、上記の方法では、セッション変数(つまり、awsクレデンシャル)を設定できません。
一番近いのはこれです
session = Session(aws_access_key_id='342342342342', aws_secret_access_key='3434234322', region_name='us-east-1')
s3 = session.resource('s3')
object = s3.Object('my-dev-bucket', 'amazonKeyString')
print object.get()["Body"]
これは、と呼ばれるオブジェクトであるAmazon s3オブジェクトを取得します
botocore.response.StreamingBody object at 0x7ffaff8cef50
この方法で画像のURLを取得できますか。
Prabhakar Sをご支援ください
結果を取得でき、署名付きURLを取得する際に問題は発生しませんでした。 aws credsが「〜/ .aws/credentials」ファイルにローカルに保存され、デフォルトのリージョンが必要に応じて設定されるため、デフォルトのセッションを使用しました〜/ .aws/config
import boto3
s3Client = boto3.client('s3')
s3Client.generate_presigned_url('get_object', Params = {'Bucket': 'www.mybucket.com', 'Key': 'hello.txt'}, ExpiresIn = 100)
セッションのパラメーターを渡す必要がある場合は、boto3.sessionをインポートしてカスタムセッションを作成します
import boto3.session
session = boto3.session.Session(region_name='eu-central-1')
s3Client = session.client('s3')