カテゴリー
サインイン 新規登録

間違いや改善の指摘

内容の技術的な誤り・誤字脱字やミスのご報告・解説やトピックの追記/改善のご要望は教材をさらに良くしていく上でとても貴重なご意見になります。

少しでも気になった点があれば、ご遠慮なく投稿いただけると幸いです🙏

実際には誤りではなく勘違いであっても、ご報告いただけることで教材のブラッシュアップにつながります。

質問ポリシー①

教材受講者みなさんのスムーズな問題解決のために、心がけていただきたいことがあります。

教材の内容に関する質問を投稿しましょう

教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。

その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。

0-1

RailsをAWSに自動デプロイしよう!

RailsをAWS(EC2)に自動デプロイする方法を学ぶ

本教材では、Railsチュートリアルで作成するアプリケーションをCIツールであるGitHub Actionsで自動テストし、AWS(EC2)に自動デプロイする仕組みの構築方法を学びます。

このようなCI/CDパイプラインをあらかじめ構築しておくことで、バグの発生を抑えつつ、アプリケーションの機能追加などを1日に何回も本番環境にリリースすることが可能となります。

CI/CDとは、以下のような仕組みのこととなります。

  • CI(継続的インテグレーション)
    • 変更されたソースコードがGitHubなどのリポジトリに提出(プッシュ)されるたびに自動でテストを行うことで、変更後のソースコードをリポジトリのメインライン(mainブランチなど)に統合(gitで言うところのマージ)可能な状態にする仕組み
  • CD(継続的デリバリー)
    • メインラインのソースコードを自動で本番環境などにデプロイする仕組み

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

学習内容

本教材を通じて、以下について学ぶことができます。

  • 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レコードの登録

作成物のイメージ

本教材完了時点の構成図は以下になります。

Image from Gyazo

本教材の対象者

  • 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のインフラ構築や自動テストについて解説を最小限としている箇所があります。

具体的には、以下の3点について教材の取り扱い範囲外としています。

1. 登場するAWSリソースの構築方法を漏れなく解説すること

本教材で登場するAWSのリソースの大半はテンプレートファイル(CloudFormation)を使って自動で作成します。具体的には以下のAWSリソースとなります。

  • VPC、サブネット、ルートテーブル、インターネットゲートウェイ、セキュリティグループ、Elastic IP、EC2

よって、これらのAWSリソースに関しては、AWSの入門教材などでよく登場するような、AWSのマネジメントコンソール(管理画面)でひとつひとつ作成する方法を説明していません。ご注意ください。

なお、以下については詳細に解説します。

  • Railsを動かすために必要なソフトウェアをEC2にインストールする手順
  • S3とIAMロールの作成
  • NATゲートウェイの作成とプライベートサブネットのルーティング設定
  • ALBの作成
  • 踏み台サーバー(EC2)の作成

2. ポートフォリオとして求められるレベルのインフラ実装

以下のような実装はポートフォリオとしては求められるレベルかと思いますが、本教材においては実装方法のヒントを最終章に記載するだけに留めていますので、ご了承ください。

  • メールをどの宛先にも発信できるようにする(Mailgunのプラン変更等)
  • Railsのログのローテーション
  • RDSの構築(本教材ではデータベースとしてRDSは使用せず、HerokuのPostgreSQLをAWSのEC2から接続して使用します)

3. 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技術に対する広く一般的な質問は回答対象外としていますのでご了承ください。そうした質問はメンターサービスなどをご利用ください。

また、教材のアプリを参考にして作った、独自の実装部分が含まれるアプリのエラーや不具合に関する質問も回答対象外としております。

現在のパート (0)
全パート (24)
みんなで助け合おう!
現在のパートのディスカッション 全0件