API Gateway+Lambdaプロキシ統合の場合のLambda関数の戻り値は指定の形式で返さないと、API Gateway側で502サーバーエラー(502 Bad Gateway)が返ってきてしまう。
{"message": "Internal server error"}
Lambdaプロキシ統合の場合のLambda関数の戻り値
↓戻り値は指定の形式については以下に記載があります。
プロキシ統合のための Lambda 関数の出力形式
API Gateway で Lambda プロキシ統合を設定する - Amazon API Gateway
必須の項目はstatusCode、headers、bodyみたいです。
必須の項目のみの場合は以下のような内容を返す必要があります。
Pythonの例
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(responsebody)
}
必須項目以外にはisBase64Encoded、multiValueHeaders があるそうです。
エラーを返したい場合
同様に、エラーを返したい場合も上記の形式に合わせる必要があります。以下は500サーバーエラーのレスポンスを返したい場合の例です。
resbody = {'code': 'InternalServerError', 'message': '予期しないエラーが発生しました'}
return {
'statusCode': 500,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(resbody, ensure_ascii=False)
}
400クライアントエラーでも、パラメーター不足などちょい詳しい情報を返してあげると優しいですよね。
resbody = {'code': 'MissingRequiredParameter', 'message': f'パラメーター {param_name} がありません。'}
return {
'statusCode': 400,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(resbody, ensure_ascii=False)
}
よくあるHTTPのエラーレスポンスについて
↓よくあるHTTP ステータス コード、エラーコード、メッセージはこちらが参考になりました。
REST API エラーの処理
一般的なMicrosoft Defender for Endpoint API エラー | Microsoft Learn
↓むちゃ詳しい情報はこちら…
HTTP レスポンスステータスコード
HTTP レスポンスステータスコード - HTTP | MDN