はじめに
この記事は、社会人2年目 AWS、python初心者が勉強したことをまとめたものです。
間違っている点、改善点等ございましたご指摘いただけると大変ありがたいです。
この記事について
VPC内のLambdaからboto3を使用してパラメータストアからDB接続情報を取得しようとしたところはまりました。
自身のための備忘録として、また初心者が同じところで嵌らないようにはまった内容について記載しておきます。
結論
VPC内のプライベートサブネットに配置されたLambdaからインターネット経由でboto3を使用するためには以下のいずれかを実行する必要がある。
- publicサブネットのNATゲートウェイを経由する。
- private linkを使用する。
■参考
https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-vpc-parameter-store/
やりたいこと
パラメータストアからDB接続情報を取得し、LambdaからDBに対してSELECT、INSERTを行うこと。
前提
- Lambdaにパラメータストアからパラメータを取得するためのIAMポリシー(ssm:GetParameters、sts:AssumeRole)は付与済み
- LambdaとDBは同じプライベートサブネットに配置
エラー内容
2021-01-30T14:29:59.355Z 410cd8d5-7a8f-4c2a-a247-eff916e351f7 Task timed out after 3.00 seconds
原因
デフォルトでは、Lambda は追加設定を行わなくても、インターネットと Systems Manager および パラメータストアへアクセスできます。
ただし、Amazon VPC の Lambda 関数は、デフォルトではインターネットとパラメータストアへの値にアクセスできません。
勝手にAWS内のリソースへのアクセスはいい感じにルーティングしてくれると思っていました。。。
■参考
https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-vpc-parameter-store/
解決策
パブリックサブネットをにNATゲートウェイを配置し、Lambdaが配置されているプライベートサブネットに以下のルートを追加してあげたら、
無事パラメータストアからDB接続情報を取得できました!
0.0.0.0/0 NATゲートウェイ
最後に
private linkは使用したことがないので追々試してみたいと思います。