2

AWS API Gateway と Lambda 関数 (python) を統合タイプとして使用して、適切な http ステータス コードとエラー メッセージを設定する方法を理解するのに苦労しています。

私は簡単な例で作業しています。詳細は次のとおりです。

ラムダ関数

def lambda_handler(event, context):

    return_json = {}
    if event["request-number"] == "":
        raise Exception("Error request-number can't be empty")
    elif event["request-number"] == "3":
        raise Exception("Value not accepted")
    else:
        return_json = {"service-activated": "TRUE"}

    return return_json

API /resourcetest POST

これは上記のラムダと統合されています。

目標: HTTP 400 と、メッセージError request-number can't be empty when request-number = "" を含む本文を返します。

実装:

  1. 新しいメソッド レスポンス 400 を作成しました
  2. ラムダ Error Regex では、Error.* をマッピングしたので、その文字列をキャッチします
  3. ボディ マッピング テンプレート: コンテンツ タイプを application/json として作成し、テンプレートとして使用しました (設定前にハッシュタグ記号がありますが、このページの書式設定が台無しになるため、省略しました):

    set($inputRoot = $input.path('$')) { "メッセージ" : $input.json('$.errorMessage') }

  4. メソッドの応答に http ステータス 400 があることを確認しました (そして、私はそれを持っています)。

テスト AWS API Gateway コンソールを使用して、HTTP 400 とメッセージError request-number can't be empty in the body があることをテストしました。良い私は私が望んでいたことを達成しました:

ここに画像の説明を入力

Postman と Chrome プラグイン Restlet Client でもテストすることにしましたが、http ステータス 200 とエラー メッセージが適切にフォーマットされていません。

ここに画像の説明を入力

さて、これは非常に奇妙です: AWS API コンソールからはすべてがうまく機能し、外部サービスからは何も期待どおりに機能しません。

誰かが似たようなことに対処しなければなりませんでしたか?

ありがとう!

4

1 に答える 1