Node.jsを使用してLambda Hello world関数を作成し、Get呼び出しのAPI GateWayトリガーを作成し、URLを試してLambda関数にアクセスし、エラーを取得しました。
メッセージ:「内部サーバーエラー」。
(AWSに非常に新しい)
Lambda関数を実行した後、statusCode
を渡す必要があります。渡さない場合、API Gatewayはエラーをトリガーします502 Bad Gateway
デフォルトでは。
message = {
'message': 'Execution started successfully!'
}
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(message)
}
編集:このサンプルはPython用です。 node.jsの場合、コールバックを処理するだけでよく、メッセージは基本的に同じです。
callback(null, {
statusCode: 200,
body: JSON.stringify(message),
headers: {'Content-Type': 'application/json'}
});
私はこの問題を抱えていましたが、私の場合はAPI GatewayとJava lambda関数を使用していました。Cloudwatchを見るとエラーはありませんでした。私の場合、応答オブジェクトには、intではないstatusCodeがありましたが、APIゲートウェイではintである必要があります。
この
private final ResponseCode statusCode;
private final String body;
private final Map<String, String> headers;
private final boolean isBase64Encoded;
StatusCodeをintに変更した後
private final int statusCode;
これは動作します
応答の本文として必ず本文を渡してください。オブジェクトの場合は失敗し、表示されるエラーが表示されます。詳細はこちらをご覧ください- http://www.awslessons.com/2017/lambda-api-gateway-internal-server-error/
API Gateway + Lambdaを使用してこの問題が発生しました。私の場合、問題は単に許可の問題でした。 APIでステージを使用していました。
実行しなければならなかった
aws lambda add-permission --function-name X --source-arn "X" --principal apigateway.amazonaws.com --statement-id X --action lambda:InvokeFunction
お役に立てれば。
既に上記で説明しましたが、私の問題はラムダを呼び出すだけでうまくいきました:
exports.handler = async (event) => {
return "gugus"
};
したがって、ラムダでのすべてのテストはうまくいきました。ログも正常に見えました。 APIレスポンスだけでは問題ありませんでした。
APIゲートウェイで呼び出すには、次のようなものが必要です。
exports.handler = async (event) => {
...
var res ={
"statusCode": 200,
"headers": {
"Content-Type": "*/*"
}
};
res.body = "gugus";
return res;
};
このエラーは、APIの構成に問題があったことを示しています。 CloudWatch Logsを有効にすると、詳細情報を確認できます。 https://aws.Amazon.com/premiumsupport/knowledge-center/api-gateway-cloudwatch-logs/