AWS SDK で getaddrinfo で API コールが失敗する時の対処

Published: 2022/11/6


AWS SDK (ruby) を用いて開発していたところ、 API の実行にあたって以下のようなエラーが発生した。

Seahorse::Client::NetworkingError: Failed to open TCP connection to サービス名.ap-northeast-1.amazonaws.com:443 (getaddrinfo: Name or service not known)

ネットワーク周りの制限は特に行っていないにもかかわらず、なぜこれが起きるのか、一瞬分からなかったのでそのメモ。

結論: 指定リージョンでサポートされていない API を呼んでいる

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

上記 URL にある通り、各 AWS のサービスは、特定の命名規則に従ってそのエンドポイントの名前が決まっている。

AWS SDK は、クライアントの初期化時に指定された region 名を利用して、自分が接続しにいくべきエンドポイントのドメイン名を裏側で(機械的に)決定している。 呼び出したいサービスがそのリージョンでまだサポートされていないとき、なので、 AWS SDK の client が region から機械的に決定したドメイン名に対して、そのエンドポイントないしサービスは構築されておらず、ドメイン自体が存在しない、ということになるので、結果、 AWS サービスの API エンドポイントに対する getaddrinfo が失敗して、冒頭に記述したような例外が結果として投げられる。

対処方法としては、呼び出そうとしている AWS の機能がサポートされているリージョンを調査して、それを client に指定することで、このエラーは回避できる。


Tags: aws-sdkaws

関連記事