📑

SQS boto3 send_messageで古いエンドポイントだとWARNINGが出る件

2022/12/28に公開

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は古いですよ、ということだそうですが、使っていません・・・。

調べる

https://docs.aws.amazon.com/ja_jp/general/latest/gr/sqs-service.html

レガシーエンドポイント
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