はじめに
RDS Proxyとは
RDS Data APIとは
Lambda×RDS(Aurora含む)の場合、RDS Proxyを間に挟むのはごく一般的な構成かと思います。
私も以前はLambdaからRDSアクセスがあるなら必須だよな〜と思っていたのですが、あるシステムでRDSにAuroraServerlessV2を採用した際、従来通りRDS Proxyも作成したら料金が跳ね上がってびっくりしました。
AuroraServerlessV2の場合のRDS Proxyの料金は、1時間1ACUあたり0.025USD
で課金されます。
ただこの料金体系、よく見ると最低料金が8ACUとなっており、要は使用しているのが1ACUだけであっても、8ACU使ったものとして料金が計算されてしまうのです。
該当のシステムはサービスインする前のPoC段階だったので、ACUは0.5
に設定していたのですが、8ACU分の料金が発生していました。
高いな〜RDS Proxy必要なのかな〜と悶々していたところ、AWSの方と話す機会があり、2023年12月にリリースされたばかりのAuroraServerlessV2に対応したRDS Data APIを教えてもらいました。
2024年4月現在、リージョンや使えるDBエンジンが限定されているものの、該当のシステム構成的に利用可能だったので、料金削減のため切り替えることにしました。
どう変わったか
料金
RDS Data APIはHTTPでAPIをコールすることでAuroraにアクセスします。
料金はリクエスト数に応じて課金され、最初の10億件のリクエストは100万回あたり0.42USD
、10 億件を超えた場合は0.24USD
です。
該当システムは現状月10万件のリクエストに収まっていたので、請求は0USD
でした。
RDS Proxyの場合はProxyだけで大体毎月150USD
ほどかかっていたので激安ですね。
厳密にはData APIを使用するのにSecret Managerが必要になるので、その分の料金は発生しますが、月1USD
もかからないのでほぼ無視できます。
RDS Proxyの場合はRDS関連だけで月225.60USD
かかっていたのが、75.18USD
まで削減できました。やったね!!
構成
副次的な効果で構成も単純にすることができました。
このシステムはLambdaからインターネットにアクセスする必要があり、VPC外Lambda→VPC内Lambdaをコールするという構成を取っていました。
RDSにLambdaからアクセスするにはLambdaをRDSと同じVPCのサブネットに入れる必要がありますが、その場合 NAT Gatewayをおかないとインターネットにアクセスできません。
このNAT Gatwayも結構高額なサービスで、コスト削減のためこんな構成にしていました。
Data APIを有効にすると内部で専用のエンドポイントが作られ、そこから通信をするので、LambdaをVPC内に入れる必要がなくなります。
こうなりました。
Lambda→Lambdaの構成が複雑だったので、すっきりしました。
おわりに
RDS ProxyとData APIどちらが良いかは当然システム要件によって変わると思います。
そもそも同時アクセス数が多くないシステムはProxyなしでLambda→RDS直接続でも問題ないです。
Lambda×RDSだからRDS Proxy必須!ではなく、Data APIの利用も検討できるな、という話でした。
Data APIに切り替えたことでLambdaのコードも大幅に書き換えたので、それについては別途記事にします。