[アップデート] Amazon RDS と AWS Lambda の間でも、接続を行うための各リソース構成を自動セットアップ出来るようになりました

2023.08.05

いわさです。

Amazon RDS にはコンソール上で、EC2 からの接続設定を自動構成する機能があります。
1 年近く前に登場した機能です。

この機能ではセットアップ済みの RDS に対してこの機能を使うことで、指定した EC2 との間のセキュリティグループの自動作成や許可設定、アタッチなど主にセキュリティ周りを自動構成してくれます。
作成されるリソース名なども自動で設定されるのでカスタマイズ性は低いのですが、検証用途かつコンソール上からすぐに構成を行いたい場合はとても有効な機能だと思います。

そんな RDS の接続自動構成機能ですが、本日のアップデートで AWS Lambda との間で自動構成することが出来るようになりました。

この機能を使うと、構築済みの RDS / Aurora に対して、この機能を使うことで接続出来る状態の Lambda 関数をセットアップすることが出来ます。
セットアップする Lambda 関数は既存の VPC Lambda (RDS と同一 VPC 内) を使うことも出来ますし、あるいは自動作成することも出来ます。(コードは初期状態かつランタイム構成なども固定ですが)
また、オプションで間に RDS Proxy を構成するかどうかを選択することが出来ます。

本日はこちらの使い勝手などを調べてみましたので、「なんだこのアップデートは?」という方に向けて共有したいと思います。

RDS コンソールのアクションで「Set up Lambda connection」が使えるように

今回の機能は EC2 との接続自動構成と異なり、新規 RDS インスタンス作成ウィザード上では設定が本日時点では出来ません。
データベース作成後に RDS コンソール上のアクションから「Set up Lambda connection」を選択することで自動構成を開始することが出来ます。

ちなみに Aurora の場合は、インスタンスではこちらのメニューは非活性になっていました。EC2 接続と同じですね。

「Set up Lambda connection」を実行すると次のように自動構成に必要なパラメータを入力します。
ここではどの Lambda を接続するかと RDS Proxy を構成するかを選択します。

Lambda の選択

Lambda 関数は既存の Lambda 関数を選択するか、この機能から新規の Lambda 関数を自動作成するかを選択出来ます。
既存の Lambda 関数は、接続する RDS と同一の VPC 内に存在している VPC Lambda のみが選択可能なので、存在していない場合は選択出来ません。

VPC Lambda を事前にセットアップしている場合は次のように選択が可能です。

新規で自動作成することも出来ますが、この場合は関数名のみ設定することが出来ます。
後ほど作成されたリソースを確認しますが、ランタイム情報などは全て固定でカスタマイズが出来ません。
そのため、多くのケースでは事前に VPC Lambda を準備しておいたほうが良さそうです。

RDS Proxy の選択

Lambda と RDS を接続する際には、主に接続管理周りの兼ね合いで RDS Proxy を導入することが多いと思います。
今回の新機能では、Lambda と RDS の間に RDS Proxy を構成するかしないかを選択出来ます。

「Connect using RDS Proxy」を選択すると RDS Proxy を構成します。
RDS に接続済みの RDS Proxy リソースを選択するか、あるいは新規で RDS Proxy を自動作成することが出来ます。

RDS Proxy を構成した場合は Connection Summary でも確認出来るように次のように各セキュリティグループが構成されます。

また RDS Proxy を構成しなかった場合は直接 Lambda と RDS 間のセキュリティグループが接続されるように構成されます。

作成・更新されたリソースを確認してみる

RDS Proxy の自動プロビジョニングに少し時間がかかりますが、この機能では主にセキュリティグループを自動作成してアタッチするところがメインなのでセットアップはすぐに完了します。
作成が完了すると、RDS の「接続されたコンピューティングリソース」に Lambda function のリソースが追加されていることが確認出来ます。

また、Lambda 関数やセキュリティグループ、RDS Proxy など様々なリソースがその間に存在しています。
ここでは自動作成・構成されたリソースの状態を確認してみましょう。

自動作成された Lambda

先程の自動構成ウィザードで新規 Lambda を作成する場合は、関数名を入力しましたがそれ以外の情報は何も入力していません。
まず、自動作成された Lambda のコードは次のようにデータベース接続は何も関係のないハローワールドのコードでした。

ランタイム設定は x86_64 の Node.js 18.x 固定となってます。

VPC 接続の構成がされていて、接続指定した RDS と同一の VPC 内に構成されています。

セキュリティグループ関係のルールが少しあるのですが後述します。

RDS Proxy

オプションで新規の RDS Proxy 構成を選択した場合は RDS Proxy が自動構成されます。
名称や構成も自動で、シークレットマネージャが自動作成されています。

Secret Manager

RDS Proxy から参照しているシークレットマネージャーです。
シークレットの値は、自動構成ウィザードで入力したものが登録されていました。

セキュリティグループ

セキュリティグループの構成ですが、既存リソースの様々な条件によってどこに変更が発生するのか挙動がかなり変わります。
EC2 接続の際もそれでかなり苦労した記憶がありましたが、今は次のドキュメントにてどういう時にどういった変更が発生するのかがまとまっていますね。
ちょっと複雑なのですがこのあたりは目を通しておきましょう。

多くの場合は次のように Lambda 関数と RDS の間で相互に接続が許可された新しいセキュリティグループがアタッチされます。
また、RDS Proxy を挟む場合は RDS Proxy 用のセキュリティグループが間に存在する形になります。

さいごに

本日は Amazon RDS と AWS Lambda の間でも、接続を行うための各リソース構成を自動セットアップ出来るようになったので使ってみました。

EC2 自動構成の時と同様に、主にセキュリティグループの自動構成とアタッチがメインの機能としてあって、今回はさらに Lambda や RDS Proxy などを自動作成してくれるという内容になっていました。

RDS Proxy を挟む構成はちょっと面倒だなといつも思っていたので、既存の VPC Lambda と RDS を選択し、RDS Proxy を自動セットアップする使い方はかなり良さそうな気がします。
あとは、自動作成される Lambda が DB 接続用に必要なパッケージをインポート済みの接続・クエリ実行のサンプル関数だったら、日々検証を行う身としてはありがたかったですね。フィードバックしたい。