こんにちは、アプリケーションサービス部 ディベロップメントサービス2課の木田です。
本記事ではAWS初心者の方向けに、パブリックサブネット上のEC2からプライベートサブネット上のRDS(MySQL)に接続してみよう!という内容です。
また、筆者自身が躓いた点も記述してあります。筆者の失敗から学んで頂ければ幸いです!
構成
前提
EC2(Amazon Linux2)が構築され・SSH接続確認済みであること
セキュリティグループの作成
まず、RDS用のセキュリティグループを作成します。
EC2からのアクセスのみを許可するように設定します。
セキュリティグループの作成画面(EC2 ⇨ セキュリティグループ ⇨ セキュリティグループを作成)まで進み、以下のように入力してください。
基本的な詳細
設定項目 | 項目入力値 |
---|---|
セキュリティグループ名 | db-sg(任意) |
説明 | Security Group For RDS(任意) |
VPC | EC2があるVPC |
インバウンドルール
「ルールを追加」を選択します。
設定項目 | 項目入力値 |
---|---|
タイプ | MYSQL/Aurora |
プロトコル | ※TCP |
ポート範囲 | ※3306 |
ソース | カスタム/EC2のセキュリティグループID |
説明 | 空欄(任意) |
※タイプを選択すると自動入力されます。
アウトバウンドルール、タグはここではデフォルトのまま進みます。 「セキュリティグループの作成」を選択し、RDS用のセキュリティグループが作成できました。
筆者が躓いた点
当初、インバウンドルールにEC2のパブリックIPを設定していたため、EC2からRDSが接続できませんでした。
RDSとEC2は同一VPC内に存在するので、RDSのセキュリティグループのインバウンドで許可するのはEC2のセキュリティグループID or EC2のプライベートIPとなります。
セキュリティグループIDを指定すると、指定されたセキュリティグループに関連付けられたリソースのプライベート IP (ここではEC2のプライベートIP)が許可されることになります。運用的な観点から、今回はセキュリティグループIDで設定しました。
プライベートサブネットの作成
次にRDS用のプライベートサブネットを作成します。
本記事ではシングルAZで構成していますが、後述するRDSのサブネットグループとして、異なるAZにそれぞれ最低サブネットを1つ用意する必要があります。
サブネットの作成画面(VPC ⇨ サブネット ⇨ サブネットの作成)まで進み、以下のように入力してください。
VPC
設定項目 | 項目入力値 |
---|---|
VPC ID | EC2と同一上のVPC |
サブネットの設定
設定項目 | 項目入力値 |
---|---|
サブネット名 | db-private-subnet-1(任意) |
アベイラビリティゾーン | EC2があるアベイラビリティゾーン |
IPv4 CIDR ブロック | 使用済みでない任意の値 |
1つ目のサブネット項目を入力後、「新しいサブネットを追加」を選択し、同様に2つ目のサブネットの内容を入力します。
設定項目 | 項目入力値 |
---|---|
サブネット名 | db-private-subnet-2(任意) |
アベイラビリティゾーン | 1つ目で作成したサブネットと別のアベイラビリティゾーン |
IPv4 CIDR ブロック | 使用済みでない任意の値 |
「サブネットを作成」を選択し、サブネットが作成されました。
サブネットグループの作成
次にRDS用のサブネットグループを作成します。
サブネットグループの作成画面(RDS ⇨ サブネットグループ ⇨ DBサブネットグループを作成)まで進み、以下のように入力してください。
サブネットグループの詳細
設定項目 | 項目入力値 |
---|---|
名前 | db-subnet-group(任意) |
説明 | Subnet Group For RDS(任意) |
VPC | EC2があるVPC |
サブネットを追加
設定項目 | 項目入力値 |
---|---|
アベイラビリティゾーン | 作成したプライベートサブネットがあるアベイラビリティゾーン(2つ) |
サブネット | 作成した2つのプライベートサブネット |
RDSの起動
RDSを起動させます。
RDSの作成画面まで進みます(RDS ⇨ データベースの作成 )。
設定項目が多く冗長的なため、今回設定する必要のある項目のみ後述します。他の項目はデフォルト値のまま進んでいただいて構いません。
エンジンのオプション
設定項目 | 項目入力値 |
---|---|
エンジンのタイプ | MySQL |
テンプレート
設定項目 | 項目入力値 |
---|---|
テンプレート | 開発/テスト |
設定
設定項目 | 項目入力値 |
---|---|
DBインスタンス識別子 | test-db(任意) |
マスターパスワード/パスワードの確認 | 任意のパスワード(覚えておいてください) |
インスタンスの設定
設定項目 | 項目入力値 |
---|---|
DBインスタンスクラス | バースト可能クラス (t クラスを含む) / db.t3.micro |
接続
設定項目 | 項目入力値 |
---|---|
VPC | EC2があるVPC |
サブネットグループ | 今回作成したサブネットグループ |
既存のセキュリティグループ | 今回作成したセキュリティグループ |
データベースの作成を選択します。
データベースは数分で起動が完了します。起動後、データベースのエンドポイントをメモしておいてください。
EC2からRDSへ接続
まず、EC2にSSH接続してください。
EC2にMySQLクライアントがない場合は以下のコマンドでインストールしてください。
$ sudo yum install mysql
インストール完了確認後、以下のコマンドでRDSに接続してください。
$ mysql -u admin -p -h データベースのエンドポイント
パスワード入力が求められますので、設定したパスワードを入力してください。
以下のように表示されれば接続成功です。
まとめ
ご一読いただきありがとうございました。
パブリックサブネット上のEC2からプライベートサブネット上のRDS(MySQL)に接続してみました。
筆者にとってはセキュリティグループ辺りで躓いたことが「基礎からしっかり固めよう!」と改めて思う良いきっかけになりました。
この記事をご覧になった皆さんにも何かの参考になれば幸いです。