SQS boto3 send_messageで古いエンドポイントだとWARNINGが出る件
TL;DR
boto3のバージョンが古いと、新しいSQSエンドポイントを指定しても古いエンドポイント形式として送ることがあるようです。特に問題はありませんが、モヤモヤしますね。
起きること
SQSキューを作成します。QueueUrlの形式は sqs.<region>.amazonaws.com/...になっています。
boto3でsend_messageします。
import boto3
client = boto3.client('sqs')
response = client.send_message(
QueueUrl='https://sqs.ap-northeast-1.amazonaws.com/1111222233333/myqueue',
MessageBody='Test message.',
)
この通知Warningが出ます。エラーではなく、動作はします。
FutureWarning: The sqs client is currently using a deprecated endpoint: ap-northeast-1.queue.amazonaws.com. In the next minor version this will be moved to sqs.ap-northeast-1.amazonaws.com.
ap-northeast-1.queue.amazonaws.com
の形式のendpointは古いですよ、ということだそうですが、使っていません・・・。
調べる
レガシーエンドポイント
AWS CLI または SDK for Python を使用する場合は、以下のレガシーエンドポイントを使用できます。
アジアパシフィック (東京) ap-northeast-1 ap-northeast-1.queue.amazonaws.com
と書いてあります。現行のものは
アジアパシフィック (東京) ap-northeast-1 sqs.ap-northeast-1.amazonaws.com
とのことです。現行で入力しているはずなのですが・・・。
クライアントのバージョン
boto3のバージョンは 1.24.68でした。
これを別のバージョン 1.26.12にすると、この通知は出なくなりました。
boto3クライアントが古いバージョンだったので、新しいエンドポイントを入力しているにも関わらず、レガシーの方に置き換えてコールしている、ということなんでしょうか。いまいちよく分かりませんが、現象としてはそういうことのようです。
まとめ
- boto3でSQSにメッセージを送った際に、使っていないはずのエンドポイントを使わないように、というWarningが出たので調べました
- boto3のバージョンが古いのが原因のようでした
Discussion