表記ハンズオンイベントに参加してみました。
https://awsbasics.connpass.com/event/221807/
今回の題材はLambdaからRDS Proxyにつないでみようというもの。
RDS Proxyが何かについては、公式ドキュメント
https://aws.amazon.com/jp/rds/proxy/
や「RDS Proxy」で検索したらいくらでも出てきます。
とりあえず、クラスター組んだDBへ接続するときの受け口みたいなものと思ったらよいでしょうか。
提供された資料
https://github.com/harunobukameda/RDS-Proxy-AWS-Lambda
に従って、ざっくりこんな感じのシナリオで進み、今回は特に困ることなく完走できました。
- RDS(Aurora MySQL)作成
- Cloud9作成(DB接続確認クライアントとして使用)
- RDSへの接続確認
- RDS Proxy作成
- Cloud9からRDS Proxy経由でのRDS接続確認
- LambdaからRDS単体への接続
- LambdaからRDS Proxy経由での接続
- お片付け
より技術的な詳細はほかにお任せするとして、以下、口頭説明やチャットの内容など
現地での補足内容で拾えた分をメモ。
- RDS Proxyのメリット
- LambdaからRDSへの接続にコネクションプーリングが使えるようになる(Lambdaはマイクロコンテナで常時起動しているわけではないので、コネクションプーリングが効かない)
- リーダー/ライターのフェイルオーバーにおけるパフォーマンスが公称値で60%早くなる
- RDS Proxy利用時の注意点
- ハンズオン
- Cloud9
- RDS,RDS Proxy
- 運用環境で使う場合は、セキュリティグループの設定をよく考えること(ハンズオンの設定はガバガバ)
- RDS作成時は「拡張されたログ記録を有効にする」のチェックを入れる方がよい(お金かかるけど、何かあったときの詳細調査にはこれが必要になる)
- RDS ProxyがRDS本体に接続するにはシークレットマネージャの設定が必要
- Cloud9からRDS Proxy経由で接続する手順において、下記が出る場合がある。RDS Proxyを設定してから反映までしばらく時間がかかるためとのこと。
ERROR 2013 (HY000): Lost connection to MySQL server at 'handshake: reading initial communication packet', system error: 11
- Lambda
- LambdaからRDS Proxy経由でRDSに接続する場合は、運用環境ではシークレットマネージャを呼び出して接続するロジックを書くこと(ハンズオンでは接続情報をベタ書きしており、本来はNG)
- お片付け
- 手順記載分のほかに消した方がよいもの
- Cloud9
- シークレットマネージャで作成したシークレット
- CloudWatchロググループ
- 手順記載分のほかに消した方がよいもの
- その他
- RDS Proxy経由の接続は、初回はオーバーヘッドがかかるので時間がかかる(ファーストタッチペナルティ)。2回目以降からはコネクションプーリングが効いて速くなる。
- RDS Proxyは複数VPCに対応したらしい
- イベント中に行われたやってみたLTの資料
https://speakerdeck.com/kwada/awsbasics-rds-proxy-9de3d31b-e99e-4893-9f22-83e3da961557