作成済みboto3 clientのendpoint URLを確認する方法をまとめます。
はじめに
こんにちは、@bioerrorlogです。
boto3クライアントの宣言時には、endpoint URLを独自のURLに上書きすることが出来ます。
import boto3 client = boto3.client('s3', endpoint_url='http://my.endpoint:4566')
これはLocalStackなどを使う際に特に便利で、boto3がアクセスするエンドポイントを実際のAWSエンドポイントから独自のURLに振り向けることが出来ます。
しかし逆に、設定されているエンドポイントURLをclientから取得する方法はパッと思い浮かびませんでした。 もしそれが出来れば、デバッグ時に重宝しそうです。
今回は、作成済みboto3 clientから、設定されているendpoint URLを確認する方法まとめます。
環境
boto3 1.18.31 で動作確認してます。
boto3 clientのendpoint URLを確認する
作成したboto3 clientのendpoint URLを確認するには、(少なくとも)以下のふたつの方法があります。
client.meta.endpoint_url
client._endpoint.host
client.meta.endpoint_url
まず一つ目のやり方は、client.meta.endpoint_url
です。
import boto3 client = boto3.client('s3') print(client.meta.endpoint_url) # 出力例: https://s3.ap-northeast-1.amazonaws.com client = boto3.client('s3', endpoint_url='http://localstack:4566') print(client.meta.endpoint_url) # 出力: http://localstack:4566
このようにboto3クライアントに設定されたendpoint URLを都度取得することが出来ます。
※ botocoreにおけるmeta.endpoint_url
実装部分のソースコードはこちら:
botocore/client.py at 6451ae1fad57f4453af97649e7ed9192b0f623be · boto/botocore · GitHub
client._endpoint.host
もう一つのやり方は、client._endpoint.host
です。
import boto3 client = boto3.client('s3') print(client._endpoint.host) # 出力例: https://s3.ap-northeast-1.amazonaws.com client = boto3.client('s3', endpoint_url='http://localstack:4566') print(client._endpoint.host) # 出力: http://localstack:4566
client.meta.endpoint_url
と同様、boto3クライアントに設定されたendpoint URLを取得することが出来ます。
ただ、アンダースコアで始まる属性値_endpoint
に直接アクセスするのは憚られるので、client.meta.endpoint_url
でアクセスした方が自然に思います。
※ botocoreにおける_endpoint.host
実装部分のソースコードはこちら:
botocore/client.py at 6451ae1fad57f4453af97649e7ed9192b0f623be · boto/botocore · GitHub
おわりに
以上、boto3 clientのendpoint URLを確認する方法をまとめました。
なかなかboto3ドキュメントを漁っても該当のやり方を見つけることが出来ず、やり方を調べるのも一苦労でした。 (ネット上のコード例を探したうえで、boto3/botocoreソースコードを辿る必要がありました)
どなたかの参考になれば幸いです。
[関連記事]
参考
botocore/client.py at 6451ae1fad57f4453af97649e7ed9192b0f623be · boto/botocore · GitHub
botocore/client.py at 6451ae1fad57f4453af97649e7ed9192b0f623be · boto/botocore · GitHub
django models - Upload to Amazon S3 using Boto3 and return public url - Stack Overflow