🙂

API Gateway + Lambda でアクセス元IPアドレスを取得するのに手こずった話

2021/09/12に公開

はじめに

  • Lambda(とAPI Gateway)初心者がアクセス元IPアドレスを取得するのに手こずった話
    • AWSは業務でも少し使ってますがAPI GatewayとLambdaの作成はしたことがなく、udemyのSAAのレクチャーでLambdaの構築のハンズオン①をした直後の状態です
  • 結論から言うとやり方はクラスメソッドさんの記事の通りなのですが、なかなかマッピングテンプレートの設定画面を見つけられず、すんなりできませんでした

躓いたポイント

  1. マッピングテンプレートを見つけられない
    • こちらの記事でもマッピングテンプレートがない、というような記載がありさらに混乱していた
  2. ようやくマッピングテンプレートを見つけて設定したもののIPアドレスが取れない

マッピングテンプレート

  • API Gatewayのリソース -> GET を開いたところの「統合リクエスト」の中にありました

  • 統合リクエストを開き、その一番下にいくと マッピングテンプレート があります

  • 設定しているjsonはAWS公式のページのものです

APIの再デプロイ

  • 上記のマッピングテンプレートを設定して保存したものの、lambda_handler()で引数のeventにアクセスしてもエラーになっていました
  • 保存するだけではだめで、API Gatewayのアクションで再度「APIのデプロイ」をしないと反映されませんでした(それはそう)

動作確認

  • Lambda側のソース(Python)
def lambda_handler(event, context):
    ip = event.get('source_ip')
    return {
        'statusCode': 200,
        'body': ip
    }
  • EC2からcurlでAPIを叩くときちんとEC2のIPアドレスが返却されていました

あとがき

  • udemyのSAAのレクチャーでLambdaの構築のハンズオン②で、ちゃんとマッピングテンプレートもデプロイも説明されていました。。

Discussion