- クラウド技術
【AWS】EC2(zabbix)からRDS(MySQL)への接続する方法
- #AWS
こんにちは!Smallitの橋本です。
今回はAWSのRDS(MySQL)の設定に関する記事を書こうと思います。
最近zabbixというWeb監視ツールの設定を行ったのですが、EC2にMySQLをインストールするのではなくRDSのMySQLを使用するようにしました。
3日間ほど掛けて、ようやくEC2のzabbixの使用するDBをRDS(MySQL)にすることができました。きっと同じように悩んでる人もいると思いますので、自分の備忘録という意味も含めて記述します。
まずは全体の流れについて紹介します。
-
①AWSのマネジメントコンソールからRDSの作成
-
②RDS(MySQL)でテーブル、ユーザーの作成
-
③各サービス(EC2)からの接続
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
全体像の説明
全体像を表すと上記の図のようになります。インターネットからEC2にアクセスし、そのサービスがRDSに接続できるように設定します。
今回はテストなので、AZ1に作成したプライベートサブネットしか使用しませんが、RDSの設定によっては、片方がだめになったら自動的にAZ2のRDSが起動するように設定もできます。
①AWSのマネジメントコンソールからRDSの作成
それではまず最初にマネジメントコンソールからRDSの作成を行います。
STEP1:異なるAZに1つずつプライベートサブネットを作成
RDSを作成するためには、サブネットグループが必要で、サブネットグループを作成するためには2つのサブネットを指定する必要があります。
そのため事前に、異なるAZにプライベートサブネットを1つずつ作成しておきます。
STEP2:RDSのダッシュボード → サブネットグループ → サブネットグループの作成ボタン
RDS作成の際に使用するサブネットを2つ選択し、サブネットグループを作成します。特に注意すべきことや分かりにくいところはないと思います。
STEP3:RDSのダッシュボード → パラメータグループ → パラメータグループの作成ボタン
パラメータグループとは?
パラメータグループはデータベースの設定ファイルの編集ができます。AWSのRDSのDBの設定ファイルを直接編集できないので、この機能があります。
パラメータグループの作成に関しても、特に注意すべきところや分かりにくいところはないと思います。
STEP4:RDSのダッシュボード → オプショングループ → オプショングループの作成ボタン
オプショングループとは?
オプショングループは、DBの機能的な部分の設定を行います。例えば、プラグインを使いたいときなどに設定を行います。
設定項目に関しては、特に分かりにくいところはないと思いますので省略します。
STEP5:EC2のダッシュボード → セキュリティグループ → セキュリティグループの作成ボタン
-
セキュリティグループ名:わかりやすい名前(例:dev-hashimoto-mysql-security-group)
-
説明:セキュリティグループ名と同じ
-
VPC:RDSを設置したいVPC
-
インバウンドルール(タイプ):MySQL/Aurora
-
インバウンドルール(カスタム):EC2に設定しているセキュリティグループ
EC2に設定しているセキュリティグループを指定することで、そのEC2のアクセスのみを許可する設定ができます。
STEP6:RDSのダッシュボード → データベース → データベースの作成でRDSの作成を行います。
-
データベースの作成方法を選択:標準作成
-
エンジンのタイプ:MySQL
-
エディション:MySQL Community
-
バージョン:MySQL 8.0.23
-
テンプレート:開発/テスト
-
DBインスタンス識別子:わかりやすい名前(例:dev-hashimoto-mysql)
-
マスターユーザー名:admin
マスターユーザーとは、MySQLのテーブルに関する処理をすべて実行できる権限を持つユーザーのことです。アクセス時に利用する名前を決定します。 -
マスターパスワード:独自で決定(例:hashimotopassword)
練習なら「password」でも良いと思います。
-
DBインスタンスクラス:バースト可能クラス
DBの性能を決定します。テストとして環境構築するのであれば、バースト可能クラスが一番安いのです。 -
ストレージタイプ:汎用SSD
-
ストレージの自動スケーリング:チェックなし
データベースの負荷が上がると自動的にスケーリングする機能です。テストでは不要なのでOFFにします。 -
マルチAZ配置:「スタンバイインスタンスを作成しないでください」にチェック
今回はテストなので、マルチAZ配置は実装しません。
-
VPC:RDSを配置したいVPCを選択します。
-
サブネットグループ:STEP2で作成したサブネットグループを指定
-
パブリックアクセス:なし
もしもインターネットからデータベースにアクセスしたいのであれば「あり」にします。基本的にはなしでいいと思います。 -
VPCのセキュリティグループ:STEP5で作成したセキュリティグループを選択
-
アベイラビリティーゾーン:1aを選択します。
-
データベースポート:3306(デフォルトのままでOKです。)
-
データベース認証オプション:パスワード認証
今回はテストなのでパスワード認証を選択します。IAMでもデータベースのアクセスを許可したい場合は、「パスワードとIAMデータベース認証」を選択します。
-
最初のデータベース名:空白
後ほどデータベースを作成していきますので、初期作成はなしで大丈夫です。 -
DBパラメータグループ:STEP3で作成したDBパラメータグループを選択
-
オプショングループ:STEP4で作成したオプショングループを選択
-
自動バックアップ:チェックあり
-
バックアップ保持期間:30日間
-
バックアップウィンドウ:選択ウィンドウ
-
開始時間:19:00
例えば、日本時間午前4時(28:00)にバックアップを開始したい場合19:00を指定します。日本時間午前5時なら20:00に設定します。 -
期間:0.5
バックアップにかける時間のことです。 -
スナップショットにタグをコピー:チェックあり
-
暗号を有効化:チェックあり
-
AWS KMSキー:デフォルトキーを選択
-
拡張モニタリングを有効化:チェックなし
拡張モニタリングを有効化すると、RDSの更に詳しい情報を知ることができます。しかし、料金がかかるのでチェックなしにします。 -
マイナーバージョン自動アップグレードの有効化:チェックあり
-
メンテナンスウィンドウ:選択ウィンドウ
-
開始日:日曜日
-
開始時間:15:00
日本時間0時からメンテナンスを開始したい場合は15:00を指定します。 -
期間:0.5
-
削除保護:チェックなし
今回はテスト環境なので、削除保護の有効化のチェックはなしにします。
これでRDS(MySQL)が作成されました。
②RDS(MySQL)でテーブル、ユーザーの作成
STEP1:TeratermなどでSSH接続し、EC2にMySQLをインストール
1 2 |
sudo yum update |
パッケージ管理ソフトをアップデートするコマンドです。EC2を新規に作成し、SSH接続を行ったら最初に行うコマンドです。
1 2 |
sudo yum -y install mysql |
MySQLをインストールするコマンドです。
STEP2:RDSのエンドポイントのコピー
EC2からRDSに接続するためにRDSのエンドポイントが必要なのでコピーしておきます。
RDSのダッシュボード → データベース → 先程作成したRDS → 接続とセキュリティタブ → エンドポイントをコピー
STEP3:RDSに接続
1 2 |
mysql -h エンドポイント -u admin -p |
RDS(MySQL)に接続するためのコマンドです。「エンドポイント」のところを「STEP2でコピーしたエンドポイント」に書き換えてください。
実行後「Enter Password」とパスワードを求められるので、「①AWSのマネジメントコンソールからRDSの作成のSTEP6のマスターパスワード」で設定したパスワードを入力します。
STEP4:データベース作成
1 |
create database データベース名 default character set utf8 collate utf8_general_cli; |
まずはデータベースを作成します。「データベース名」はEC2にインストールするサービスによってデータベース名を変える必要があります。今回はこの記事を作成するためにDB作成を行ったため、zabbix2にしました。(後で削除します。)
例えば、最近私はzabbixというweb監視ツールのインストールを行い、RDSを使用しました。そのときのコマンドは、
1 |
create database zabbix2 character set utf8 collate utf8_bin; |
でした。
ワードプレスであれば、
1 |
create database wp_db character set utf8 collate utf8_general_cli; |
で良いと思います。
覚えておいたほうが良いこと
-
character set utf8:デフォルトで使用する文字コードにutf8を使用するという意味です。
-
collate utf8_bin:昇降順を指定するコマンドです。
1 2 |
show databases; |
MySQLに作成されたデータベースを確認するコマンドです。作成したデータベースが存在しているか確認してください。
STEP5:ユーザー作成
1 |
create user 'ユーザー名'@'%' identified by 'パスワード'; |
-
ユーザー名:わかりやすい名前
-
%:EC2からRDSへアクセスするため「%」に設定
localhostにMySQLをインストールし、そこにDBを作成する場合は「%」ではなく「localhost」にします。今回はEC2からRDSインスタンスにアクセスするため、どこからでもアクセス可能を意味する「%」に設定します。 -
パスワード:パスワードを設定(例:テスト環境の場合は「password」でもいいと思います)
私の場合はEC2にインストールしたサービスはzabbixであったため、
1 |
create user 'zabbix'@'%' identified by 'password'; |
のコマンドになります。localhostの場合は、
1 |
create user 'zabbix'@'localhost' identified by 'password'; |
になります。
現在はadminユーザー(MySQLに対し、何でもできるユーザー)しかありません。しかし、EC2にインストールするサービスがzabbixであればzabbix用データベース、ワードプレスであればワードプレス用のデータベースに対して処理ができれば良いはずです。
そのため、そのサービス用のユーザーを作成し、権限を付与します。今後EC2からRDSにアクセスする際は、adminユーザーではなく、作成したユーザーでアクセスするようにします。
1 2 |
SELECT Host, User FROM mysql.user; |
ユーザーが正常に作成されているか確認します。
STEP6:ユーザーにDBの操作権限を付与
1 2 |
grant all on データベース名.* to ‘ユーザー名'@'%'; |
例:
1 |
grant all on zabbix.* to 'zabbix'@'%'; |
「grant all on データベース名.*」でデータベース内にある全てのテーブルに対して、すべての権限を付与するという意味です。
1 |
show grants for 'ユーザー名'@'%'; |
で権限が正常に付与されているか確認できます。
STEP7:作成したユーザーでログイン
最後にMySQLからExitし、作成したユーザーでログインできるかを確認します。さらにログインしたユーザーでどのデータベースが参照できるか確認します。
これでRDS(MySQL)にデータベースとユーザーの作成ができました。
③各サービス(EC2)からの接続
最後にEC2にインストールしたサービスからRDSに接続する方法について紹介します。
EC2からRDSの指定したデータベースに接続するためには以下の5つの情報が必要です。
-
ホスト名:RDSのエンドポイント
-
ポート番号:ポート番号(MySQLの場合は3306)
-
ユーザー名:データベースの操作権限のあるユーザー
-
パスワード:データベースにアクセスするためのパスワード
どのサービスにおいてもこの5つの情報を使用してEC2からRDSへ接続します。上の例ではzabbixで使用するデータベースをRDSにするために、特定のファイルの記述を変更しました。
サービスによってどこを変更したらよいかが変わるのでそれは調べる必要があります。
これでEC2とRDSを接続することができました!
まとめ
今回はEC2にインストールしたサービスとRDSを連携する方法について紹介しました。
手順をおさらいすると以下になります。
-
AWSのマネジメントコンソールからRDSの作成
・プライベートサブネットを1つ作成
・サブネットグループを作成
・パラメータグループを作成
・オプショングループを作成
・セキュリティグループを作成
・RDSの作成 -
RDS(MySQL)でテーブル、ユーザーの作成
・EC2にSSH接続し、MySQLをインストール
・「mysql -h エンドポイント -u admin -p
」
でRDS(MySQL)にアクセス
・データベース作成:「create database データベース名 default character set utf8 collate utf8_general_cli;」
・ユーザー作成:「create user 'ユーザー名'@'%' identified by 'パスワード';」
・権限付与:「grant all on データベース名.* to ‘ユーザー名'@'%';」
-
各サービス(EC2)からの接続
・以下の5つの情報が必要
1. ホスト名:RDSのエンドポイント
2. ポート番号
3. ユーザー名
4. パスワード
5. データベース名
初めてAWSのRDSの設定を行いましたが、個人的にはかなり大変でした・・・。でも記事を書いたことでMySQLの初期設定の知識はついたなと感じました!
特に大変だったのは、データベース作成とユーザー作成の部分の権限周りの理解と、EC2とRDSを連携する際のファイルの修正です。
サービスによって修正や設定する場所が違うので、調べてもなかなか乗ってないんですよね・・・。でも、何を設定したら良いのか理解しとけば意外となんとかなりました。
開発では必須のRDSの仕組みについて記述しました。みなさんにとってわかりやすく掛けていたら嬉しいです。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>