LambdaからRDSなどVPC上に配置されたサービスに接続するときは、LambdaをVPCに接続する必要がある。
ただし、ここで注意が必要なのはパブリックサブネットに接続されたLambdaはインターネット接続ができなくなるというAWS上の仕様である。
パブリックサブネットというのはインターネットゲートウェイが接続されており直接インターネットに出ることができるサブネットのことで、通常AWSのアカウントを作成して、何も考えずにそのままEC2やRDSを作成したときなどは、このパブリックサブネット上にインスタンスをしているはずである。
そのため、LambdaからRDSに接続しようとしてに短絡的に同一のパブリックサブネットに接続させると確かにRDSには接続できるがインターネットへのアクセスができなくなってしまう。
もちろんインターネットへの接続が不要であればそれでも問題ないが、インターネットに接続できないことでアクセスができなくなるAWS上のサービス(DynamoDB、Cognito etc…)もあるので注意が必要となる。
ではインターネット接続が必要な場合どうするか、正解は「プライベートサブネットにLambdaを配置する」である。
1.Lambdaを接続するためのサブネットを接続先のRDSなどと同一のVPC上に作成する。
2.パブリックサブネットにNATゲートウェイを作成する。
3.ルートテーブルを作成し1のサブネットから外に出るときの経路として2のNATゲートウェイを指定する。
とすることで、Lambdaはインターネットゲートウェイと直接つながらないプライベートサブネットに接続しつつ、インターネット接続も可能になる。
しかし、こんな仕様があるのであれば、LambdaのVPC設定画面に注釈くらいあっても良さそうなものだが・・・
本件について調べた時に非常に役に立ったページ
・Amazon VPC に接続されている Lambda 関数にインターネットアクセスを許可するにはどうすればよいですか?
・VPC LambdaからVPCエンドポイント経由でDynamoDBにアクセスしてみた
コメントを残す