【1章】はじめに

この記事では,画像投稿機能の付いた Rails 6 のアプリを AWS EC2 にデプロイするまでの全過程を解説します。

Heroku にデプロイしたことはあるけれど,AWS にデプロイしたことがない」という方を対象としますので,AWS の操作は,直感的に操作できる AWS マネジメントコンソール で行います。

AWS CLITerraform などのツールは使用しませんので,あらかじめご了承下さい。

1.1 注意事項

この記事における注意事項を列記します。

料金

AWS は有料のサービスで,いわゆる従量課金制です(サービスの使用量に応じて料金が決まります)。

この記事の構成で AWS を利用した場合,ポートフォリオのようにあまりアクセスが来ないアプリであっても,(無料利用枠を使用する前提で)月におよそ3000円前後かかります。

RDS, ALB などを使用せず, EC2 にデータベースシステムをインストールする構成にすればもっと安く済ませることができますが,ポートフォリオのアピール材料としては弱くなるでしょう。

なお,エラーが発生した際に原因を特定しやすくするため,AWS へのデプロイはアプリの 完成後ではなく開発初期の段階 から行うことをお勧めします。

ただ,料金の問題がありますので,アプリの開発初期は Heroku にデプロイし,仕上げの段階で AWS にデプロイするという手法もありでしょう。

Railsアプリの条件

AWSにデプロイ予定のアプリが,以下の条件を満たすことを前提とします。

  • アプリの Rails のバージョンが 6 であること

  • データベースは MySQL 5.7 もしくは PostgreSQL を使用

  • 画像投稿機能がある場合は CarrierWave を使用

6.1 に画像投稿機能の付いたサンプルアプリを作成する方法を紹介しておりますので,必要がございましたらご利用下さい。

動作確認時の環境

  • Ruby 2.7.3
  • Rails 6.1.3.2
  • Puma 5.3.1

構成図

以下のような一般的な構成を目指します。(料金の都合上,冗長化は行いません)

構成図

サーバー環境

  • 【Web サーバー】 Nginx
  • 【アプリケーションサーバー】 Puma

使用する AWS のサービス

  • VPC(Amazon Virtual Private Cloud)
  • RDS(Amazon Relational Database Service)
  • EC2(Amazon Elastic Compute Cloud)
  • Route 53
  • ACM(Certificate Manager)
  • ALB(Application Load Balancer)
  • S3(Amazon Simple Storage Service)
  • IAM(AWS Identity and Access Management)
  • CloudFront

基礎知識の解説

この記事は,「画像投稿機能の付いた Rails アプリを AWS EC2 にデプロイし,独自ドメインでアクセスできるようにする」ことを主目的としております。

最低限度知っておくべき内容は触れますが,インフラの基礎知識は解説しません。

AWS に必要な基礎知識を学べる本はたくさんありますし,Udemyにも解説動画があります。デプロイの完了後でもよいですので,是非学習されることをお勧めします。

注意点

理解が不十分な状態で進められる場合は, 絶対にミスをしない ように気を付けて下さい。1つのミスで最初からやり直すことになり,数時間の作業が無駄になる可能性があります。

メモ

作業中にパスワードなど各自設定が異なる部分が複数存在します。メモ帳に以下を貼り付け,決まり次第埋めていくようにされるとよいでしょう。

メモ
【アプリ名】



【RDS】

●マスターユーザー名



●マスターパスワード


●エンドポイント


【EC2】

●Elastic IP


●sshでサインインするときのコマンド

ssh アプリ名

●ユーザー名



●パスワード

【ドメイン】

●ドメイン名


●ネームサーバー情報

【S3】

●バケット名


●リージョン


【IAM】

●ユーザー名


●アクセスキーID


●シークレットアクセスキー


【CloudFront】

static.ドメイン名

まずは,AWSで使用する アプリ名 を決め,上記にメモして下さい。ただし,「aws_sample_app」のように スネークケース 表記であることを前提とします。(アルファベット大文字は使わないで下さい)

「(AWSで使用する)アプリ名」は,「Railsのアプリ名」「GitHubのリポジトリ名」と合わせる方が混乱しづらいと思いますが,同じでなくても問題ありません。

以下, アプリ名 と記載している箇所は,全てこのメモ通りにして下さい。

1.2 AWSアカウントの作成・初期設定

要点のみ記載します。

  • AWSアカウントの作成

    • https://portal.aws.amazon.com/billing/signup
    • メールアドレス・パスワードは超重要です。絶対に忘れないようにし,また他人に知られないように注意しましょう。不正利用されると高額の料金を請求される可能性があります。
    • パスワードは,大文字・小文字・数字・記号を含む16文字以上の強固なものを設定しましょう。
    • サポートプランは特に用事がなければ「ベーシックプラン」でOK
  • 「セキュリティステータス」に全てチェックが入るように設定を進めましょう。

【参考】 https://qiita.com/tmknom/items/303db2d1d928db720888

  • ルートアカウントの MFA を有効化
    • セキュリティ向上のため2段階認証を導入
  • 個々の IAM ユーザーの作成
    • 最初に発行される「ルートアカウント」は,セキュリティの都合上,今後サインインに使用しないようにします
    • 普段のサインインに使用する IAM ユーザーを作成
    • 「パスワードのリセットが必要」は不要なのでチェックを外しましょう
    • 今後のサインインに必要となる「アカウントID」「ユーザー名」「パスワード」を忘れないようにしましょう
  • グループを使用してアクセス許可を割り当て
    • ほぼ全ての権限を持つ「AdministratorAccess」のポリシーを持つグループを作成し,作成した IAM ユーザーを追加
  • IAMパスワードポリシーの適用

最後に「請求アラーム」を作成し,課金状況を確認できるようにしておくことをお勧めします。

【参考】https://www.kakiyoro.com/archives/2198