2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS】Fargate導入時にハマったことと対応まとめ

Posted at

概要

下記の記事を参考に、RailsアプリケーションがFargate上で動作するよう設定を行ったが、そのままでは動作せず。発生した事象と対応についてまとめ。

環境

  • アプリ

    • ruby 3.0.2
    • rails 6.1.4
    • mysql 8.0.31
  • インフラ
    基本的に元記事の通り。
    HTTPSでアクセスできるようSSL化まで行っている、
    ローカル→(HTTPS)→ALB→(HTTP)→Fargate⇄RDS
    の状態。

タスクを起動し、ドメイン名からアクセスすると、503 service temporarily unavalibanleエラーとなる

各種設定が完了したので、Fargateを起動しようと、下記操作を実施した。

  • ECS/タスク定義/アクション/タスクの実行
    image.png

  • ECS/クラスター/タスク/Runningにてタスクの起動を確認。
    image.png

タスク詳細のログでも正常に起動していることが確認できた。
しかし、この状態で、ドメイン名からアクセスをすると、503 service temporarily unavalibanleエラーとなる。

原因:サービスからではなくスタンドアロンでタスクを実行していた

タスクには、

  • スタンドアロンのタスク
  • サービスタスク

の2種類が存在する。
これまで起動していたのは、スタンドアロンのタスクであり、
ALBを介したアクセスを実現するためには、サービスからタスクを起動する必要がある。

参考

サービスタスクの起動

元記事に沿ってサービス自体は作成していたため、そちらを利用。

  • ECS/クラスター/サービスタブ/対象サービスを選択/更新
    image.png

  • 新しいデプロイの強制にチェックを入れ、サービスの更新ボタンを押下

これで、サービスに紐付けられているタスクが起動する。

サービスから起動されたタスクは、対象タスクの詳細で、
グループ service:サービス名
となっている。

タスクが起動→停止→再起動を繰り返しており、依然アクセスできない

上記までの操作で、サービスからタスクを実行することができたが、実行されたタスクが、自動的に起動→停止→再起動を繰り返している。
ALBに設定しているターゲットグループのHealth status detailsは、Health checks failedとなっている。

原因:ALBのヘルスチェックが失敗していることで、タスクが停止されていた

参考

(抜粋)

ALBのヘルスチェックで異常と判定したターゲットに紐づくECSタスクはECSが停止します
そしてサービスに設定したタスクの数に達するまで新しいタスクを作成します

ヘルスチェックが失敗する原因は?

①セキュリティグループの設定がうまくできていない

サービスタスクのセキュリティグループは、サービス作成時に設定する必要あり。
更新では修正できなかったため、作り直す。

image.png

このセキュリティグループのインバウンドのルールにて、ALBからのアクセスを許可すればOK。
タスクのログにて、compile完了後であれば、curl http://タスクIPで疎通が確認できる状態となった。

しかし、compile完了とほぼ同時に、タスクが停止→再起動されてしまう。
この時点では、ALBに設定しているターゲットグループのHealth status detailsは、Health checks failed with these codes: [502]となっている。

②アプリケーション起動完了前にヘルスチェックが実行されている

タスクのログでは、タスク起動直後から断続的にヘルスチェックが実行され、compile完了時点で規定の失敗回数に達してしまっていることで、ヘルスチェック失敗とみなされているように見受けられた。
アプリケーション起動完了後にヘルスチェックが開始されるようにするため、下記設定を行う。

  • ECS/クラスター/サービスタブ/対象サービスを選択/更新
  • ステップ3ヘルスチェック の猶予期間にて、十分な時間を設定する。
    image.png

参考

ここまでの設定を行うことで、ブラウザ上で、ドメイン名からアプリケーションにアクセスすることができた。

最後に

より良い方法や間違い等ありましたらご指摘いただけますと幸いです!

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?