AWS lambdaからDBアクセスも外部アクセスもできるようにする。
投稿日:
AWS lambdaからAWS RDSへアクセスさせるためにはRDSへアクセスできるVPCのサブネットにlambdaを追加します。
しかし、VPC内のlambdaは何もしないと外部アクセスができなくなります。
lambdaがRDSと同時に外部システムのAPIなどを利用する際に困りますので、
VPC内のlambdaから外部アクセスができるように設定します。
VPC設定
VPC内のlambdaから外部アクセスをさせる設定方法は、実はAWS公式で説明されています。
基本的にはこの手順を実行すれば良いだけです。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/internet-access-lambda-function/
手順詳細は公式ページを見ればよいので、ここではざっくりと流れを書いておきます。
①〜②はすでにあれば既存の使い回しでも良いです。
①(なければ)RDSにアクセスできるVPCを作る。
②(なければ)インターネットゲートウェイを作成して①のVPCにアタッチする。
③RDSにアクセスできるVPCにサブネットを2つ作る。(public用とprivate用)
④NATゲートウェイを新規作成し、②で作成したpublic用サブネットを紐づける。
⑤ルートテーブルを新規作成し、public用サブネットを紐付ける。
作成したら以下のルートを追加する。
項目 | 設定値 |
---|---|
宛先 | 0.0.0.0/0 |
ターゲット | ③のインターネットゲートウェイ |
⑥ルートテーブルをもう1つ新規作成し、private用サブネットを紐付ける。 | |
作成したら以下のルートを追加する。 |
項目 | 設定値 |
---|---|
宛先 | 0.0.0.0/0 |
ターゲット | ④のNATゲートウェイ |
VPC設定はここまでです。
ここで作成したprivate用サブネットの方にlambdaを追加すればRDSと外部の両方にアクセスできるようになります。
lambda設定(Serverless Framework)
今回はServerless Frameworkを使ってlambdaを構築します。
Serverless Frameworkの基本的な構築については前回の記事を参照してください。
前回の記事で作成したserverless.yml
のproviderにvpc設定を追加します。
provider:
〜省略〜
vpc:
subnetIds:
- 今回作成したprivateサブネットのID(subnet-0123456abcde)
【おまけ】
上記VPC設定では触れていませんが、もしlambdaにセキュリティグループを設定させるなら以下のようにします。
provider:
〜省略〜
vpc:
subnetIds:
- 今回作成したprivateサブネットのID(subnet-0123456abcde)
securityGroupIds:
- 設定するセキュリティグループID(sg-012345abcde)