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)
関連する記事
- EC2とECSのレコードを全てCSVに出力する
- Route53のレコードを全てCSVに出力する
- EC2上でオレオレ証明書を作る
- AWS S3を使ったリダイレクトの方法
- Serverless Frameworkを使ってLambda & API Gatewayをデプロイする
- GitHub ActionsでAWS Code Deployを回す
- lightsail上に自前でWordpressを構築する(CentOS編)
- lightsail上に自前でWordpressを構築する(Amazon Linux編)
- LightsailにOpenVPNサーバーを立てる
- CircleCIからAWS Code Deployを実行する
- AWS Code DeployでEC2にデプロイする
- 【Let'sEncrypt】Amazon Linux2でCertbotを使う
- Wordpressの画像をS3+CloudFrontで配信する
- AWS ELB配下でWordpressを動かす際のSSL対応
- AWS ELB配下でApacheのRewriteRuleが上手く動かなかった話
- 【AWS】新規EC2立ち上げ後の作業メモ