2016-04-01 22 views
1

シンプルなGETを定義するAWS Gateway APIがあります。私はそれを使ってラムダを引き起こします。リクエストマッピングを使用して、私はクエリのparamsを取得し、ラムダを与えるjsonオブジェクトを作成します。ここで私はVTLとAmazonゲートウェイAPIに新しいです私のマッピングVTLタイムアウトを使用したAWSゲートウェイAPIマッピング

#set ($myMap = $input.params().get("querystring")) 

{ 
    #foreach($paramName in $myMap.keySet()) 
    "$paramName" : "$util.escapeJavaScript($myMap.get($paramName))" 
     #if($foreach.hasNext),#end 
    #end 
} 

あり、私がこれまでは決して完全な原因で間違いを犯していそうです。私は多くのバリエーションを試しましたが、もし私が今までに引用したのであれば、$myMap.get($key)は完成しません。何が間違っているのですか? IDは愛することを愛する。同じ出力の提案も大歓迎です。

UPDATE

私はこのもはや回 "{" と "}" を削除した場合!今私はなぜそれが問題なのかわかりません。そして、それは私が望む形式ではありませんが、興味深い楽しい話がこれの底にくるのです。

更新2

上記のロジックとその問題を同じ問題で簡略化しました。また、別のオブジェクトを開くjsonに属性を置くと、ロジックが機能することもわかりました。これはひどい。

{ 

    "data": { 
    #foreach($paramName in $myMap.keySet()) 
    "$paramName" : "$util.escapeJavaScript($myMap.get($paramName))" 
     #if($foreach.hasNext),#end 
    #end 
    } 
} 

答えて

0

はVorは、ゲートウェイAPIは、10秒の制限があり、上述したように。私の場合、何が起こっていたのは、フォーマットが正しいとラムダが例外を投げずに実行するということでした。このロジックは10秒以上かかる。この状況を本当に混乱させたのは、REST APIをテストするときにAWS出力でした。ほとんどの場合、3つのセクション「レスポンスボディ」、「ヘッダー」、および「ログ」を持つページが表示されます。このログのセクションを見て、VTLテンプレートのしくみを確認してください。入力と出力、およびLambdaへの呼び出しを比較できます。デバッグに最適です。

タイムアウトした場合、ログセクションにデータが入力されません。元の質問に投稿したレスポンスボディ。 LambdaはCloudWatchのログも作成していないらしい。これは、APIの設定と、Lambdaを呼び出すことさえしないほど致命的であったリクエストマッピングでエラーが発生したという印象を与えました。

もう1つの興味深い発見は、ラムダを最初に直接テストした後にタイムアウトしなくなったことです。本質的に「ポンプを始動する」ことによって、その後のラムダ要求は半分の時間で応答した。プライムの後、私はちょうど良いゲートウェイAPIを使用することができます。

0

残念ながら、あなたはすべてのことを正しく行います。

AWS API Gatewayの今日の要望は、要求が10秒以上かかるとタイムアウトするという非常に厳しい制限があります。ここで

は、あなたが更新のために従うことができる公式のAWSのスレッドです: https://forums.aws.amazon.com/thread.jspa?threadID=205424

+0

お返事ありがとうございました。私は実行時間に限界があることを理解しています。それは完全に理にかなっています!それがなぜ10秒以上実行されるのかは分かりません。これは、引用符を追加しようとせずに秒後に実行されます。私はここに開発者の問題があると思います。それはVTL構文の一部を理解していないか、VTL/AWXSの問題です。しかし、私は問題について困惑しています。 – Nexeh

1

質問に記載されている最初のマッピングテンプレート(下に貼り付けられています)がうまくいきます。

#set ($myMap = $input.params().get("querystring")) 

{ 
    #foreach($paramName in $myMap.keySet()) 
     "$paramName" : "$util.escapeJavaScript($myMap.get($paramName))" 
     #if($foreach.hasNext),#end 
    #end 
} 

このマッピングではまだタイムアウトが発生している場合は、さらに分析できます。 API Gatewayフォーラムを使用して、APIとプライベートメッセージを送信して詳細を呼び出すことができます。

APIゲートウェイコンソールのTestInvoke機能の制限時間は10秒です。ラムダ関数はコールドスタートを持つ可能性があるため、時間がかかることがあります。したがって、実際の呼び出し(APIのデプロイ後)では、ラムダコールドスタートにヒットした呼び出しの時間制限を30秒に延長しました。

+0

お返事ありがとうございます。あなたは正しいです。答えに同じ結果を投稿しました。だから私はまだそれを受け入れることはできませんでした。私はAWSがこの混乱を未然に防ぐためにより良いメッセージングを得ることができることを願っています。私はあなたがVTLをどのようにテストしたのか不思議です。私はそれを初めて使ったのですが、それはAPIゲートウェイの一部だったからです。 – Nexeh

関連する問題