構成ファイル(boto3
)を使用して、~/aws/confg
の特定の変数を上書きしようとしています。ユースケースでは、fakes3
サービスを使用して、S3リクエストをローカルホストに送信します。
boto
(boto3
ではない)で、~/.boto
に次のような構成を作成できます。
[s3]
Host = localhost
calling_format = boto.s3.connection.OrdinaryCallingFormat
[Boto]
is_secure = False
また、クライアントは目的の変更を正常に取得でき、トラフィックを実際のS3サービスに送信する代わりに、ローカルホストに送信します。
>>> import boto
>>> boto.connect_s3()
S3Connection:localhost
>>>
boto3
ライブラリを使用して同様の結果を達成しようとしています。ソースコードを見ると、~/aws/config
の場所を使用できることがわかりました。 unittests
のbotocore
フォルダーにも設定例があります。
希望する動作を実現するために設定を変更しようとしました。しかし、残念ながら機能しません。
設定は次のとおりです。
[default]
aws_access_key_id = XXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYY
region = us-east-1
is_secure = False
s3 =
Host = localhost
clients
変数を上書きする方法は?ホストを設定ファイルに設定することはできませんが、boto3を使用してコードからホストを上書きすることができます。
import boto3
session = boto3.session.Session()
s3_client = session.client(
service_name='s3',
aws_access_key_id='aaa',
aws_secret_access_key='bbb',
endpoint_url='http://localhost',
)
その後、通常どおり対話できます。
print(s3_client.list_buckets())
boto3
は、その構成ファイルからs3の署名バージョンのみを読み取ります。機能リクエストを開くこともできますが、ここではカスタムエンドポイントに対処する方法を示します。
import boto3
from botocore.utils import fix_s3_Host
resource = boto3.resource(service_name='s3', endpoint_url='http://localhost')
resource.meta.client.meta.events.unregister('before-sign.s3', fix_s3_Host)
boto3
が適合を検出すると自動的にエンドポイントをyour_bucket_name.s3.amazonaws.com
に変更するため、メタに関するそのビットは重要です 1 。独自のホストとs3の両方を使用する場合は、機能を完全に削除するのではなく、機能をオーバーライドすることができます。
別の方法:
import boto3
s3client = boto3.client('s3', endpoint_url='http://X.X.x.X:8080/',
aws_access_key_id = 'XXXXXXX',
aws_secret_access_key = 'XXXXXXXX')
bucket_name = 'aaaaa'
s3client.create_bucket(Bucket=bucket_name)
boto3リソースを使用:
import boto3
# use third party object storage
s3 = boto3.resource('s3', endpoint_url='https://URL:443',
aws_access_key_id = 'AccessKey',
aws_secret_access_key = 'SecertKey')
# Print out bucket names
for bucket in s3.buckets.all():
print(bucket.name)