LambdaからRDSに接続しようとした際のベストプラクティスを模索して辿り着いた1つの箇所として記録しておきます。
用途としては、webサービスのDBとしてRDS。ちょっとした軽いバッチやAPIのバックエンドにLambdaを検討していました。
見出し
必要なもの
タイトルにある通り以下です。
- Lambda
- RDS Proxy
- Secrets Manager
- RDS
RDS Proxyについて
LambdaからRDSに直接接続すると、Lambdaが連続で実行された際にすぐに接続数上限に達してしまいます。ここでRDS Proxyを使用すると、接続が再利用される為これを回避することが可能となりました。
Secrets Managerについて
RDS ProxyからRDSへの認証に必要となります。
Secrets Managerは、DBのログイン情報や認証情報などの高い情報を管理してくれます。また、Lambdaを使用した自動ローテーションを組む事が出来るので、定期的な自動パスワード変更が可能となります。
これを活用すればコードに記載してリスクを負う必要がなくなる為、セキュリティ面で必須なサービスとなってきています。
今回はRDSのDBログイン情報をシークレットとして保存しておきます。
サブネットについて
Lambdaはパブリック、RDS ProxyとRDSはプライベートにしておきます。
セキュリティグループについて
Lambdaのインバウンドは禁止。
RDS ProxyのインバウンドはLambdaから3306ポートを許可。
RDSのインバウンドはRDS Proxyから3306ポートを許可。
IAM Policyについて
LambdaはENI生成用にEC2を使用。
RDS Proxyは作成したRDSのログイン情報を持つSecrets Managerを使用。
以上概要でした。
もし何か自分に聞いてみたい事などありましたらお問い合わせください。勉強中ですがわかる範囲でお答えします。
参考リンク
https://aws.amazon.com/jp/blogs/news/using-amazon-rds-proxy-with-aws-lambda/