3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NAT Gateway を使わずに Lambda を固定 IP 化する

3
Last updated at Posted at 2026-06-09

前提

【裏技】Lambda の固定IP化にまだ NatGateway 使ってるの? を参考に実施させていただきました。
ありがとうございます!!

はじめに

  • 通常、AWS Lambdaの送信元IPアドレスを固定する場合、「LambdaをVPC内に配置し、NAT Gatewayを経由させてElastic IPから通信させる」のがベストプラクティスかと思います
  • しかし、NAT Gatewayは維持費だけで月額約4,500円〜($0.045/時間)かかります
  • 今回は、NAT Gatewayを一切使わず、Elastic IPのコスト(約500円/月)のみで固定IP化していきます!

📌 全体像とこの構成の注意点(重要)

  • 通常、VPC内のLambdaはパブリックIPを持てないため、パブリックサブネットに配置しても直接インターネットへ出られません
  • しかし、AWS側が事前にプロビジョニングするHyperplane ENIに対して、無理やりElastic IP(パブリックIP)をマッピングすることで、インターネットへの直接通信を可能にします

⚠️ 運用の注意点(本番非推奨)

  • 1サブネット・1AZ限定: LambdaのスケールアウトやAZ障害に対応するため、複数サブネットに分散すると固定IPが外れます
  • ENIの再作成リスク: Lambda関数が長期間実行されない、または内部的なアップデートがあると、ENIが削除・再作成され、Elastic IPの紐付けが外れる可能性があります
  • あくまで「実験・個人開発用」: 本番環境ではおとなしくNAT Gatewayか、格安の「NATインスタンス」を使いましょう

今回の構成

image.png

1. ネットワーク(VPC)の構築

まずはLambdaを配置する土台となるVPCと、インターネットに直接つながるパブリックサブネットを作成します。

🟩 1-1. VPCの作成

  1. VPCコンソールを開き、「VPC を作成」をクリック
  2. 「VPC のみ」を選択
  3. 名前タグに (任意の名前)例:mock-server-vpc と入力
  4. IPv4 CIDR ブロックに 10.0.0.0/16 と入力して作成

🟩 1-2. サブネットの作成

  1. 左メニュー「サブネット」から「サブネットを作成」をクリック
  2. VPC IDで mock-server-vpc を選択
  3. サブネット名に (任意の名前)例:mock-server-vpc-subnet-01 と入力
  4. アベイラビリティゾーンで ap-northeast-1a を選択(※1つのAZに絞るのがポイントです)
  5. IPv4 VPC CIDR ブロックに 10.0.1.0/24 と入力し、右下の「サブネットを作成」をクリック

🟩 1-3. パブリックIP自動割り当ての有効化

  1. 作成した mock-server-vpc-subnet-01 にチェックを入れる
  2. 右上の「アクション」>「サブネット設定の編集」をクリック
  3. 「パブリック IPv4 アドレスの自動割り当てを有効化」にチェックを入れ、保存

🟩 1-4. インターネットゲートウェイ(IGW)の作成と接続

  1. 左メニュー「インターネットゲートウェイ」から「インターネットゲートウェイの作成」をクリック
  2. 任意の名前(例: mock-server-igw)を入力して作成
  3. 作成後、右上の「アクション」>「VPC にアタッチ」をクリック
  4. mock-server-vpc を選択してアタッチ

🟩 1-5. ルートテーブルの設定(外への道を作る)

  1. 左メニュー「ルートテーブル」を開き、mock-server-vpc に紐づいているメインルートテーブルを選択
  2. 画面下の「ルート」タブ >「ルートを編集」をクリック
  3. 「ルートを追加」をクリックし、以下を設定
    送信先: 0.0.0.0/0
    ターゲット: インターネットゲートウェイ > 作成した mock-server-igw を選択
  4. 「変更を保存」をクリック

2. 固定IP(Elastic IP)の確保

インターネット側から識別される、あなただけの固定IPを1つ確保します

🟩 2-1. Elastic IPの取得

  1. 左メニュー「Elastic IP アドレス」を開き、「Elastic IP アドレスを割り当てる」をクリック
  2. 設定はデフォルトのまま、右下の「割り当て」をクリック
  3. 割り当てられた 「IPv4 アドレス」 と 「割り当て ID (eipalloc-xxx...)」 をメモします
    📝 確保したIP: [ ]

3. Lambdaの設定とENIの紐付け

  • ここからがこの裏技の本番です
  • Lambdaにネットワークインターフェースを生成させ、そこにElastic IPを強引に紐付けます

🟩 3-1. Lambda関数をVPCに配置

  1. Lambdaコンソールを開き、対象の関数を選択
  2. 「設定」タブ >「VPC」を選択し、「編集」をクリック
  3. 以下を選択して保存(適用完了まで2〜3分待ちます)
    VPC: mock-server-vpc
    サブネット: mock-server-vpc-subnet-01
    セキュリティグループ: 任意のグループ(default等、アウトバウンドが全許可されているもの)

🟩 3-2. Lambdaのテスト実行(ENIの自動生成トリガー)

  1. Lambdaの「テスト」タブから、関数を1回テスト実行します
  2. ※これにより、AWS側でLambda専用のENI(Hyperplane ENI)がサブネット内に自動生成されます

🟩 3-3. 自動生成されたENI IDの特定

  1. EC2コンソールを開き、左メニュー「ネットワークインターフェイス (ENI)」を選択
  2. 検索窓に mock-server-vpc-subnet-01 のサブネットIDを入力して絞り込みます
  3. 説明欄に AWS Lambda Predicted ENI... と記載されている、またはタイプが lambda になっているものを探します
  4. その 「ネットワークインターフェイス ID (eni-xxx...)」 をコピーしてメモします
    📝 LambdaのENI ID: eni-xxxxxxxxxxxxxxxxx

🟩 3-4. Elastic IPをENIに関連付け(固定IP化の完了)

  1. VPCコンソールの「Elastic IP アドレス」に戻ります
  2. 確保したIPにチェックを入れ、「アクション」>「Elastic IP アドレスの関連付け」をクリック
  3. 以下を設定し、右下の「関連付け」をクリック
    リソースタイプ: ネットワークインターフェイス
    ネットワークインターフェイス: コピーした LambdaのENI ID を選択
    プライベート IP アドレス: 候補として表示されるIP(10.0.1.xx)を選択

完了です。ありがとうございました!

3
2
0

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?