構成図
以下参考資料をベースに上記の構成を作成していきます。
AWSのEC2からRDSに接続してmySQLを操作。EC2踏み台サーバー構築メモ
ネットワーク
ベースにしている参考資料の設定値をほぼそのまま使います。
- VPC
Name CIDR rds-ec2-ssh_vpc 10.0.0.0/16 - サブネット
Name CIDR 用途 rds-ec2-ssh_publicSubnet-a 10.0.0.0/24 踏み台サーバー(EC2)用 rds-ec2-ssh_privateSubnet-a 10.0.100.0/24 RDS用 rds-ec2-ssh_privateSubnet-c 10.0.101.0/24 RDS用(RDSの仕様上複数AZを指定する必要があるため) - インターネットゲートウェイ
Name rds-ec2-ssh_igw - ルートテーブル(パブリックサブネット用。Name: public_rtb)
|送信先|ターゲット|
|0.0.0.0/0|igw-××××(上で作ったインターネットゲートウェイ)|
|10.0.0.0/16|local| - ルートテーブル(プライベートサブネット用。Name: private_rtb)
|送信先|ターゲット|
|10.0.0.0/16|local|
セキュリティ
- 踏み台サーバー(EC2)用のセキュリティグループ
- Name: ec2-ssh_sg
- インバウンドルール
タイプ プロトコル ポート範囲 送信元 SSH(22) TCP(6) 22 0.0.0.0/0(※1) - アウトバウンドルール
タイプ プロトコル ポート範囲 送信元 すべてのトラフィック すべて すべて 0.0.0.0/0
※1クライアントの接続元を特定のIPアドレスに制限したい場合は許可するIPアドレスを指定する。
- RDS用のセキュリティグループ
- Name: rds-ec2_sg
- インバウンドルール
タイプ プロトコル ポート範囲 送信元 PostgreSQL(5432) TCP(6) 5432 10.0.0.0/16 - アウトバウンドルール
タイプ プロトコル ポート範囲 送信元 すべてのトラフィック すべて すべて 0.0.0.0/0
EC2
-
名前とタグ: rds-ec2-ssh_ec2_linux2
-
アプリケーションおよびOSイメージ(Amazonマシンイメージ): Amazon Linux 2(無料利用枠)※2
-
キーペア
- キーペアのタイプ: RSA
- プライベートキーファイル形式: .pem
※ここで作成したキーファイルは必ずダウンロードして保存しておいてください。
-
ネットワーク設定
- ネットワーク: rds-ec2-ssh_vpc
- サブネット: rds-ec2-ssh_publicSubnet-a
- 自動割り当てパブリック IP: 有効化
- セキュリティグループ: ec2-ssh_sg
※2 デフォルトの「Amazon Linux 2023」はssh-rsa署名が使用できず、TeraTerm4.×系からSSH接続が出来ないようです。(CloudShellからなら接続できる)
TeraTerm5以降からならrsa-sha2-256およびrsa-sha2-512プロトコルを使用して接続可能だが、2023/7/10時点ではベータ版までしかリリースされていない模様。
RDS
- サブネットグループ
- 名前: rds-ec2-ssh_sng
- 説明: rds-ec2-ssh_sng(空にできないので適当に)
- VPC: rds-ec2-ssh_vpc
- アベイラビリティーゾーン: ap-northeast-1a, ap-northeast-1c
- サブネット: rds-ec2-ssh_privateSubnet-a(10.0.100.0/24), rds-ec2-ssh_privateSubnet-c(10.0.101.0/24)
-
エンジンのオプション
- エンジンのタイプ: Aurora(PostgreSQL Compatible)
- エンジンバージョン: Aurora PostgreSQL(Compatible with PostgreSQL 14.6)
-
設定
- DB クラスター識別子:
- マスターユーザー名: postgres(デフォルト。メモしておくこと)
- マスターパスワード: (適当にパスワードポリシーを満たしている値。メモしておくこと)
-
接続
- Virtual Private Cloud (VPC): rds-ec2-ssh_vpc
- DB サブネットグループ: rds-ec2-ssh_sng
- 既存の VPC セキュリティグループ: rds-ec2_sg
-
追加設定
- 最初のデータベース名: test(適当に)
EC2の踏み台サーバーに入る
ここは二パターン紹介します。
CloudShellを使用する
ローカルにSSHクライアントをインストールしたくないあるいはめんどくさい人向け。
-
「ファイルのアップロード」を押下して、踏み台サーバー(EC2)を立ち上げた際にダウンロードしたキーファイル(.pemのやつ)をアップロードする。
-
アップロードしたキーファイルの権限を600にする。
chmod 600 `キーファイル名`.pem
- 以下のコマンドで踏み台サーバーにアクセスできる。
ssh -i `キーファイル名`.pem ec2-user@`踏み台サーバーのパブリックIPv4アドレス`
-
「ユーザ名(N)」が
ec2-user
であることを確認。 -
「認証方式」を
RSA/DSA/ECDSA/ED25519鍵を使う
にし、踏み台サーバー(EC2)を立ち上げた際にダウンロードしたキーファイル(.pemのやつ)を指定。 -
踏み台サーバーにアクセス成功。
RDSのPostgreSQLに接続する
踏み台サーバー(EC2)に入ることができたら、そこからRDSに接続します。
-
以下コマンドで
psql
コマンドをインストールする。// yumパッケージ更新 sudo yum update // このコマンドで`postgresql14`をいうパッケージがあることを確認 sudo amazon-linux-extras // `postgresql14`をインストール sudo amazon-linux-extras install -y postgresql14
普通にyum installでインストールしたものはバージョンが古かったらしく、認証方式が合わなくてログインができなかった。
多分コマンドが間違っていた気もするので要検証。一先ずamazoninuxなら上のやり方でインストールできる。 -
以下コマンドでRDS(ライターインスタンスの方)にログイン。
psql -h `エンドポイント` -p 5432 -U postgres -d test
オプション -h RDS「接続とセキュリティ」の「エンドポイント」の接続したい方 -p ポート番号 -U ユーザー名 -d 接続するデータベース名 パスワード入力を要求されるので、RDS作成時にメモしたマスターパスワードを入力。