よりモダンな構成を取るのであればEC2ではなく、ECS(Fargate)などのコンテナサービスにデプロイすることが望ましいと考えられますが、Herokuデプロイぐらいまでしか経験の無いインフラ初心者であれば、まずはEC2での環境構築とデプロイ方法から学ぶことをおすすめします。

学習時間 | 20時間 |
---|---|
難易度 | 中級 |
質問投稿 | 可 |
RailsアプリケーションをAWSに自動デプロイする方法を学ぼう!
本教材では、Railsチュートリアルで作成するアプリケーションをCIツールであるGitHub Actionsで自動テストし、AWS(EC2)に自動デプロイする仕組みの構築方法を学びます。
RailsをAWS(EC2)に自動デプロイする方法を学ぶ
本教材では、Railsチュートリアルで作成するアプリケーションをCIツールであるGitHub Actionsで自動テストし、AWS(EC2)に自動デプロイする仕組みの構築方法を学びます。
本教材は、Railsチュートリアル完走者向け読み物ガイドの中でも、次のステップの教材のひとつとして紹介されています。
なぜ自動デプロイを学習するのか?
このようなCI/CDパイプラインをあらかじめ構築しておくことで、バグの発生を抑えつつ、アプリケーションの機能追加などを1日に何回も本番環境にリリースすることが可能となります。
CI/CDについての補足
CI/CDとは、以下のような仕組みのこととなります。
- CI(継続的インテグレーション)
- 変更されたソースコードがGitHubなどのリポジトリに提出(プッシュ)されるたびに自動でテストを行うことで、変更後のソースコードをリポジトリのメインライン(mainブランチなど)に統合(gitで言うところのマージ)可能な状態にする仕組み
- CD(継続的デリバリー)
- メインラインのソースコードを自動で本番環境などにデプロイする仕組み
学習内容
本教材を通じて、以下について学ぶことができます。
- RailsチュートリアルのアプリケーションをAWS(EC2) + nginx + pumaの環境で動かす方法
- GitHub Actionsでの自動テストの実行方法
- GitHub ActionsからAWS(EC2)にRailsアプリケーションをデプロイする方法
- GitHub ActionsからEC2にSSHログインしてデプロイ
- GitHub Actions + Capistranoを使ってEC2にデプロイ
- プライベートサブネットにあるEC2へ踏み台サーバー経由でデプロイする方法も解説
また、周辺知識として以下も解説していきます。
- nginxの設定ファイルの構文
- Linuxで新規ユーザーを作り、SSHログイン可能とする方法
- pumaをsystemdで管理する方法
- HTTPS化
- Route53での独自ドメイン登録
- ACMでの証明書発行
- ALBリスナーの登録
- Route53へのALIASレコードの登録
作成物のイメージ
本教材完了時点のインフラ構成図
GitHub Actionsによる自動テスト・自動デプロイ
自動デプロイによる画面デザイン変更
本教材の対象者
- Railsチュートリアルを終えて、AWS(EC2)への自動デプロイ方法を学びたい人
- Rubyの主要なデプロイツールであるCapistranoの使い方を学びたい人
- GitHub Actionsの使い方を学びたい方
受講における必要条件
- Railsチュートリアルを終えている、またはRailsで簡単なアプリを作ったことがあること
- AWSアカウントを持っており、AWSのマネジメントコンソールにログイン可能な、管理者権限(AdministratorAccess)を持ったIAMユーザーを用意できること
- Gitの初歩的な知識があること(ブランチを作る、コミットする、などが行える)
- GitHubの初歩的な知識があること(アカウントを持っていて自分のリポジトリを作ったことがある、プルリクエストを立てることができる)
- Linuxのコマンドの初歩的な知識があること(
ls
,cd
,pwd
,mkdir
,cat
を使ったことがある)
AWSの利用料金について
本教材で利用するAWSリソースについては、一部従量制料金の対象のものがあります。
無料利用枠が設定されたスペックのものを使用するなど教材全体で極力料金を抑えるようにしていますが、無料利用枠の無いNATゲートウェイなども作成するため、利用状況に応じた費用が発生します。
あらかじめご了承ください。
学ばないこと
本教材はメインテーマである自動デプロイを集中的に学べるよう、AWSのインフラ構築や自動テストについて解説を最小限としている箇所があります。
具体的には、以下の2点について教材の取り扱い範囲外としています。
1. 登場するAWSリソースの構築方法を漏れなく解説すること
本教材で登場するAWSのリソースの大半はテンプレートファイル(CloudFormation)を使って自動で作成します。具体的には以下のAWSリソースとなります。
- VPC、サブネット、ルートテーブル、インターネットゲートウェイ、セキュリティグループ、Elastic IP、EC2
よって、これらのAWSリソースに関しては、AWSの入門教材などでよく登場するような、AWSのマネジメントコンソール(管理画面)でひとつひとつ作成する方法を説明していません。ご注意ください。
なお、以下については詳細に解説します。
- Railsを動かすために必要なソフトウェアをEC2にインストールする手順
- S3とIAMロールの作成
- NATゲートウェイの作成とプライベートサブネットのルーティング設定
- ALBの作成
- 踏み台サーバー(EC2)の作成
2. RSpecの解説やRuboCopの追加
GitHub Actionsで実施する自動テストでは、Railsチュートリアルで実装したRSpecによるテストをそのまま実行するだけに留めています。
RSpecのテストを追加したり、RuboCopによるコードの静的解析を追加するといったことは行なっていませんのでご了承ください。
本教材の対応バージョン
- Rails 6.0.3.6
- nginx 1.20
- puma 4.3.6
- Capistrano 3.x
- Amazon Linux 2
本教材で質問対応可能なOSや環境
- Mac OS(M1 Mac含む)
- Cloud9
本教材のローカル開発環境は、教材で用意したDockerの環境をMac OSまたはCloud9から起動させて構築します(構築・利用にあたって必要となるDockerコマンドについては解説するので、Dockerに関する事前知識は不要です)。
なお、このDocker環境はWindowsから直接起動させることも可能だとは思いますが、Windowsは教材の質問対応の対象外としていますのでご注意ください。
回答可能な質問内容とそうでない質問内容
教材を進める中で生じたエラーに関する質問や、教材本文の説明内容がわかりにくい場合に再説明を求める質問に関しては回答可能です。
教材で取り扱っているWeb技術に対する広く一般的な質問は回答対象外としていますのでご了承ください。そうした質問はメンターサービスなどをご利用ください。
また、教材のアプリを参考にして作った、独自の実装部分が含まれるアプリのエラーや不具合に関する質問も回答対象外としております。
カリキュラム
- 2-1 本章の流れ
- 2-2 nginxとpumaの連携
- 2-3 dotenv-railsの使用
- 2-4 環境変数の使用
- 2-5 master.keyの作成
- 2-6 HTTP通信への対応
- 2-7 rbenvへの対応