web-dev-qa-db-ja.com

アマゾンウェブサービスでboto3からURLを生成する方法

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をご支援ください

25

結果を取得でき、署名付き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')
57
omuthu