Amazon RDS(Relational Database Service)というサービスにより、簡単にデータベースサーバを構築することができます。
この記事では、RDSの概要とMySQLエンジンのAmazonRDSを構築し、MySQL8.0 へアクセスできるまでを確認します。
RDSの概要
RDSはフルマネージドなデータベースサービスで、冗長化やバックアップ・ソフトウェアアップデートなどの運用をAmazon側で実施してくれます。
2021年8月現在、下記6つのエンジンが利用可能です。(この記事ではMySQL 8.0を使用します)
RDSはフルマネージドであるがゆえ、逆に管理者がデータベースに関して、下記のとおり、設定できる項目が決められています。
- パラメータグループ:エンジン固有の設定を行う。
- オプショングループ:RDS固有の設定を行う。
- サブネットグループ:データベースを複数のアベイラビリティゾーンに配置する設定を行う
RDS構築(検証環境)
プライベートサブネットの作成
データベースは通常、セキュリティの観点からインターネットから接続できないプライベートサブネットへ配置します。
RDSを配置する際に、冗長化の観点で、複数のアベイラビリティゾーンに存在する複数のサブネットを選択する必要があります。
そのため、下記のとおり、複数アベイラビリティゾーン(ap-northeast-1a、ap-northeast-1c)にそれぞれ、10.0.2.0/24と10.0.22.0/24を作成します。
サブネットの作成については、下記記事を参考にしてください。
>> 参考記事 : 【AWS】ネットワーク(リージョン、AZ、VPC、サブネット)設定確認セキュリティグループの設定
今回作成するデータベースは、下記のとおり、パブリックサブネットに配置されたEC2からのみ接続を許可したいと思います。
パブリックサブネットに配置した仮想インスタンス(EC2)は、下記の記事で作成したものを使用します。
>> 参考記事 : 【AWS】仮想インスタンス(EC2)追加の設定確認この仮想インスタンスに適用されているセキュリティグループは、EC2-publicです。
では、データベースサーバに適用するセキュリティグループを作成します。セキュリティグループの作成は、下記の記事を参考にしてください。
>> 参考記事 : 【AWS】セキュリティグループの概要と設定確認VPCの設定画面よりセキュリティグループを作成します。
セキュリティグループ名・説明は任意の名前(今回は、DB-Private-sgとします)とし、適用するVPC(今回はMyVPC)を選択します。
インバウンドルールでは、EC2インスタンスからRDSへのデータベース通信のみ許可します。
タイプはMYSQL/Auroraを選択し、ソースはカスタムよりEC2インスタンスが適用されているセキュリティグループであるEC2-publicを選択します。
アウトバウンドルールは、すべて許可とするため、何も設定しません。
下記のとおり、作成されたことを確認してください。
準備ができましたので、これからRDSの構築をはじめます。
サブネットグループの作成
RDSの設定画面へ移動します。検索で”RDS”と入力することで、設定画面のリンクが表示されます。
まず、サブネットグループを設定します。複数のアベイラビリティゾーンにデータベースを配置する設定となります。
メニューから”サブネットグループ”を選択し、”DBサブネットグループを作成”をクリックします。
”サブネットグループの詳細”より、名前・説明は任意(今回は、db-subnet-gとします) とし、対象のVPC(今回はMyVPC)を選択します。
”サブネットを追加”でアベイラビリティゾーン(ap-northeast-1a、ap-northeast-1c)を選択します。
”サブネットを選択” からは、プライベートサブネットである10.0.2.0/24と10.0.22.0/24を選択します。
選択後、下記のとおりとなることを確認します。
”作成”をクリックすると、下記のとおり登録されます。
パラメータグループの設定
メニューより”パラメータグループ”を選択し、”パラメータグループを作成” をクリックします。
- パラメータグループファミリー:様々なDBファミリーを選択できます。今回は、mysql8.0を選択します。
- グループ名・説明:任意の名前。今回は、mysql8-pgとします。
設定後、”作成“ をクリックすると、下記のとおり登録されます。
オプショングループの設定
メニューより”オプショングループ”を選択し、”グループを作成” をクリックします。
- 名前・説明:任意。今回はmysql8-ogとします。
- エンジン:様々なDBエンジンを選択できます。今回はmysqlを選択。
- メジャーエンジンバージョン:8.0を選択。
”作成”をクリックすると、下記のとおり登録されます。
RDS作成
メニューより”データベース“を選択し、”データベースの作成“をクリックします。
データベース作成方法の選択
“標準作成“ を選択します。
“エンジンオプション“の”エンジンタイプ“は MySQL を選択します。
エディションの選択で、バージョンは今回8.0系の中から、一番新しい8.0.25を選択します。
テンプレート
今回は検証用途のため、”無料利用枠”を選択します。
設定
“DBインスタンス識別子“で任意の名前(今回はtestdb-1とします)と接続時に使用するマスタユーザID(今回はadmin)とパスワードを設定します。
DBインスタンスクラス
検証用で無償利用枠のため、db.t2.micro を選択します。本番利用の場合は、一般的に標準クラスからクラスを選択します。
ストレージ
デフォルト設定のまま、次へいきます。
可用性と耐久性
今回、無料利用枠のため、選択できません。本番利用の際のマルチAZ(複数のアベイラビリティーゾーン)構成の設定となります。
”スタンバイインスタンスを作成する” を選択すると、マルチAZ環境となります。
接続
対象となるVPC(今回はMyVPC)を選択します。
サブネットグループはすでに作成済みのdb-subnet-gを選択します。また、パブリックからのアクセスは許可しませんので、なし を選択します。
VPCセキュリティグループ
すでに設定済みのセキュリティグループ(DB-Private-sg)を適用します。アベイラビリティゾーンはap-northeast-1aを選択します。
データベース認証
デフォルトのまま、パスワード認証 とします。
追加設定
すでに設定済みのパラメータグループ、オプショングループを選択します。
その他、自動バックアップの取得など設定されています。デフォルトのままとします。
上記設定完了したら、”データベースの作成” をクリックします。下記のとおり、データベースの作成がはじまります。
しばらくすると、ステータスが利用可能となります。
EC2からRDSへアクセス
EC2(Amazon Linux)からRDSへ接続をします。まず、EC2にSSHでログインし、MySQLをインストールします。
mac:Desktop hirotano $ ssh -i "hirotano-key.pem" ec2-user@52.194.227.105 Last login: Wed Aug 18 10:03:33 2021 from softbank060072050193.bbtec.net __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| 4 package(s) needed for security, out of 16 available Run "sudo yum update" to apply all updates. [ec2-user@ip-10-0-1-100 ~]$ [ec2-user@ip-10-0-1-100 ~]$ sudo yum -y install mysql 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 ・ ・ 出力省略 . 完了しました! [ec2-user@ip-10-0-1-100 ~]$
RDSの接続先ですが、RDS設定画面のデータベース >> testdb-1 より、接続とセキュリティ タブからエンドポイントの値を確認します。
エンドポイント情報をコピーして、下記のコマンドを実行することで、MYSQLへアクセスできます。-h でエンドポイントを指定します。
[ec2-user@ip-10-0-1-100 ~]$ mysql -h testdb-1.cswcm2gapwe0.ap-northeast-1.rds.amazonaws.com -u admin -p Enter password: ★パスワードを入力 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.25 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>
これで、DBへ接続ができました。
コメント