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
関連記事
実行されている環境が AWS Lambda かどうか判定する方法
2022/10/23
SNS + Lambda vs SNS + SQS + Lambda
2022/10/4