どうも、えんつかです。
AWSを用いたWEBアプリデプロイ方法の第五段です。
今回は、DBサーバーの構築(RDS)について記載していきます。
なお、前回はネットワークの構築方法について記載しました。
AWSを用いたLaravelアプリのデプロイ方法・手順【4.ドメインの登録】
AWSを用いたLaravelアプリのデプロイ方法・手順をまとめています。今回は、ドメインの登録についてです。AWSを初めて触る方向けに記事を作成していますので、初期設定から丁寧に記載していきますので、
本ブログで紹介している手法は、UdemyにてWEBエンジニアのプロが紹介している講座を参考にさせて頂いています。結構、割愛させて頂いている内容がありますので、詳細について学びたい方はUdemyにて学ぶと良いと思います。動画なので学びやすく、レビューも豊富で質の高い教材を選ぶことができます。
UdemyはこちらAWSを用いたLaravelアプリのデプロイ方法・手順【5.DBサーバーの登録】
まず思い出して欲しいのですが、ネットワーク構築の記事にてパブリックサブネットとプライベートサブネットを作成していました。作成したそれぞれのサブネットは、パブリックサブネットにはWEBサーバーを、プライベートサブネットにはDBサーバーを設置していきます。パブリックサブネットはインターネットから接続できるようにし、プライベートサブネットはインターネットからアクセスできないようにしていきます。
ネットワークの記事は以下からどうぞ。
AWSを用いたLaravelアプリのデプロイ方法・手順【2.ネットワークの構築】
AWSを用いたLaravelアプリのデプロイ方法・手順をまとめています。今回は、ネットワーク構築についてです。AWSを初めて触る方向けに記事を作成していますので、初期設定から丁寧に記載していきますので
DBサーバーの設置にはAWS上のRDSと呼ばれるサービスを用いていきます。
RDSはバックアップやスケーリングなどを自動で行ってくれるサービスになっています。実際その恩恵を受けていないので、実感はないのですが、とても便利なDB構築機能のようです。
RDSで利用可能なDBは、以下の通りです。
- MySQL
- PostgreSQL
- Oracle
- Maria DB
- Amazon Aurora
- Microsoft SQL Server
普段使用でMySQLを用いているのでMySQLでの構築を進めていきます。
プライベートサブネットの冗長化
まずは、プライベートサブネットを作成していきます。以前にもプライベートサブネットを1つ作成していましたが、ここでもう一つ追加で作成していきます。理由はRDSの機能で自動バックアップを取れるようにする為の別のアベイラビリティーゾーンのサブネットが必要だからです。前回は1aのアベイラビリティーゾーンでしたが、今回は別の1c に作成していきます。
サブネットの作成は、以前も説明しましたが、
サービス➡︎VPCダッシュボードへ移動➡︎サブネットをクリック➡︎サブネットの作成をクリックします。以下のように設定していきます。
名前タグ:任意(1cとわかるようにしましょう)
VPC:すでに作成済みvpcを選択
アベイラビリティーゾーン:末尾1cを選択
IPv4 CIDR ブロック:任意(ここでは、10.0.21.0/24としました)
セキュリティグループの構築
まずすでに作成済みEC2インスタンスにセキュリティグループをあてがい、アクセス可能にしましょう。
EC2ダッシュボード➡︎セキュリティグループ➡︎セキュリティグループの作成へと進みます。
セキュリティグループ名:任意(末尾にDBと分かりやすくしとくといいでしょう)
説明:セキュリティグループ名と同じでOKです。
VPC:すでに作成済みVPCを選択します。
インバウンド タイプ:MySQL/Auroraを選択(自動でポート範囲が割り振られます)
ソース:カスタムとして、隣の欄に既に作成したセキュリティグループ名(HTTPアクセスを許可したセキュリティグループ)の頭文字を2~3文字入力すると候補が出てきますので、そちらを選択します。
以上の設定により、MySQLからのWEBサーバーへのアクセスが許可されるようになりました。
RDSの構築(前準備)
それではRDSの構築を進めていきます。
サブネットグループの作成
サブネットグループを作成するのは、RDSを起動するサブネットを指定するために作成します。複数のアベイラビリティーゾーンを用いて冗長化する関係上、グループ化して用いていきます。
サービス➡︎RDS➡︎RDSのダッシュボードに移動します。
左側メニューからサブネットグループをクリックします。
DBサブネットグループの作成をクリックし、進めます。
名前:任意(subnet-groupと末尾に付与しました)
説明:任意(名前と同じでもOKです)
VPC:既に作成済みVPC
アベイラビリティーゾーン:1aと1cそれぞれにあるプライベートサブネットを追加するのでまずは、1a。1aのプライベートサブネットを追加したら、1cを追加してください。
サブネット:1aにあるプライベートサブネットを追加してください。その後、1cにあるプライベートサブネットを追加してください。
パラメータグループの作成
RDSは、DBのファイルを直接編集できないので、パラメータグループを用いて設定値を編集することができるようにします。
RDSダッシュボード内のパラメータグループをクリックし、パラメータグループの作成をクリックしていきます。
パラメータグループファミリー:mysql8.0
グループ名:任意
説明:任意
入力したら作成です。
オプショングループの作成
RDSダッシュボード内のオプショングループをクリックし、オプショングループの作成をクリックしていきます。オプショングループはDBにプラグインの設定などを追加できるようになります。
名前:任意
説明:任意
エンジン: mysql
メジャーエンジンのバージョン:8.0
この設定で作成をクリックしていきます。
RDSの構築(実装)
続いてRDSを実際に実装していきます。
RDSダッシュボード内のデータベースをクリックし、データベースの作成へと進めてください。
標準作成として、色々オプションを選べるようにします。
エンジンオプション:MySQL
バージョン:任意(MySQL8.0で進めてきてましたので最新版を選択します。)
続いて、
テンプレート:任意(私は開発/テストを選択します。料金を抑えつつ、練習用に機能が選択できるようになります。)
DBインスタンス識別子:任意
マスターユーザー名:任意(DB設定ファイルのusernameに相当します)
パスワード:任意
インスタンスクラス:任意(価格を抑える為に低スペックを選択しています。)
ストレージ:任意
ストレージ割り当て:任意
ストレージの自動スケーリング:任意(負荷がそこまでかからず、価格を抑える為に自動スケーリングを外しています)
マルチAZ(アベイラビリティーゾーン)配置:スタンバイインスタンスを作成しないでください(RDSをマルチAZに自動でできるか選択する箇所です。価格を抑える為に作成しないを選択しています。)
接続については、次のように設定してきます。
Virtual Private Cloud:作成済みVPC
追加の接続設定をクリック
サブネットグループ:RDS事前準備せ作成したサブネットグループ
パブリックアクセス可能:なし(RDSへ外部からアクセスできないようにセキュリテイを高めます)
VPCセキュリティグループ:既存の選択
既存のVPCセキュリティグループ:本記事始めの方で作成したセキュリティグループを選択
アベイラビリティーゾーン:1a
データベースポート:デフォルト
データベース認証オプション:パスワード認証
最初のデータベース名:空欄
DBパラメータグループ:作成済みパラメータグループ
オプショングループ:作成済みオプショングループ
バックアップ:自動バックアップ有効化
バックアップ期間:任意
バックアップウィンドウ:任意
モニタリング:任意(チェックを入れると有料ですが詳細をモニターできます)
ログ:任意(チェックを入れると有料で詳細なログを吐き出します)
メンテナンス:任意(DBの自動アップデートです)
メンテナンスウィンドウ:任意
これで約20USDとなっていますが、私がこの設定でちょくちょくインスタンス稼働を停止することで10USDまだ行かないくらいです。20USDはちょっと高いですね。
これでRDSの構築が完了しました!
作成したRDSの詳細については、DB識別子をクリックすることで確認することができます。
なお、RDSを起動したままでは料金が加算されていきますので、テスト/開発環境であれば、使用しない場合はRDSを選択した状態で、アクションをクリックし、停止を押すことをお勧めします。ただし、本番環境でRDSを構築していた場合は停止を押すことは避けたほうが懸命です。AWS上にリソースが無く、すぐに起動できなかったり、時間が掛かったりするようです。
WEBサーバーからRDSに接続
ターミナルを起動し、SSHログインをしましょう!
-i以降については、ダウンロードしたSSHキーペアファイルです。
@以降はIPアドレスです。
ssh -i ~/Desktop/test-aws-ssh-key.pem ec2-user@13.115.102.246
次に、mysqlをインストールしていきます。
sudo yum -y install mysql
続いて、データベース情報にアクセスする為に、RDSのエンドポイントに接続する必要があります。
エンドポイントは、
RDSダッシュボード➡︎DB識別子をクリック
➡︎情報とセキュリティタブ内にエンドポイントがあるのでこれをコピーします。
コピーしたらターミナルで入力します。
mysql -h コピーしたエンドポイント -u root -p
ここでのrootはRDS構築時に設定したマスターユーザー名です。これを入力すると、パスワードが要求されますので、パスワードを入力してください。
パスワードは、マスターパスワードです。
パスワードが通ってMySQL[(none)]>と表示されれば、接続完了です!
今回は、以上です!