RailsアプリケーションをAWSにデプロイしてみる
AWSはいぜんに学んだけどすっかり忘れており、そこまで構成にこだわらないのでマネージできるところはマネージしてほしい。
ということで最初に挑戦したのがAWS Elastic Beanstalk。
しかし、ローカルではDockerコンテナを使用している関係でなかなか難しかった。
ならば、と思い次に目をつけたのがApp Runnner
Elastic BeanStalkとどちらがよいの?という記事もさっと目を通して挑戦してみる
ここでApp Runnerを使う上で、Dockerイメージにする必要があったので、ECRを初めて使ってみた。
それから、App Runnerでイメージをpullしてデプロイ。これはめっちゃ簡単。
しかし、データベースのRDBに接続するためにはVPC Connectorを自前で設定する必要があるとのことで、
このあたりを勉強。VPC周りに少しだけ詳しくなる。
Railsのポートが3000番なのだけど80番に接続しようとしてハマったりしてた。
ところが、Cognitoのidpに接続しようとしたときに
Failed to open TCP connection to cognito-idp.ap-northeast-1.amazonaws.com:443 (execution expired)
というエラーが発生。
色々調べてみたけどこのとき原因がわからなかった。
443ということでSSLで通信しようとしてるけど、VCPコネクタを使用している関係で開けてないもよう。。
ただ、最初と比べて
- ECRにイメージがpushされている
- RDSは構築済
- それぞれのセキュリティグループも設定されている
ということで、もはや自分で構築できるのでは?という気持ちになってきた。
ということでAWS ECS(Fargate), ALB, RDSのうちALBまわりを重点的に設定できるかと思い実施。
ところがECSのデプロイで毎回失敗しており、アプリケーションのログを確認すると
HTTP parse error, malformed request: #<Puma::HttpParserError: Invalid HTTP format, parsing fails. Are you trying to open an SSL connection to a non-SSL Puma?>
こんな感じ。
SSLまわりのロードバランスがうまくいっていないのと、Rails側でもProduction環境ではSSLを矯正しているのでエラーになっている模様?
此処から先に進むにはSSL証明を取得する必要がある。
次にドメインをRoute 53にホストゾーンを作成して、ACM証明書を取得する試みを開始。