はいさい!ちゅらデータぬオースティンやいびーん!んながんじゅーやみ?(みんな、元気ね?)
概要
AWSのRDSサービスでAurora版のPostgreSQLを立ち上げて、Lambdaなど、その他のAWSサービスでデータベース・プロキシが使えるようにする
RDSのプロキシとは何か?
AWSの各サービスがRDSデータベースへ張るコネクションを管理するものです。
通常なら、自前のアプリでコネクション・プールを作って、データベースとの接続を管理するものですが、複数のアプリが同じようにコネクション・プールで複数のコネクションを張っていたとしたら、いかがでしょうか?
我々が提供サービスが拡張されると、アプリ越しのデータベースとの接続を管理することが困難になります。データベースが維持するコネクション数が多くなると、パフォーマンスが悪くなります。また、新しいコネクションを張ること自体が最も大きい負荷だとされています。
そこで、一定数のコネクションを張って、それらを各アプリに割り当ててくれるのが、RDSプロキシです。
つまり、RDSプロキシは、複数のアプリに渡って使えて、AWSが管理してくれる、コネクション・プールなのです。
しかも、IAM認証も使えば、各アプリにRDS認証情報を渡す必要がなくなり、セキュリティ性も改善できます。
目次
- Aurora PostgreSQLのサーバーレス・データベースを作る
- Secret Managerでデータベース認証情報を登録する
- Security Groupの設定を調整する
- RDSプロキシを作る
Aurora PostgreSQLのサーバーレス・データベースを作る
まず、接続の対象となるデータベースを作ります。
今回は、サーバーレスv2のPostgreSQLを使いますが、プロキシと使えるバージョンが限られているようで、なお、AWSドキュメントでは具体的にどのバージョンがサーバーレスでプロキシと使えるのか、明確ではないです。
なので、本記事を書いた現時点(2022/07/25)で、Aurora PostgreSQL 13.7で出来ましたので、これを使って作ります。
RDSにアクセスする
データベース
のメニューを開く
データベースを作成する
各設定を埋め込む
標準作成
とAmazon Aurora
を選択します。
次はAmazon Aurora PostgreSQL 互換エディション
を選択し、バージョンを13.7
にします。
また、今回はテスト用ということで、開発/テスト
のテンプレートを選択します。
次は、RDSデータベース・クラスターの名前をつけて、Postgresのマスターユーザーとパスワードを設定します。
筆者は、自動生成を使いますが、独自のパスワードを入れてもいいです。
インスタンスの設定
はそのままですが、要領の範囲を低くしてもいいかと思います。
接続
では、新しいVPCを作るようにします。既存のVPCを使うことももちろん問題ありません。
新しいSecurity Groupも作っておきます。
データベース認証では、IAM認証を有効にします。
他の設定を調整していただいてもいいですが、最後にデータベースの作成
をクリックします
重要:自動生成のパスワードを控える
自動生成でデータベースのパスワードを作ってもらうことにした方は、以下のボタンをクリックしてパスワードを控えてください。
この画面を開かないと、あとからパスワードを知る方法がないので、データベースを作り直す羽目になるど!
そしてこの画面でコピーできます。
Secret Managerでデータベース認証情報を登録する
上記で取得したデータベースの認証情報を、次は、Secret Manager
に登録します。
新しいシークレットを保存する
をクリックします。
そして、Amazon RDSデータベースの認証情報
を選択し、先ほどコピーしたパスワードをペーストします。また、ユーザー名も上記のRDSデータベース作成時に設定したmaster
とします。
データベース
の設定で、先ほど作成したデータベースを選択します。
次
のボタンをクリックし、次のページで名前だけを記入するので十分です。
残りの設定は全て初期値でいいので、次
を連打して、最後に保存
ボタンをクリックしてください。
Security Groupの設定を調整する
各アプリでプロキシにアクセスできるようにするのと、プロキシがRDSデータベースにアクセスできるようにするために、Security Groupの設定を調整します。
## プロキシがRDSデータベースにアクセスできるようにする
EC2
のセキュリティ・グループ
のメニューにアクセスします。
先ほど作成してmy-proxy-sg
を検索して開きます。
インバウンドのルールを編集
をクリックします。
このSecurity Group、つまりmy-proxy-sg
をインバウンドのルールとして追加します。
こうすることで、RDSデータベースとRDSプロキシを同じmy-proxy-sg
に設定すれば、通信ができるのです。
アプリ側のSecurity Groupを作成し、my-proxy-sg
に追加する
そして、次は、アプリ側で使うSecurity Groupを追加します。
上記のように、my-proxy-sg
を使えば接続できるのですが、アプリとデータベースでSecurity Groupを分けることを推奨します。アプリではIPアドレスを公開することがあるからです。
セキュリティグループを作成
をクリックし、名前と先ほど新規で作成したVPCを入力します。
名前はmy-application-sg
としますが、任意です。
インバウンドの接続ルールはお任せします。
my-proxy-sg
にmy-application-sg
からのインバウンドを許可する
もう一度my-proxy-sg
に戻って、インバウンドルールを編集
のボタンをクリックします。
そして以下のように、my-application-sg
からのアクセスを許可します。
これでは、プロキシを作る準備が整いました!
RDSプロキシを作る
最後に、RDSプロキシを作成します。
RDSコンソールに戻って、プロキシ
のリンクをクリックします。
そして、プロキシを作成
をクリックします。
エンジンの互換性をPostgreSQL
にし、プロキシ識別子(名前)を入力します。値は任意です。
TLSも有効にする必要があります。なぜなら、IAM認証を使う場合はTLSが必須だからです。
ターゲットグループの設定
では、先ほど作成したデータベースを選択します。
もし、作成したデータベースが表示されていなければ、Postgresのバージョンがサポートされていないものである可能性が高いので、違うバージョンでデータベースを作り直して見てください。
接続
では、Secret Managerで保存した認証情報を選択します。
また、IAMロールを新規するのと、IAM認証を必須にもします。
追加の接続設定
では、my-proxy-sg
のSecurity Groupを指定します。
そうすると、無事に作成できます!
まとめ
ここまで、プロキシの使い方を紹介してまいりましたが、いかがでしょうか?
次の記事では、Lambda関数でこのプロキシを使って接続する方法をご紹介します。
続きはこちら!