LoginSignup
47
34

More than 3 years have passed since last update.

【AWS/Lambda】lambdaに固定IPをつける/VPCに所属させる

Posted at

「困ったら大体lambda(とS3)」「lambda イズ 仙道」、AWSの基本ですね()
ただ彼は基本的に固定IPを持ちません。仙道同様、気まぐれです。
今回はそんな彼に固定IPを付与する方法をまとめます。
また、結果としてVPC&サブネットへ所属させる方法にもなります。

どんな時に役立つか

例えば

  • 申請式で特定IPからのアクセスしか認められないサービスとの連携
  • インスタンス内で動くIP制限付きサイトの死活監視
  • プライベートサブネット内のインスタンスと通信

※インスタンスそのものの監視はcloudwatchでどうぞ

構成図

以下の形です。
lambdaから外へ.png

手順

手順的には大まかに以下の形です。
1. lambdaをVPC内のプライベートサブネットに設置
2. lambdaのロールにvpc、eniに関する権限を追加
3. パブリックサブネットにNATゲートウェイを設置
4. プライベートサブネットのルートテーブルを編集

順番に見ていきましょう。
VPC内にプライベートサブネット(インターネットゲートウェイを持たない)、パブリックサブネットが一つずつある前提です。

1. lambdaをVPC内のプライベートサブネットに設置

lambda関数の作成時、デフォルトでは非VPCとなっています。
普段はこれで問題ないですが、今回は既存のVPC、プライベートサブネット、セキュリティグループを設定して下さい。
lambda_ネットワーク設定.png

ちなみにパブリックサブネットに設置するとVPC内はいけますが、外に出られません。
公式より

2. lambdaのロールにvpc、eniに関する権限を追加

lambda関数作成時に指定したロールにVPCアクセス、eni作成、削除の権限が必要になります。
「IAM -> ロール」より当該ロールを選択し、AWSLambdaVPCAccessExecutionRole、AWSLambdaENIManagementAccessをアタッチしてください。
IAM_ポリシーアタッチ.png

3. パブリックサブネットにNATゲートウェイを設置

「VPC -> NATゲートウェイ」よりNATゲートウェイを作成します。
サブネットにパブリックサブネットを指定する点に注意してください。
NATゲートウェイの作成.png

4. プライベートサブネットのルートテーブルを編集

最後の手順です。
「VPC -> ルートテーブル」よりプライベートサブネットに紐づくルートテーブルを選択し、ルートテーブルの編集より、以下のように送信先に0.0.0.0/0ターゲットに3.で作成したNATゲートウェイを指定したルートを追加してください。
ルートの編集.png
これにより、lambda関数から外に出る際に、パブリックサブネット内のNATゲートウェイを経由する形となります。

ちなみにサブネットを作成した直後は、サブネットのルートテーブルにVPCのものが紐づいているので、間違ってそちらを編集しないように気をつけてください。

おしまい

あとはlambda関数内で外部アクセスするコードを記述、検証してOKなら問題なしです。

なにか抜けや間違いなどありましたらご指摘いただけると幸いです。

47
34
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
34