0
0

【AWS】ヘルスチェックUnhealthyの原因は、Routeの「明示的なサブネットの関連付け 」がされていないことだった...

Posted at

概要

AWS Cloudformationでネットワーク周りからEc2サーバ、デプロイ関連まで実装しました。
しかし、TargetgroupのヘルスチェックがUnhealthyのためデプロイが失敗してしまいました。
今回はネットワーク周りのエラーだったので解説します。

原因と解決策

ヘルスチェックがunhealthyを返す、というのは、ターゲット(EC2)へ定期的に行うHTTP GETリクエストに対してレスポンスが帰ってこない場合やそもそもターゲットに到達しない場合に発生するエラーです。

色々な原因が考えられますが、そもそもネットワーク接続に問題がある場合にunhealthyになることがあります。
そして、UnhealthyだとCodedeployでタイムアウトエラーになったりするので後続処理に影響が出ます。

今回の原因はRouteの「明示的なサブネットの関連付け」で、サブネットを関連づけていなかったためでした。
ヘルスチェックは、ルートテーブルがサブネットと正しく関連付けられていることが大前提です。
(もっと言えばインターネットゲートウェイと繋がっているかどうかも)

詳細にいうと、「明示的なサブネットの関連付け」が行われていないと、そのサブネットはメインルートテーブル(デフォルトのルートテーブル)に関連付けられます。ただ、メインルートテーブルのルートが適切に設定されていない場合、そのサブネットからのトラフィックは適切にルーティングされない、ということです。今回はこれが原因でした。

サブネットとルートテーブルを関連付けるためには、Cloudformationで言えばAWS::EC2::SubnetRouteTableAssociationリソースを以下のように追加してあげればOK。

PublicSubnet1RouteTableAssociation:
  Type: AWS::EC2::SubnetRouteTableAssociation
  Properties:
    SubnetId: !Ref PublicSubnet1
    RouteTableId: !Ref RouteTablePublic

PublicSubnet2RouteTableAssociation:
  Type: AWS::EC2::SubnetRouteTableAssociation
  Properties:
    SubnetId: !Ref PublicSubnet2
    RouteTableId: !Ref RouteTablePublic

# 他のサブネットとルートテーブルの関連付けも同様に追加

ということで、サブネットとルートテーブルの関連付けを自動化でき、ヘルスチェックエラーが解決できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0