2016-12-17 22 views
2

APIゲートウェイメソッドのボディマッピングテンプレートにリクエスト時間を含める必要があります。日付/時刻変数または関数はありますか? で何も見つかりませんでした。AWS API Gateway - ボディマッピングテンプレートで日付/タイムスタンプ/エポックを取得するにはどうすればよいですか?

例ボディマッピングテンプレート:

Action=SendMessage&MessageBody=$util.urlEncode("{""timestamp"":""TIMESTAMP_HERE"",""body-json"":$input.json('$'),""params"":""$input.params()""}") 

答えて

1

UPDATE: APIゲートウェイだけで追加した2つの新しいコンテキスト変数http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

$context.requestTime The CLF-formatted request time (dd/MMM/yyyy:HH:mm:ss +-hhmm). 
$context.requestTimeEpoch The Epoch-formatted request time. 

APIゲートウェイは、現在この機能をサポートしていません。これはフォーラムの前に要求されました - https://forums.aws.amazon.com/thread.jspa?messageID=697658&。バックログにはこの機能がありますが、残念ながら私はタイムラインにコミットできません。

+0

ありがとう!メソッドの統合要求をSQSにマップしました。これは、SQSのFirst Receivedタイムスタンプを使用する回避策です。 –

+0

タイムスタンプを取得するために環境変数のようなものを提供できれば、これは非常に便利な機能です。 – Siddardha

+1

誰も$ context.requestTimeを使って成功しましたか? APIゲートウェイの統合でそれを使用すると、私はまだ空の文字列を取得しています。 – giorgioca

5

は、API Gatewayの要求からタイムスタンプを取得する方法があるように見えますが、あなたはそれを見つけるためにthe X-Ray documentationに見てする必要があります。

アマゾンAPIゲートウェイゲートウェイは、着信HTTP要求にトレースIDを追加しますX-Amzn-Trace-Idというヘッダーに入力します。

(...)

trace_idはハイフンで区切られた3つの数字で構成されています。たとえば、1- -a006649127e371903a2de979です。これには、

  • バージョン番号、つまり、1
  • 元の要求の時間を、Unixエポック時間で、8桁の16進数で。たとえば、12月2日午前10時、エポックタイムの2016年PSTは1480615200秒、または16進数の58406520です。更新のための

(...)

+0

「元のリクエストの時刻」は、ブラウザが接続を開始したと主張した時刻であることを知っていますか?それとも、AWSインフラストラクチャが最初に接続を見ているのでしょうか?つまり、**クライアントからAWSへのネットワークレイテンシを測定するために使用できますか?** – Neo

+0

次のコードでヘッダにアクセスできます: '$ input.params( 'X-Amzn-Trace-Id')' – dtbarne

+0

@dtbarne - 動作していないようです。私はそれを使用しようとすると空の文字列が得られます。 – raRaRa