pythonのrequestsでAPIGateWayをAPIKeyを使って呼び出す


概要

ローカルのpythonのプログラムからリクエストを送信してAPI Gateway を呼び出せるかを試してみました。
APIKeyを設定することで呼び出しを制限できるので呼び出しを制限することができます。
処理呼び出し用の画面でも作ってそこのアクセス制限をしてしまう方が楽な方が気もしますが・・・

APIGateWayの設定

  • Lambda関数を作成し、トリガーにAPIGateWayを設定するときに↓のように REST API を指定してセキュリティを API Key にします

  • APIGateWayの方では メソッドリクエスト から APIキーの必要性true に変更します。

  • アクションからAPIのデプロイを行う

呼び出すPythonのプログラム

  • ↓のようにrequestsを使ってheadersにAPIKeyを設定すれば呼び出すことができます。
import requests
import traceback

if  __name__ == "__main__":
    try:

        # APIKeyはAPIGatewayで確認したAPIKey
        headers = {'x-api-key': 'APIKey'}
        # xxxxxxxx の部分は各APIの値 /test2 の部分はリソース名を指定ここでは greet
        url='https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/default/test2'
        # 成功のパターン
        rSucess = requests.get(url, headers=headers)
        print(rSucess.status_code)
        print(rSucess.content)

        # 失敗のパターン
        rFail = requests.get(url)
        print(rFail.status_code)
        print(rFail.content)

    except :
        print(traceback.format_exc())
  • 呼び出した結果は↓のように1つ目はapikeyがあるため結果が返ってきますが、2つ目はapikeyがないため失敗となります。
200
b'"Hello from Lambda!"'
403
b'{"message":"Forbidden"}'