BioErrorLog Tech Blog

試行錯誤の記録

boto3 clientのendpoint URLを確認する | AWS SDK for Python

作成済み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ソースコードを辿る必要がありました)

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

botocore/client.py at 6451ae1fad57f4453af97649e7ed9192b0f623be · boto/botocore · GitHub

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!