SEワンタンの独学備忘録

独学した内容や資格試験に対する取り組みの備忘録

【AWS】入門その⑦ データベースサーバRDSの構築

【データベースサーバRDSの構築】

他にもいろいろあって、かなり時間が空いてしまいましたがRDSやっていきたいと思います。
Eclipseのインストールや設定などは「その⑥」で対応済みのものです。

www.wantanblog.com

またEclipseからRDSに接続する際にいろいろとエラーが発生しましたので必要であれば以下も参照してみてください。

www.wantanblog.com

今回の構築イメージ

f:id:wantanBlog:20190814202019p:plain

いつもより雑なお絵描き感がつよいのはなんなんだろう

今回はRDSインスタンスの生成及び、ローカル環境のEclipseからデータベース参照やSQLが実行できるところまでを目指します。
EC2との連携は今回では行いません。

RDSとリレーショナルデータベース

リレーショナルデータベース

行と列によって構成された「表形式のテーブル」と呼ばれるデータの集合を、互いに関連付けて関係モデルを使ったデータベースのこと。
一般に一言でデータベースと言った場合にはこのリレーショナルデータベース(以下、RDB)を指すことが多いのではないでしょうか。

参照や操作を行う場合の問い合わせにはSQL (構造化クエリ言語) を使用します。

リレーショナルデータベースを制御するソフトはRDBMSと呼ばれ以下のようなものが一般的に知られていると思います。
・Oracle
・MySQL
・SQLServer
・PostgreSQL


参考:リレーショナルデータベースとは? | AWS

Amazon Relational Database Service (Amazon RDS)とは

RDSはリレーショナルデータベースサーバを構築・運用するためのサービスとなります。
一般的にDBサーバの運用は、バックアップやリストアなどのデータ管理やパフォーマンスチューニング、セキュリティなどに技術やスキルが必要になりますが、RDSを使えばこの辺の管理が容易になる。らしい。。。

以下AWSの公式サイトより。

Amazon Relational Database Service (Amazon RDS) を使用すると、クラウド上のリレーショナルデータベースのセットアップ、オペレーション、スケールが簡単になります。ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップなどの時間がかかる管理タスクを自動化しながら、コスト効率とサイズ変更可能なキャパシティーを提供します。これにより、アプリケーションに集中することができ、必要とされる高速なパフォーマンス、高可用性、セキュリティ、互換性をアプリケーションに実装できるようになります。

引用元:Amazon RDS(マネージドリレーショナルデータベース)| AWS


特徴としてはすぐに理解できた範囲で、以下のような点を挙げることができるでしょうか。

・Cloud Watchによりメモリやストレージ利用率の監視が可能となる。
・自動バックアップの設定により、データベースとトランザクションログのバックアップが可能。
・DBのスナップショットをS3にバックアップできる。

参考:特徴 - Amazon RDS | AWS

RDSの無料枠

私が確認した現時点のもので、無料枠は以下の通りです。
各自で要確認です。

Amazon RDS
無料利用枠 12 か月間無料

・750 時間/月の db.t2.micro データベース使用 (適用可能な DB エンジン)
・20 GB の汎用 (SSD) データベースストレージ
・20 GB のデータベースバックアップおよび DB スナップショット用ストレージ

AWS クラウド無料利用枠 | AWS

RDSの構築準備

RDSのセキュリティグループの作成

RDSはデータベースに当たるので、現実的に運用する場合は、データ流出などをリスクを軽減するためにセキュリティ対策を行う必要があります。
ここではEC2と同様にAWSのセキュリティグループを設定し、アクセス制限を実現したいと思います。


今回はその⑥でインストールしたEclipseから設定を行おうと思います。

①Eclipseのセキュリティグループビューを表示

AWSアイコンから「ビューの表示>EC2セキュリティグループ」を選択。

f:id:wantanBlog:20190812230541p:plain


②リージョンの確認

私の場合、東京リージョンを使用するので東京リージョンになっていなかったのでリージョンの設定を行います。
リンク部分を押下。

f:id:wantanBlog:20190812231123p:plain

「Asia Pacific(Tokyo)」を設定する。

f:id:wantanBlog:20190812231321p:plain


③セキュリティグループの作成

Eclipse上のビューで右クリックで「新規グループ」を選択

f:id:wantanBlog:20190812231803p:plain

任意のセキュリティグループ名を設定してOK!

f:id:wantanBlog:20190812232245p:plain


設定後、セキュリティグループが追加されました。

f:id:wantanBlog:20190812232546p:plain

ちなみに以前設定したセキュリティグループも下の方に表示されるようになりました。

パーミッションの設定

Eclipse上のビューの右側で右クリックを行い「Add Permissions」を選択。

f:id:wantanBlog:20190812233753p:plain


任意のポートとIPアドレスを入力します。
私の場合はIPアドレスは自分のもののみ設定するようにしました。

f:id:wantanBlog:20190812233957p:plain

パラメータグループの設定

パラメータグループとはそもそも、文字コードや接続数を設定するものみたいです。
オンプレでは「my.conf」ファイルに相当するものらしいです。
私はオンプレ構築をまともにやったことがないので「my.conf」もちゃんとわかっていないです。

ここからはAWSコンソールで設定を行いました。

パラメータグループの作成

サービスからRDSを選択。

f:id:wantanBlog:20190812234500p:plain

RDSのダッシュボードを開いたら再度メニューから「パラメータグループ」を選択。
パラメータグループの作成を押下します。

f:id:wantanBlog:20190812235430p:plain


ファミリーには「MYSQL8.0」を選択しました。※どのバージョンがいいのか正直分からなかった。

Eclipseからの操作を想定している場合はここで「5.x」を選択してください。
私が構築した時点ではEclipse側のAWS toolkitがバージョン8に対応していないようです。

他は任意の入力を行い作成。

f:id:wantanBlog:20190813000842p:plain


パラメータの設定

一覧に作成したグループができたものが確認できたら、選択を行い、アクションから編集を選択します。

f:id:wantanBlog:20190813001221p:plain

ここでは書籍で推奨されていた文字コードのUTF-8設定のみを行います。

検索窓に「character_set」入力して検索を行った結果の中から以下のものをUTF-8に設定しました。

・character_set_client
・character_set_connection
・character_set_database
・character_set_results
・character_set_server

ちなみにプルダウンから探すのは面倒なので「ut」プルダウンを選択してutと打てばutf関連のものがすぐに選択できるはずです。

f:id:wantanBlog:20190813002421p:plain

設定の保存を押下しても特に画面表示が変わるわけではないですが、設定の保存はできている模様。


RDSの構築と導入

ここからやっと使用していきます。

RDSインスタンスの生成

RDSのダッシュボードから「DBインスタンス」を選択します。

f:id:wantanBlog:20190813010026p:plain

データベースの画面でデータベースの作成を押下。

f:id:wantanBlog:20190813010113p:plain

データベースの作成画面に遷移します。
今回は無料で楽しむためにMYSQLを使用しますので、それを選択。

f:id:wantanBlog:20190813010352p:plain


バージョンの選択
先ほど「MYSQL8」用にパラメータを設定したので「MYSQL 8.0.15」を選択しました。

ここでもEclipseからの使用を想定している場合にはバージョン「5.x」を選択すること。

f:id:wantanBlog:20190813010628p:plain

テンプレートの選択
無料枠で使用する場合には、必ず無料利用枠を選択する必要があるようです。

f:id:wantanBlog:20190813011057p:plain

インスタンス識別子、ユーザ名の設定
基本的には任意の入力で問題ないはずです。

f:id:wantanBlog:20190813011656p:plain


私の場合、他の項目はデフォルト設定のままでOKとしてしまいましたが、作成後に以下のようにいくつかの項目を設定しなおしたので、必要であればこの作成段階にやっていおいた方がよいと思います。

★セキュリティ
セキュリティグループ
 ⇒デフォルトではなく、先ほど作成したセキュリティグループを設定する。
パブリックアクセシビリティ
 ⇒「はい」を選択
※後でEclipseで接続する際にここが「はい」じゃないと接続できません。多分ローカルのMYSQLクライアントを使用した接続等もここがはいになっていないとダメだと思われます。但し、インターネットから接続できるようになるので注意が必要かもしれません。

★データベースの設定
DB パラメータグループ
 ⇒デフォルトではなく、先ほど作成したパラメータグループを設定する。
データベース名
 ⇒通常は必ず設定すること。設定しないとデータベース実態が作成されないようです。
※私はここを設定し忘れて後から指定する方法が分からずインスタンスを再作成する羽目になりました。

★バックアップ
バックアップの保存期間
 ⇒7日から0日(無効)
※どのくらい容量が必要になるのかわかりませんがきっておきました。

本番稼働を考えるなら「マルチ AZ 配置」を設定したり、VPCを作成してるならここで設定を行うのだと思います。
※やっぱり先にVPCの勉強した方がよかったのかな・・・?


設定が終わったら最下部のデータベースの作成を押下。

f:id:wantanBlog:20190813012615p:plain


数分待つと作成が完了します。


なお私はこの後作成時に設定し忘れたものを以下から設定しなおしました。

f:id:wantanBlog:20190813020550p:plain

Eclipseからの接続

※以下、いくつかエラー対応を行っているため画像上のデータベース名などが一部変わっています。

RDSインスタンスの生成が完了しましたので、Eclipseから接続してデータベース操作を行ってみます。

EclipseのAWSアイコンから「AWSエクスプローラー・ビューの表示」を選択します。

f:id:wantanBlog:20190813022837p:plain

Amazon RDSを選択すると先ほど作成したデータベースが表示されるはずです。

f:id:wantanBlog:20190813032132p:plain

データベース部分をクリックするとパスワード入力を行う画面が表示されるので先ほど設定したパスワードを設定します。

f:id:wantanBlog:20190814023804p:plain


テーブルの作成ぐらいまでやっておきます。

SQLのアイコンを押下して、SQLを作成⇒実行します。

f:id:wantanBlog:20190814025100p:plain

スクラップブックを開いたら「名前」と「データベース」を指定し、任意のSQLを記述し右クリックから全て実行を選択します。
とりあえずどんなアプリを作成するか決めていないので、ユーザテーブルだけ作成しておきました。

f:id:wantanBlog:20190814190334p:plain

以下、SQL例。

-- ユーザテーブルの作成
CREATE TABLE m_user
(
	-- ユーザID
	user_id varchar(10) NOT NULL UNIQUE COMMENT 'ユーザID',
	-- ユーザ名
	user_name varchar(30) NOT NULL COMMENT 'ユーザ名',
	-- 削除フラグ
	delete_flg boolean NOT NULL DEFAULT false COMMENT '削除フラグ',
	PRIMARY KEY (user_id)
)DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

その後、データ挿入、検索を行いましたが正常に実行できたので問題ないようです。

・INSERT文の例

-- インサート文
INSERT INTO m_user (user_id, user_name, delete_flg) VALUES ('u0001', 'wantan', false);
INSERT INTO m_user (user_id, user_name, delete_flg) VALUES ('u0002', 'testuser', false);
INSERT INTO m_user (user_id, user_name, delete_flg) VALUES ('u0003', 'ワンタン', false);
INSERT INTO m_user (user_id, user_name) VALUES ('u0004', 'あいちゃん');

・SELECT文の例

select * from m_user;

Eclipseから利用時にエラーが頻発して時間がかかってしまいました。今回はここまでにします。
次回はやっとEC2とRDSを連携させてEC2からデータ操作を行うようなのをやっていきたいと思います。