Lambda on VPC で インターネットアクセス
こんにちは。
今日はみなさん大好きLambdaの話です。
LambdaがVPC対応したことは記憶に新しいですが、
それでもInternet向けに通信したいことって、ありますよね。
例えばCloudSearchを触りたいとか、CloudWatchをたたきたいとか、、
LambdaでVPCリソースにアクセスしつつ、
Internet向けに通信する場合は少し工夫が必要です。
今日はそういった内容について触れたいと思います。
解決策
時間がない人向けに、まずは解決策ですね。
- LambdaをPrivateSubnetに構築し、
- PublicSubnetにNAT Gateway(もしくはNAT Instance)を構築し、
- PrivateSubnetの0.0.0.0/0向けの通信をNATに向けるルートテーブルを作成し、
- ルートテーブルをPrivateSubnetに割り当てる
ことが必要です。
絵にするとこんな感じ。
■手順
1.Subnetの準備
何も考えずに、下記のSubnetを準備してください。
- PublicSubnet 1a
- PublicSubnet 1c
- PrivateSubnet 1a
- PrivateSubnet 1c
PublicSubnetはNATGatewayに、
PrivateSubnetはLambdaのために使います。
2.Lambdaの構築
Lambdaファンクションを、PrivateSubnet上に構築してください。
ここは簡単なので割愛します。
3.NATGatewayの構築
NATGatewayはAvailabilityZone内で冗長化される仕組みとなっています。
そのため、本ケースにおいては、1a,1cの両方に作成します。
VPC
→NATGateway
→「NATGatewayの作成」をクリック
→下記のような感じで、subnetを指定してください。
大事なことなので2回言いますが、
1a,1cそれぞれのサブネットに作成してください。
4.RouteTableの作成
Routetableを作成し、0.0.0.0/0向けの通信を
先ほど作成したNATGatewayに向けるよう、設定してください。
Subnetの関連付け
「サブネットの関連付け」タブから、Lambdaを構築するPrivateSubnetを関連付けしてください。
もう一度いいます。
Lambdaを構築するPrivateSubnetを関連付けしてください。
まとめ
上記で、LambdaからVPCリソースにアクセスしつつ、
Internet通信できるようになります。
マニュアルにちゃんと書いてあるんですけど、
割りと見落としがちかと思います。
誰かのお役に立てば幸いです。
それでは。