2

単純な GET を定義する AWS Gateway API があります。それを使用して Lambda をトリガーします。リクエスト マッピングを使用してクエリ パラメータを取得し、json オブジェクトを作成して Lambda を指定します。これが私のマッピングです

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

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

私は VTL と Amazon Gateway API を初めて使用しますが、これが完了しない原因となっている間違いを犯しているようです。私は多くのバリエーションを試しましたが、引用$myMap.get($key)すると完全にはなりません. 私は何を間違っていますか?私は理解するのが大好きです。同じ出力の提案も歓迎します。

アップデート

「{」と「}」を削除すると、タイムアウトしなくなりました。なぜそれが重要なのかわかりません。それは私が望んでいるフォーマットではありませんが、これを理解するための興味深い情報です。

更新 2

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

{

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

3 に答える 3

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 Gateway コンソールの TestInvoke 機能には、10 秒の時間制限があります。Lambda 関数はコールド スタートの場合があるため、場合によってはそれ以上かかる場合があります。そのため、実際の呼び出し (API のデプロイ後) では、Lambda コールド スタートにヒットする呼び出しの時間制限を 30 秒に増やしました。

于 2016-04-01T20:39:41.260 に答える
0

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

現在、AWS API Gateway には、リクエストに 10 秒以上かかるとタイムアウトになるという非常に厳しい制限があります。

更新についてフォローできる公式の AWS スレッドは次のとおりです: https://forums.aws.amazon.com/thread.jspa?threadID=205424

于 2016-04-01T14:57:11.467 に答える