初学者のため誤り等あるかもしれませんが、本事像で丸3日ほど苦労し参考となる記事がなかったため、雑な記載になりますが備忘もかねて投稿させていただきます。
記載の内容で一旦解決しましたが、今後学習を進める中で根本原因や対処が誤っていた場合は修正するようにいたします。
特殊なケースかもしれませんが、どなたかのお役に立てば嬉しいです。
事象の概要
・Railsで作成したAPIをECS(Fargate)にNginxを使用せずにデプロイしたところ、
CloudWatch上ではRailsサーバが問題なく立ち上がっているにもかかわらず、
ブラウザでECSタスクのPublicIPに接続すると「このサイトにアクセスできません」と出力される。
詳細の状況
・RailsはDockerfileで3000番ポートで立ち上げ。
...
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", "3000"]
...
・Railsはルートディレクトリにアクセスするとjsonで「status: 'ok'」を返す。
対処
以下の二つを行ったところ、なんとかPublicIPとALBのDNSで「{"status":"ok"}」を拝めました。
①Railsを80番ポートで立ち上げて、ロードバランサーのターゲットグループ、ECSタスク定義のコンテナのポートもそれに合わせる。
②DBと接続させる。
(DBと接続させなくてもECSタスクのPublicIPにつなげばRailsのエラー画面までは出るかなと思ってましたが、DBと接続させないとダメでした、、)(Udemy講座で、LaravelはDBがありませんみたいなLaravelのエラーが見れたんだけど、、)
あとがき
「お金を浮かせたい&Nginxまだわからない」というところから、Nginxなしで構築しようとしたのですが、あまりそういった記事がなく、エラーの対処に苦労しました。丸3日無為に過ごしていたところ、以下の記事をもとに構築し直したところ、うまくいきました。。ありがてぇ。。
RailsアプリをEC2からECS/Fargate構成に移行してホストする【ECRへイメージ登録編】 - Qiita
そこから、色々実験したところ、上記の結果にたどり着きました。一応、テスト内容も載せておきます。
テストケース\項目 | rails sのポート指定 | dbとの接続(database.yml) | dockerfileでのdb:migrate | ALBのターゲットのポート | タスク定義で指定するコンテナのポート | タスク定義でのコンテナのメモリ制限、GPUユニット数 | サービスで指定するALBのヘルスチェックの猶予期間 | 結果(タスクのpublic ip) | 結果(ALBのDNS) | メモ |
---|---|---|---|---|---|---|---|---|---|---|
①記事そのまま | 80 | ○(正しく設定) | ○(実施) | 80 | 80 | ○(正しく設定) | ○(300を設定) | ○ | ○ | Qiita記事のまま設定 |
②設定を変えても、タスクのPublicIPとALBのDNSで表示が問題ないものを調査 | 80 | ○ | × | 80 | 80 | ×(空欄のまま) | ×(0を指定) | ○ | ○ | db:migrateをしないで問題なかったのは、DBの情報を使用していなかったからかも。 |
③Railsのポートを3000番にしよう | 3000 | ○ | ○(実施) | 3000 | 3000 | ○(正しく設定) | ○(300を設定) | × | × | うまく行ってほしかった。継続調査。 |
④Railsを80で上げないと行けないのか実験 | 80 | ○ | ○(実施) | 80 | 3000 | ○(正しく設定) | ○(正しく設定) | ○ | × | テストケース③でタスク定義のコンテナのポートを3000にしたら、なぜかpublic IPでは接続できた。Railsは80で上げる必要があるのか…? |
⑤DBと接続させなくてもうまくいくか実験 | 80 | ×(DB名に誤った値を設定) | × | 80 | 3000 | ○(正しく設定) | ○(300を設定) | × | × | DB名を誤って接続できなくすると、publicIPでもブラウザ上で「表示ができません」のエラーが返ってきた。Railsの「DBがみつかりません」みたいなエラーが出るとありがたいのに。。 |
ポート3000がうまくいかないのは納得いかないので、継続調査します。
雑な記載になりましたが、最後までご覧いただき、ありがとうございました!