2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LambdaのIP固定

Posted at

実行毎に変わるLambdaのIPを固定。
呼び出し先のAPIにIPをホワイトリスト登録するなどで利用。

構成図

image.png

環境

  1. VPCを1つ用意する。
  2. サブネットとルーティングテーブルを2つずつ用意し、それぞれアタッチする。
  3. インターネットゲートウェイを作成し、VPCにアタッチ
  4. パブリックサブネットのルーティングテーブルの0.0.0.0/0をインターネットゲートウェイに向ける。
  5. EIP確保、NATゲートウェイ作成、プライベートサブネットのテーブルの0.0.0.0/0をNATに向ける。

Lambdaの作成/配置

  1. IAMロールの作成。ポリシーはAWSLambdaVPCAccessExecutionRole
  2. Lambda作成。
  3. LambdaコンソールのVPCを編集し、上記で作成した環境を選択する。適応までちょっと待つ。

検証

API Gatewayで呼び出し元のIPを表示してみる。

統合リクエストから以下を設定することで呼び出し元のIPを取得できる。

統合リクエストのマッピング
{
  "sourceIp" : "$context.identity.sourceIp",
  "input" : $input.path('$')
}
Lambda側のコード抜粋
request_url = "https://******.execute-api.ap-northeast-1.amazonaws.com/****"
api_key = "**********"

def lambda_handler(event, context):
    headers = {'x-api-key': api_key, "Content-Type":"application/json"}
    req = urllib.request.Request(url=request_url, method="GET", headers=headers)
    with urllib.request.urlopen(req) as res:
        body = res.read().decode("utf-8")
    return json.loads(body)

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?