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に割り当てる

ことが必要です。

絵にするとこんな感じ。

f:id:iryond:20170306232718p:plain

■手順

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を指定してください。

f:id:iryond:20170306230856p:plain

大事なことなので2回言いますが、
1a,1cそれぞれのサブネットに作成してください。

4.RouteTableの作成

Routetableを作成し、0.0.0.0/0向けの通信を
先ほど作成したNATGatewayに向けるよう、設定してください。

f:id:iryond:20170306230738p:plain

Subnetの関連付け

「サブネットの関連付け」タブから、Lambdaを構築するPrivateSubnetを関連付けしてください。
もう一度いいます。

Lambdaを構築するPrivateSubnetを関連付けしてください。

まとめ

上記で、LambdaからVPCリソースにアクセスしつつ、
Internet通信できるようになります。

マニュアルにちゃんと書いてあるんですけど、
割りと見落としがちかと思います。

docs.aws.amazon.com

誰かのお役に立てば幸いです。

それでは。