踏み台インスタンス経由でAurora PostgreSQL(Serverless)に接続する

# はじめに

Aurora PostgresSQLのServerlessですが、Public IPを設定することはできないため踏み台インスタンス経由で接続することになります。
そのため、以下の構成でAurora PostgresSQLへ接続するまでの手順を確認したいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/2242e658-1551-b753-a672-4e0f076db7a5.png)


# VPC・サブネット作成

VPCは以下のように作成しました。

- 名前： MyVPC
- CIDR：10.0.0.0/16

次にサブネットを以下のように作成しました。

| 名前            | CIDR         |  説明                                  |
|-----------------|--------------|----------------------------------------|
| PublicSubnet-a  | 10.0.0.0/24  | 踏み台サーバー用のパブリックサブネット |
| PrivateSubnet-a | 10.0.10.0/24 | Aurora用のプライベートサブネット       |
| PrivateSubnet-b | 10.0.20.0/24 | Aurora用のプライベートサブネット       |


また、MyPublicGWというインターネットゲートウェイを作成し、PublicSubnet-aにアタッチしておきます。

ルートテーブルは、以下のようにインターネットゲートウェイからインターネットへの接続を許可しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/567d488c-7e50-e74d-655e-d307ad3ae9d7.png)


# 踏み台サーバー構築

パブリックサブネット（PublicSubnet-a）上に踏み台用のEC2サーバーを構築します。

- ネットワーク：　MyVPC
- サブネット：　PublicSubnet-a
- 自動割り当てパブリックIP：　有効

セキュリティグループは以下のようにSSHのみを受信するように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/d3975289-18d5-c942-bf1d-c4017b39ca06.png)
```


# Aurora PostgreSQL(Serverless)

Aurora PostgreSQL(Serverless)のデータベースを作成（省略）した後、セキュリティグループのインバウンドを以下のように設定します。
PostgreSQLが使用する5432ポートを許可しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/62f9c8f8-6749-1507-ccae-0fb5b3402812.png)


# EC2からAuroraへの接続確認

EC2の踏み台サーバーからAuroraへ接続できることを確認します。

psqlコマンドを利用したいので、まずはpostgresqlをインストールします。

```
$ sudo yum install postgresql
```

次にpsqlコマンドでAuroraに接続し、「\l」メタコマンドでデータベースの一覧を確認しています。

```
$ psql -h database-1.cluster-XXX.ap-northeast-1.rds.amazonaws.com -U postgres
Password for user postgres: 
psql (9.2.24, server 10.7)
WARNING: psql version 9.2, server version 10.0.
         Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=> \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 rdsadmin  | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin
 template0 | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin          +
           |          |          |             |             | rdsadmin=CTc/rdsadmin
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)
```


# EC2へポートフォワーディング

EC2・Aurora間の接続できたところ、SSHクライアントとしてRLoginを使用してEC2へSSHで接続しポートフォワーディングします。

RLoginでポートフォワーディング用の接続を作成します。
まずサーバの情報として以下を入力します。

- Server Address: 接続先のEC2サーバのアドレス
- User Name: ec2-user
- SSH Identity Key: pemファイルを指定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/f87b97b2-7195-af18-fea5-20b9559f73a0.png)

次に、「プロトコル」を選択し、以下にチェックを入れます。

- シェル起動なしでPFログを表示
- エージェント転送を有効にする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/3a9179b5-d31d-ec6b-c338-60c34481de18.png)

上の画面で、「ポートフォワーディング」を選択し、以下のように入力します。

- Listened Host: localhost
- Port: 15432(ローカルポート：任意)
- Connect Host: 接続先のAuroraサーバ
- Port: 5432

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/2fcd5616-c468-f212-a1b0-1a25542e2541.png)

接続先の設定が終われば、踏み台サーバへ接続して待機します。


# A5M2からAurora PostgreSQLへ接続

A5M2では以下のように接続先を設定します。サーバー名がポートフォワード元の「localhost」になることに注意。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/d09c501d-b7b1-d996-8156-f58adb6a8fa9.png)

設定してから気づいたのですが、A5M2自体にSSHトンネル機能があるのでRLoginは使用しなくてもA5M2だけで接続できるかもしれません。


# pgbenchでサンプルテーブルを作成

接続できるようになったところで、負荷試験用のpgbenchでサンプルテーブルを作成してみます。

pgbenchはpostgresql-contribに含まれるので、まずはpostgresql-contribをインストールします。そしてpgbenchコマンドで負荷試験用のテーブルを作成しています。

```
$ sudo yum install -y postgresql-contrib
$ pgbench -i -h database-1.cluster-XXXX.ap-northeast-1.rds.amazonaws.com -U postgres
```

# ログの確認

ここからあまり関係ありませんが、いろいろなメモです。

Auroraのログを確認するためには、CloudWatchから以下のように確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/6a89e17f-9ba0-bf81-0859-a3bba267b506.png)


# パラメータ変更

オンプレミスの場合はpostgresql.confを直接編集してパラメータを変更するのですが、Auroraではパラメータグループというものを用いて変更します。

パラメータグループで「パラメータグループ作成」を選択し「DB クラスターのパラメータグループ」を作成します。以下では、「aurora-postgres10-cluster-custom」のパラメータグループの作成が終わっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/a4282769-2784-a027-5fb7-d37c275e699d.png)

データベースの変更で、「DBクラスターのパラメータグループ」で作成したパラメータグループを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/bc52ba12-4133-c067-101c-f9ffa29dfb04.png)

パラメータを変更した後に、psqlコマンドでパラメータを確認すると以下のように確認できます。

```
postgres=> show auto_explain.log_min_duration;
 auto_explain.log_min_duration 
-------------------------------
 0
(1 row)
```