RailsアプリをAWS(ECS)にデプロイして学んだこと
私は現在、Ruby on Railsを中心にWeb開発を学びながら、自分のアプリを作っています。
その中で、「アプリケーションを作ること」と「それを安定して動かすこと」は別のスキルだと感じるようになりました。
そこで今回、自分のRailsアプリをHerokuからAWSへ移行し、インフラの仕組みを実際に触りながら学んでみました。
作成したアプリについて
今回デプロイしたのは、自分で作っているWebアプリ「Uruuru」です。
多言語対応のフリーマーケットアプリで、ユーザーが商品を投稿したり、閲覧したりできるシンプルなサービスです。
Railsで開発し、以下のような機能があります。
・ユーザー認証
・商品投稿 / 編集 / 削除
・画像アップロード(S3)
・多言語対応(i18n)
・AIによる商品説明生成
AWS構成
今回のデプロイでは、以下のAWSサービスを使用しました。
・ECS (Fargate)
・ECR
・RDS (PostgreSQL)
・S3
・Application Load Balancer
・CloudWatch
・SSM Parameter Store
アプリはDockerコンテナ化し、ECRへプッシュし、ECS Fargateで実行しています。
また、環境変数やシークレット情報はSSM Parameter Storeで管理しました。
CIの構築
GitHub Actionsを使ってCIも構築しました。
主に以下の処理を自動化しています。
・RSpecによるテスト実行
・RuboCopによるコードチェック
これにより、コードをpushした際に自動でテストが実行されるようになり、コード品質の維持にもつながりました。
デプロイで苦労したこと
AWSのデプロイではいくつかの問題にも直面しました。
例えば、
・IAMの権限設定エラー
・ECSのデプロイ失敗
・環境変数の設定ミス
・コンテナのヘルスチェック失敗
などです。
特に、ECSのデプロイが失敗してロールバックされたときは原因を見つけるのに時間がかかりましたが、CloudWatchログを確認することで問題を特定することができました。
学んだこと
今回の経験を通して、アプリケーション開発だけでなく、それを支えるインフラの重要性を強く感じました。
実際に自分で構築してみることで、
・Dockerによる環境の再現性
・ログの重要性
・安全なデプロイの仕組み
など、多くのことを学ぶことができました。
今後について
今後はCI/CDの自動化や、より安全なデプロイフローの構築にも挑戦していきたいと考えています。
アプリケーション開発だけでなく、サービスを安定して運用するためのインフラ技術についても理解を深めながら、エンジニアとして成長していきたいです。
uru-uru.com