LambdaのIPアドレスを固定化する

## はじめに

LambdaとAPIサーバを組み合わせたサービスを開発する際、Lambdaのアクセス制御をしたいケースがあるかと思います。
その際、IPアドレスでアクセス制御を行うことが多いと思うのですが、LambdaのIPアドレスは基本的には固定化されていません。
さらに、Lambdaが使うIPアドレス範囲も結構広く、ちょくちょく変わるため、IPアドレスを固定化しないと制御が難しい。

⇒

上記について、LambdaのIPアドレスを固定化させる方法を紹介します。

## 前提
VPC,Lambdaが作成されていること。
LambdaがVPCに紐づいていること。

## 手順
1. インターネットゲートウェイの作成
1. パブリックサブネットの作成
1. インターネットゲートウェイの割り当て
1. プライベートサブネットの作成
1. NATゲートウェイの作成
1. プライベートサブネットとNATゲートウェイを紐づける

最終的な構成としては、下記のようになります。
![LambdaToEC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/87eebfb0-833d-bd31-66e1-41d416262208.png)

順に紹介していきます。


### インターネットゲートウェイの作成
>インターネットゲートウェイは、VPC とインターネットとの間の通信を可能にする VPC コンポーネントであり、冗長性と高い可用性を備えており、水平スケーリングが可能です。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html

作成済みのVPCを選択し、左ペインの「インターネットゲートウェイ」>「インターネットゲートウェイの作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/734f199b-c355-8f83-d517-b6ac91c4608e.png)

任意のタグをつけて、作成しましょう。

### パブリックサブネットの作成
作成済みのVPCを選択し、左ペインの「サブネット」>「サブネットの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/a98fad29-0e27-1bf9-fe6c-4085b47ba4cf.png)

既存のVPCを選択すると、下記のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/0910fbd5-cfbb-7aac-9fb0-43fc4d8bcebd.png)

パブリックサブネットだとわかりやすいように、サブネット名に「public-xxxxx」のような名前を付けておきましょう。

IpV4 CIDRブロックは、紐づいているVPCの範囲内に収まるように設定しましょう。

上記入力して、「サブネットを作成」を押下。


### インターネットゲートウェイの割り当て

先ほど作成したサブネットは、今の段階ではパブリックとは言えません。
インターネットゲートウェイを割り当てて、パブリックサブネットとしてあげましょう。

作成済みのVPCを選択し、左ペインの「サブネット」>作成したサブネットを選択します。
その後、紐づいているルートテーブルを選択します。

![スクリーンショット 2021-08-30 183608.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/557aa14b-253e-9e2b-3f7f-17863b797a19.png)
(ルート「0.0.0.0/0」の設定はまだないかと思います。こちらを今から追加していきます。)

「ルートテーブル：xxxxxxxxxx(リンク)」となっているので、リンク部分を押下します。

![スクリーンショット 2021-08-30 185221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/fcc76a2b-6e6f-1e01-ec75-98d62e326ea5.png)

「ルートを編集」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/5bf02692-e2c5-9021-4159-832c515326e0.png)

ここで下記を入力し、「変更を保存」を押下します。
送信先：0.0.0.0/0
ターゲット：インターネットゲートウェイ⇒1.で作成したインターネットゲートウェイを選択

これで、パブリックサブネットが作成できました。

### プライベートサブネットの作成
次に、プライベートサブネットを作成していきます。
手順はパブリックサブネットを作った時と同様です。

作成済みのVPCを選択し、左ペインの「サブネット」>「サブネットの作成」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/a98fad29-0e27-1bf9-fe6c-4085b47ba4cf.png)

既存のVPCを選択すると、下記のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/0910fbd5-cfbb-7aac-9fb0-43fc4d8bcebd.png)

プライベートサブネットだとわかりやすいように、サブネット名に「private-xxxxx」のような名前を付けておきましょう。

IpV4 CIDRブロックは、紐づいているVPCの範囲内に収まるように設定しましょう。

上記入力して、「サブネットを作成」を押下。

今の段階で、ここまでできてます。
![1LambdaToEC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/a75008f5-78e9-2711-e1ca-69840a313611.png)

### NATゲートウェイの作成
次に、NATゲートウェイを作成していきます。

>NAT ゲートウェイは、ネットワークアドレス変換 (NAT) サービスです。NAT ゲートウェイを使用すると、プライベートサブネット内のインスタンスは VPC 外のサービスに接続できますが、外部サービスはそれらのインスタンスとの接続を開始できません。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating

作成済みのVPCを選択し、左ペインの「NATゲートウェイ」>「NATゲートウェイを作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/ebf9a55e-a014-c697-924b-0c590bed8c72.png)

下記のように入力して、「NATゲートウェイを作成」を押下します。
名前：任意
サブネット：public-xxxx
接続タイプ：パブリック
Elastic IP：「Elastic IPの割り当て」を押下し、作成

### プライベートサブネットとNATゲートウェイを紐づける
今の段階で、ここまでできてます。
![2LambdaToEC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/a2fa3032-4f55-a413-8b5d-bd4af10bcece.png)

プライベートサブネットとNATゲートウェイが紐づいていないため、そこの設定をしていきます。

作成済みのVPCを選択し、左ペインの「サブネット」>プライベートサブネットを選択します。
【インターネットゲートウェイの割り当て】の手順と同様に、ルートテーブルの「ルートを編集」を押下します。

下記のように入力し、「変更を保存」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/98b265f6-e8f2-faa1-475e-a7b30a68412c.png)
送信先：0.0.0.0/0
ターゲット：NATゲートウェイ⇒作成したNATゲートウェイ

これでLambdaのIPアドレスが、NATゲートウェイのElastic IP Addressに固定化されます。
![LambdaToEC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502798/87eebfb0-833d-bd31-66e1-41d416262208.png)