localstackのバージョンを上げたらSQS周りでハマった

bug: SQS API is not respecting the region defined in request headers · Issue #6102 · localstack/localstack · GitHub

上のissueに関係するものでした。タイトルにbugって書いてあるが、bugじゃなく仕様のようです。

バージョンアップ前は

# 環境変数
SQS_URL=http://localstack:4566/000000000000/app_name
# config/initializers/sqs_active_job.rb
Aws::Rails::SqsActiveJob.configure do |config|
  config.logger = ActiveSupport::Logger.new($stdout)
  config.max_messages = 5
  config.queues = { default: ENV.fetch('SQS_URL', nil) }
  config.client = Aws::SQS::Client.new(region: 'ap-northeast-1')
end

こんな感じで指定していましたが、localstack/localstack:2.0.2のdocker imageを使うようになってからエラーが発生するようになりました。

なので、環境変数で与えてる部分を

SQS_URL=http://localstack:4566/000000000000/ap-northeast-1/app_name

こんな感じで、regionを追加したら動くようになりました。

この方式は

https://docs.localstack.cloud/user-guide/aws/sqs/#queue-urls

に載っている、SQS_ENDPOINT_STRATEGY= path にしたときと同じ動きですが、SQS_ENDPOINT_STRATEGYはどこにも指定して無いです。

githubのlocalstackのソースコードを読めばわかりそうな感じでしたが、そこまでする理由が今回は見当たらなかったので、そこで調査はやめています。

調査は楽しいですが、しすぎるのも良くないと最近思いました。