作成済みboto3 clientのendpoint URLを確認する方法をまとめます。
はじめに
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/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/botocore/client.py at 6451ae1fad57f4453af97649e7ed9192b0f623be · boto/botocore · GitHub
おわりに
以上、boto3 clientのendpoint URLを確認する方法をまとめました。
なかなかboto3ドキュメントを漁っても該当のやり方を見つけることが出来ず、やり方を調べるのも一苦労でした。 (ネット上のコード例を探したうえで、boto3/botocoreソースコードを辿る必要がありました)
どなたかの参考になれば幸いです。
[関連記事]
参考
- botocore/botocore/client.py at 6451ae1fad57f4453af97649e7ed9192b0f623be · boto/botocore · GitHub
- botocore/botocore/client.py at 6451ae1fad57f4453af97649e7ed9192b0f623be · boto/botocore · GitHub
- Add environment variable to override endpoint_url (#2099) by rwillmer · Pull Request #2746 · boto/boto3 · GitHub
- django models - Upload to Amazon S3 using Boto3 and return public url - Stack Overflow
- GitHub - localstack/localstack: 💻 A fully functional local AWS cloud stack. Develop and test your cloud & Serverless apps offline