AWSでWEBサーバからアクセスできるDB(mysql)をRDSで構築した際のメモ
なお私はUdemyの「AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得」を教材として使わせて頂いております。これ、すっごく判りやすいです。もし参考するなら、費用が掛かりますが、断然そちらの動画を見ることをお勧めします。
正直本ブログを自分で描きながら、これだと自分以外の人は理解できないだろうなー、と思いながら書いています。
まずは下準備をする
今のところRDSを簡単に使い始める事はできず、色々と下準備が必要な様です。ちなみに個人的には、開発環境であればEC2に自分でDBをインストールする方が手っ取り早いと思います。しかし本番環境まで見据え、冗長性や可用性、バックアップやアップデート(パッチあて)まで考えると、やはりRDSにするべきなのかな、と思いました。それなら開発環境も本番環境に似せてRDSで構築するべきと考え、、せっせと下準備をしていく事にします。
VPCでサブネットを作成する
まずサブネットを作成します。Webサーバはパブリックのサブネット(インターネットからアクセスできるネットワーク)に所属していますが、DBはプライベートのサブネットに配置する方が安全ですよね。ちなみに今回はテスト用(学習用)なので1つしかDBを作りませんが、RDSは冗長構成が推奨されており、その為今回は、異なるリージョンに属する空のサブネットを作成していきます。
左ペインの「サブネット」を選択し、「サブネットの作成」を押します。
サブネットを設定していきます。「名前タグ」には「任意のわかりやすい名称」をいれます。今回、アベイラビリティゾーンを「1c」するので、末尾に「-1c」と入れておくと解りやすいです。「VPC」には、自分で作成した「Virtual Private Cloud (VPC) 」を、「アベイラビリティゾーン」は前述の通り、今回「ap-northeast-1c」を設定します。
最後に「IPv4 CIDRブロック」ですが、私は以下の様にしました。
- 10.0.10.0/24 (1a)をパブリック
- 10.0.20.0/24 (1a) をプライベート(DB配置用)
- 10.0.21.0/24 (1c) をプライベート(空サブネット)
※前述の通り今回は学習環境なので(費用を抑える意味で)DBを1つしか作成しませんが、RDSは冗長構成がお約束な為、空サブネットを別アベイラビリティに作成する必要があります。
※なおCIDR(サイダー)とは何ぞや、となりますが、、ごめんなさい、一言じゃ説明できません。ググってください。
セキュリティグループの作成
次にセキュリティグループを作成していきます。「EC2ダッシュボード」に移動し、左ペインの「セキュリティグループ」を選択、「セキュリティグループを作成」ボタンを押します。
セキュリティグループを設定していきます。
1.「セキュリティグループ名」は「任意のわかりやすい名称」、「説明」も同じ、「VPC」は自分で作成した「Virtual Private Cloud (VPC) 」を設定します。
2.インバウンドルールの「ルールを追加」ボタンを押します。
3.「タイプ」は「MYSQL/Aurora」を選択します。
で、次の4、5ですが、少し補足説明が必要です。DBサーバへは、WEBサーバからのみアクセスできる様にするべきです。このソースは「WEBサーバのIP」で指定する事もできますが、本番環境ではWEBサーバを複数台並列に稼働させロードバランスさせる方式が一般的です。なので「WEBサーバのIP」ではなく「WEBサーバのグループ」をソースに指定する方が楽です。ここで5の入力画面で(※私の環境では)「aws」と入力します。すると「awsではじまるセキュリティグループ」が表示されるので、その中から「WEBサーバのセキュリティグループ」を選択します。
※補足※私の環境では各設定名称に必ずプレフィックス「aws」を付与するルールで運用しています。
サブネットグループの作成(RDS)
左ペインより「サブネットグループ」を選択し「DBサブネットグループを作成」ボタンを押します。
「名前」に「わかりやすい任意の名前」、「説明」も同様、「VPC」は自分で作成した「Virtual Private Cloud (VPC) 」を設定します。
また「アベイラビリティゾーン」は前述の通り「1a」及び「1c」を選択、「サブネット」は其々のアベイラビリティゾーンに属している「プライベートサブネット(2つ)」を選択します。
パラメータグループ(RDS)の作成
「RDSダッシュボード」の左ペインから「パラメータグループ」を選択し、「パラメータグループの作成」ボタンを押します。
「パラメーターファミリー」に今回「mysql8.0」を選択、「グループ名」と「説明」には「任意のわかりやすい名称」を入力します。最後に「作成」ボタンを押してください。
以上でパラメータグループの作成は完了です。なおパラメータを変更する場合は、「パラメータグループアクション」の「編集」を押します。
もし各パラメータを変更する場合は、ここで変更します。今回は学習用環境構築なのでデフォルトのパラメータのまま、何も設定しません。なお「変更可能」がtrueなら変更可能、「適応タイプ」がdynamicなら再起動せず動的に設定が反映される、という意味です。
オプショングループ(RDS)の作成
最後にオプショングループを設定します。左ペイン「オプショングループ」を選択し、「グループの作成」ボタンを押します。
「名前」と「説明」には「任意のわかりやすい名称」を入力します。「エンジン」は「mysql」、「バージョン」は「8.0」にします。最後に「作成」ボタンを押してください。
RDBを構築する
やっとRDBをインストールする準備ができました。かなり下準備が大変でしたが、あと一歩です。
左ペインから「データベース」を選択し、「データベースの作成」ボタンを押します。
作成方法は「標準作成」、エンジンのオプションは「MySQL」、バージョンは今回「8.0.20」を選択、テンプレートは「開発/テスト」を選びました。
※無料利用枠でも良いのですが、あまり学習にはならないので「開発」を選んでいます。
この時点で一番下までスクロールすると、「概算月額コスト」が「155.33USD」、、((+_+))たかっ!! なので調整していきます。
上の方まで戻り、まずは「設定」の所を入力していきます。まずは「DBインスタンス識別子」「マスターユーザ名」「パスワード」を入力します。
次に「DBインスタンスサイズ」です。費用を抑える為に「バースト可能クラス」の「db.t3.micro」を選択しました。(動画ではt2.microを選択していますが、2021/2現在、下にある【以前の世代のクラスを含める】の中に隠れていました。さきの最下部見積もりを見る限り、t2.microでもt3.microでも費用は同じの様です。)
次は「ストレージ」です。「ストレージタイプ」「ストレージ割り当て」はデフォルトのままでOKです。「ストレージの自動スケーリングを有効にする」のチェックボックスは外します。
次は「可用性と耐久性」です。マルチAZを選択するだけで簡単に冗長性が確保できます。しかし、学習環境では費用を抑えるため「スタンバイインスタンスを作成しないでください」のままでOKです。
次は「接続」です。「VPC」は自分で作成したVPCを、同様に「サブネットグループ」も自分で作成したサブネットグループを選択します。今回、DBサーバーはインターネットに公開しないので「パブリックアクセス可能」は「なし」を選択します。「VPCセキュリティグループ」は先ほど作成したので、「既存の選択」し「さきほど作成したセキュリティグループ」を選択します。同様に「アベイラビリティゾーン」も選択してください。
次の「追加設定」では「DBパラメータグループ」と「オプショングループ」に、上記「下準備で作成したグループ」を設定し、「バックアップ保持期間」は「30日」にします。バックアップの「開始時間」ですが、日本時間はUTC+9時間なので朝4時に設定したい時は「19時」と設定します。「モニタリング」は今回不要なのでチェックを外し、メンテナンスは「自動アップグレードの有効化」をチェックし、今回、「日曜日の20時」(=日本時間で朝5時)に設定しました。「削除保護の有効化」は学習環境なので時々削除する可能性を考えチェックを外しました。
だいぶ費用を抑えることができました。ちなみに開発用ではなく学習用なので更に費用は抑えられると思います。最後に「データベースの作成」を押します。
以上でデータベースの作成が完了しました。「利用可能」になるまで、しばらく待ちます。
なおWEBサーバからの接続時に「エンドポイント」が必要になるのでメモ帳などに張り付けておきましょう。
WEBサーバーからDBへアクセスしてみる
最後にコンソールでWEBにログインし、DBにアクセスできるかチェックします。
まずmysql(クライアント)をインストールします。
$ sudo yum -y install mysql (~省略~)
先にメモ帳に保存したエンドポイントを指定してログインします。
$ mysql -h (エンドポイント) -u (RDS構築時に指定したユーザ名) -p Enter password:(パスワード) (~省略~) Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>
無事、ログインできました。以上でRDSの説明は終わりです。