2017-07-09 15 views
0

API GatewayとLambdaの新機能です。私はラムダにNode.js ExpressベースのAPIを配備しようとしています。私はawslabsからaws-serverless-express exampleを使用しています。そのため、多くのAWS設定が自動的に作成されました。AWS API Gateway OPTIONSリクエストで500エラーが返される

私のAPIがAPIゲートウェイ経由で正しく動作しているようです。私の投稿とメソッドをうまく動作させる。しかし、私はCORSをサポートする必要があります。私のアプリケーションはOPTIONSリクエストに対して正しいCORSレスポンスを返す必要がありますが、AWSでは機能しません。

最終的に、私が何をしているにせよ、私はオプション要求に対して500応答を受け取る。私はこれらの500のエラーに関する情報を得る方法を理解することができませんでした。何が原因なのか分かりません。

これは500応答{"message": "Internal server error"}の本体です。

これらは、応答ヘッダは、次のとおり

コンテンツ長:36

コンテンツタイプ:アプリケーション/ JSON

日付:日、2017年7月9日午後05時56分24秒GMT

ステータス:500

介し:1.1 9af17e5a616bfc9ac07fc7e415ade9e6.cloudfront.net(CloudFrontの)

X-AMZ-CF-ID:1_AZmkLqf1rjkog2MRtvcBAe54aIZdPWmNApBTwG48Af-v_g9WHkZwの==

X-AMZN-requestid:ec216a62-64cf-11e7-ad2b-4f1e96508dba

Xキャッシュ:CloudFrontのからのエラー

私のOPTIONSリクエストがラムダのアプリにも届かないことは確かです。

APIゲートウェイ(および私のアプリ)を使用してCORSを設定しようとしました。私はすべての起点を許可するように設定しようとしています。

私はこの問題をデバッグするために何かを見ている、またはやっていることがありますか?

編集:私はAPIゲートウェイのCloudWatchの中にロギングを有効にしようとした、この問題をデバッグするための試みにおいて

CloudWatch configuration for the API Gateway

はそれをやった後、私はCloudWatchの中でこれら二つのゲートウェイのlookin'のログを参照してください。私はPRODを使用してきた

enter image description here

ので、私はそのリンクをクリックすると、これを参照してください。

enter image description here

私は、これはログエントリの長いリストであると仮定します。この文脈で「ストリーム」が何を意味するのか分かりません。これらのエントリは何百もあります。したがって、私は最新のタイムスタンプを持つものを選んでクリックします。今、私はこれを参照してください:私のゲートウェイのログのすべてがこのように見えるようだ

enter image description here

。 IE:明らかに空です。

ロギングを正しく設定していますか?私は正しい場所を探していますか?

+0

にすべてのオプション要求を送信しますエラー? –

+0

本文内の唯一の内容は次のとおりです。{"message": "Internal server error"} –

+0

Chromeから引き上げた詳細をいくつか更新しました。 –

答えて

0

AWSのラムダ文書に隠されているのは、CORSを有効にするためのラムダのCORSヘッダを設定する必要があるという事実でした。そこでここではそれを行う方法です:

let payload = { 
    statusCode: 400, 
    body: JSON.stringify('body'), 
    headers: {"Access-Control-Allow-Origin": "*"} // NEED this for API CORS access 
}; 
callback(null, payload); 

あなたは、ヘッダーと一緒に有効からstatusCodeと体を返さなければならない、またはAPIはAPIレスポンスにあなたのラムダ反応を変換するために失敗します。

+0

残念ながら、私はすでにJavaScriptで(私が思う)同等のものを持っています:app.use( cors({ 出典: '*' }) ); –

+0

私はこれも手動で行っていますが、corsライブラリを使用していません。OPTIONSエンドポイントを手動で実装しても、ラムダログに何も表示されません。 –

+0

同じではありません。これはjavascriptで、IRepsonsePayloadを無視します。これはTypeScript型の入力だけです。ヘッダーを戻す必要があります:headers:{"Access-Control-Allow-Origin": "*"} –

0

あなたはここでアプリがexpress.Thisのルータオブジェクトである、あなたのルートのインデックスファイルに

app.options(function(req,res){res.send(200);}) 

を次のコードを使用することができる500の本文には何が200

+0

私はcorsパッケージの使用を取り除き、これを無効にしました。私はget/postリクエストがAPIにそれを作ることを示すことができますが、オプションのリクエストはまったくないと思います。//すべてのオプションリクエストを200に戻します。 app.options( '*'、(req、res)=> { console.log( 'FSsdfafsadfdsa'); res.append( 'Access-Control-Allow-Origin'、 '*'); res.sendStatus(200); }); –

関連する問題