RDSでデータベースを構築する方法をまとめます。
RDSとは
フルマネージドなリレーショナルデータベースサービス。
構築/運用の手間を軽減し、AWSエンジニアによるデータベース設計のベストプラクティスが適用されるので、コア機能の開発に注力出来ます。
データベースを構築/運用する上で以下の作業があります。
オンプレは全て、EC2上に構築する場合はアップデート以上は自身でやる必要がありますが、RDSはアプリ最適化のみで良いので楽です。
- アプリ最適化(アプリケーションに対してDBを最適化する)
- スケーリング
- バックアップ
- アップデート
- OSインストール
- 物理サーバー設置
利用可能なエンジン
- MySQL
- PostgreSQL
- Oracle
- Microsoft SQL Server
- Amazon Aurora
- MariaDB
RDSはフルマネージドなので直接コンフィグを変更することが出来ません。(MySQLであればmy.cnf
など)
代わりとしてパラメータグループが提供されており、こちらで設定することができます。
パラメータグループ | 説明 |
---|---|
DBパラメータグループ | DB接続数などDB設定値を制御 |
DBオプショングループ | RDSへの機能追加を制御(Memcache使うなど) |
DBサブネットグループ | RDSを起動させるサブネットを指定 |
RDSの特徴
可用性の向上
マルチAZを簡単に構築できる。他には、マスタースレーブ構成でレプリケーションで同期したり、障害発生時に自動でスレーブに切り替わるといったことが簡単に構築できます。
パフォーマンスの向上
リードレプリカを簡単に構築できる。読み書き用のマスターと読み取り専用のDBの構築も簡単にできます。
運用コストの軽減
以下の機能が用意されているため、運用コストを軽減できます。
- 自動的なバックアップ
- 1日1回の自動バックアップ(スナップショット取得)
- スナップショットを基にDBインスタンスを作成
- 自動的なソフトウェアメンテナンス
- 指定した曜日、時間帯にアップデートを実施するといったことが可能
- 監視
- 各種メトリクスを60秒間隔で取得・確認できる
プライベートサブネットの作成
マルチAZ構成でRDSを構築してみます。
まず、マルチAZ用のプライベートサブネットを別アベイラビリティゾーンに作成します。
RDSの作成
RDS用のセキュリティグループの作成
セキュリティグループ名を指定します。
ルールはインバウンドのタイプをMYSQL/Aurora
、ソースはカスタムを選択し接続するWebサーバ(EC2)に設定しているセキュリティグループを指定します。
こうすることでWebサーバからの接続のみを許可できます。
サブネットグループを作成
VPC内にあるサブネットを複数指定して、RDSが起動するサブネットを指定する設定します。
マルチAZで複数のサブネットを使用するためです。
- DBサブネットグループを作成で、名前、説明、VPCと1aと1cのプライベートサブネットを作成します。
RDS作成時にこのサブネットグループを指定すると、それぞれのアベイラビリティゾーンでRDSインスタンスが作成されます。
パラメータグループの作成
DBコンフィグを設定するためのパラメータグループを作成します。
- パラメータグループの作成を開き、ファミリー、グループ名、説明を入力します。
- 作成したパラメータグループを開きます
変更可能、はtrue、そうでなければfalseが表示されます。
適用タイプは、dynamicは動的に反映され、staticだとDBインスタンス起動時に反映されます。
オプショングループの作成
RDSを作成
-
RDSからデータベースを作成を選択します。
-
標準作成
、エンジンのタイプはMySQL
、バージョンは最新、テンプレートは開発/テスト
を選択します。
本番稼働は料金が高くなるのと、無料利用枠だと設定できる項目に制限があるためです。
-
DBインスタンスサイズはバースト可能で安価な
db.t2.micro
を選択、ストレージは初期値でスケーリングを無効にしておきます。
-
接続はVPCは作成したもの、追加の接続設定でサブネットグループ、パブリックアクセス無効化、VPCセキュリティグループに作成したDBのセキュリティグループを指定します。
-
アベイラビリティゾーンは1a、データベース認証はそのままにします。
-
追加設定のデータベース名は必要に応じて設定します。DBパラメータグループとオプショングループは作成したものを指定します。バックアップは有効化で保持期間は30日にしておきます。
-
バックアップウィンドウはバックアップ開始時間を指定する場合に指定、UTCなのでバックアップ開始したい時間-9時間で指定します。
モニタリングはより詳細なモニタリングをしたい場合はチェックを入れておきます。有料なので無効化、ログのエクスポートはCloud Watch Logsに残すログを指定します。
TIPS
スナップショットを手動で取得した場合は、自動で削除されなません。RDSを削除してもです。
手動で取得したスナップショットも料金が掛かるので忘れず削除しておきます。
本番のRDSインスタンスはなるべく停止しない運用にします。
停止に時間が掛かるのと、AWS側のリソースが枯渇してしばらく起動できない問題が発生する可能性もあるためです。
WebサーバーからRDSに接続する
WebサーバーからRDSに接続してみます。
-
MySQLクライアントをインストールします。EC2にSSHログインし、インストールします。
sudo yum -y install mysql
-
接続
mysql -h sample-web.cc9fmm97o3bv.ap-northeast-1.rds.amazonaws.com -u root -p