AWS | Lambdaでインターネットアクセスするための設定手順
2018/12/17
AWS LambdaでWebページをスクレイピングする処理を書いた際に、Lambdaからインターネットにアクセスを行う構成をとったため、そのときの構成と設定方法を紹介します。
構成の説明
今回構築したのは下図のような構成になります。
Lambdaからインターネットアクセスする場合、AWSの制約でプライベートサブネットにLambdaを配置する必要があります。そのため、パブリックサブネットにNATゲートウェイを用意する必要があります。
AWSのNATゲートウェイサービスを使つとそれなりに料金が発生するため、既に利用しているEC2をNATゲートウェイにしました。
構築手順
私の場合は、現状パブリットサブネットでEC2を1台利用しているだけなので、ここからの構築手順を紹介します。AWSの1年間の無料利用をしていた場合は同じ構成になるかと思います。
1. EC2の設定を変更する
AWS管理コンソールのEC2インスタンスから、NATとして利用するEC2を選択し「送信元/送信先の変更チェック」を無効にします。これをしないと手順2のルートテーブル作成の際に、EC2のNICを指定できません。
2. ルートテーブルの作成
Lambdaを配置するプライベートサブネットを作成するために、最初にルートテーブル作ります。
AWS管理コンソールのサービスからVPCを選択し、VPCダッシュボードにある「ルートテーブル」を選択します。「Create route table」を選択し、ルートテーブルを作成します。
作成したルートテーブルの「Routes」タブを編集し、Destinationを「0:0:0:0」、TargetをEC2のNICとしたルートを追加します。
3. プライベートサブネットを作成する
AWS管理コンソールのサービスからVPCを選択し、VPCダッシュボードにある「サブネット」を選択します。
作成したサブネットの「ルートテーブル」タブで2で作成したルートテーブルを指定します。
4. EC2のNAT設定を行う
EC2インスタンスのSSHでログインし、NATサーバの設定を行います。設定のコマンドは以下のようになりますが、192.168…の部分は3で作成したプライベートサブネットのCIDRを指定します。
iptables -t nat -A POSTROUTING -j LOG
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
service iptables save
vi /etc/sysctl.conf
#net.ipv4.ip_forward = 1
sysctl -p
5. プライベートサブネットからEC2への設定を許可する
EC2のSGに3で作成したプライベートサブネットからの通信を許可するように設定を追加します。
6. Lambdaを作成する
Lambdaを作成した際の配置先をプライベートサブネットに設定します。またアウトバウンド通信を全て許可したSG設定をLambdaに適用します。
以上で、Lambdaからインターネットアクセスするための設定は完了となります。