AWS構築手順RDSによるDB構築

本章では、RDSを利用したデータベースの構築手順について説明します。

サブネットグループ

まず、DBに利用するサブネットグループを作成しておきます。

  1. RDSダッシュボード→サブネットグループを選択します。リージョンは東京を選択してください。 RDSキャプチャ1
  2. DBサブネットグループの作成をクリックし、以下のパラメータで作成します。 RDSキャプチャ2
    名前 ec-trip-pro-db-subnetgrp
    説明 ec-trip-pro-db-subnetgrp
    VPC ec-trip-pro-vpc
    サブネットには、ec-trip-pro-subnet-db-az-aec-trip-pro-subnet-db-az-bの2つを指定します。

パラメータグループ

次にDBのパラメータグループを作成します。本資料では、エンコードとタイムゾーンのみ設定しています(最低限の設定となります)。 それ以外については、各サービスごとに必要なカスタマイズを行ってください。

  1. RDSダッシュボード→パラメータグループを選択し、パラメータグループの作成をクリックします。 RDSキャプチャ3
  2. パラメータグループファミリーには、mysql5.7を選択し、グループ名等に任意の名前を入力して作成します。 RDSキャプチャ4
  3. 作成したパラメータグループを選択し、パラメータの編集をクリックします。 RDSキャプチャ5
  4. 以下のパラメータについて設定していきます。
    character_set_client utf8mb4
    character_set_connection utf8mb4
    character_set_database utf8mb4
    character_set_results utf8mb4
    character_set_server utf8mb4
    collation_connection utf8mb4_general_ci
    skip-character-set-client-handshake 1
    time_zone Asia/Tokyo
    設定したら、保存します。

DBインスタンスの作成

続けて、DBインスタンスを作成していきます。

  1. RDSダッシュボード→インスタンスを選択し、DBインスタンスの起動をクリックします。 RDSキャプチャ6
  2. EC-TRIPではDBMSにMySQLを選択します。 RDSキャプチャ7
  3. データベースの本番利用か、開発・テスト用かを選択します。本番利用の場合、マルチAZ配置などされますが、無料枠ではなくなります。サービスの要件に応じて選択してください。 本資料では本番稼働用を選択します。 RDSキャプチャ8
  4. DB詳細を指定していきます。本資料では、以下のパラメータを設定します。
    マルチAZ配置を選択することで、無料枠ではなくRDS料金が発生します。前述したとおり、サービスの要件に応じて選択してください。
    RDSキャプチャ9
    DBエンジンのバージョン MySQL 5.7.17
    DBインスタンスのクラス db.t2.micro
    要件に応じたクラスを選択ください
    マルチAZ配置 要件に応じて選択ください
    ストレージタイプ 汎用SSD
    ストレージ割り当て 20GB
    DBインスタンス識別子 ec-trip
    マスターユーザの名前 root
  5. 続けて[詳細設定]の設定を行います。 RDSキャプチャ10
    VPC ec-trip-pro-vpc
    サブネットグループ 前手順で作成したグループ
    ec-trip-pro-db-subnetgrp
    パブリックアクセス いいえ
    アベイラビリティゾーン 指定なし
    VPCセキュリティ部ループ ec-trip-pro-secgrp-db
    ec-trip-pro-secgrp-mainte
    データベースの名前 空欄
    データベースのポート 3306
    DBパラメータグループ 前手順で作成したグループ
    ec-trip-mysql
    タグをスナップショット オフ
    IAMのDB認証 指定なし
    暗号化 いいえ
    バックアップ期間 7日間
    要件に応じて設定
    バックアップウィンドウ 指定なし
    拡張モニタリング はい
    自動アップグレード はい
    メンテナンスウィンドウ 指定なし
    以上でDBインスタンスが作成できました。続けてDBのセットアップを行っていきます。

DBのセットアップ

ローカル端末から作成したインスタンスに接続してDBの設定を行います。 本資料では、クライアントのツールとしてSequel Proを利用します。

  1. まず最初に、作成したRDSインスタンスのエンドポイントを把握しておきます。 AWSマネジメントコンソール上のRDS一覧で対象のインスタンスを選択して確認できます。 RDSキャプチャ11 それをもとに、Sequel Proを起動し、SSHを選択して以下の設定で接続します。 RDSキャプチャ12
    MySQLホスト 上記で調べたエンドポイントのホスト名(ポート除く)部分を指定
    ユーザー名 インスタンス作成時に指定したマスターユーザー
    パスワード インスタンス作成時に指定したマスターパスワード
    データベース 空欄
    ポート 3306
    SSHホスト 前章で作成したメンテサーバのパブリックIPアドレス
    SSHユーザー SSH接続ユーザー名(本手順ではmainte)
    SSHパスワード 前章でダウンロードしたSSHキーを指定
    SSHポート 本手順では22012
  2. 接続できたら、まず本番環境のDBを作成します。本番DBの名前は、サービス名のRailsルールに沿って設定してください。
    以下はSQLコマンドです。本来のRailsではDBはbin/rails db:createで作成すべきですが、本資料ではSQLで作成します。
    CREATE DATABASE `ec-trip_production`;
    
  3. 次に、以下のSQLでアプリケーションで利用するDBユーザを作成します(アプリケーション専用のユーザーを作成し、マスターユーザー以外での接続とします)
    ユーザー名とパスワードは任意の値を指定してください。
    --// DB名: ec-trip_production
    --// ユーザー名: ec-trip_app_user
    --// パスワード: dbp@ssw0rd
    GRANT ALL ON `ec-trip_production`.* to `ec-trip_app_user`@'10.0.%' IDENTIFIED BY 'dbp@ssw0rd';
    
  4. WebAppサーバーから作成したユーザーでRDSに接続可能なことを確認します。SSHでWebAppサーバーに接続します。
    # ローカルからメンテサーバへSSH接続
    $ ssh ec-trip.pro.mainte
    
    # メンテサーバからWebAppサーバへSSH接続
    $ ssh -i ~/.ssh/aws-ec2.pem -p 22012 mainte@10.0.10.13
    
    # WebAppサーバで以下のコマンド実行でMySQL接続が可能なことを確認
    $ mysql -u ec-trip_app_user -p -h ec-trip.c1ailbfpp85q.ap-northeast-1.rds.amazonaws.com
    
    mysql>
    
    # 本番DBに接続可能なことを確認
    mysql> USE ec-trip_production;
    
    # Database changedと表示されたらOK
    

以上でRDSの設定を完了します。次章では、WebAppサーバに対してCapistranoの設定を行い、デプロイを実行します。