AWS API Gateway - 如何在正文映射模板中获取日期/时间戳/纪元?

时间:2016-12-17 01:19:14

标签: amazon-web-services aws-api-gateway vtl

我需要在API网关方法的正文映射模板中包含请求时间。有日期/时间变量或功能吗?我在template reference找不到任何内容。

示例正文映射模板:

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

3 个答案:

答案 0 :(得分:5)

似乎有办法从API网关请求中获取时间戳,但您需要查看the X-Ray documentation才能找到它:

  

Amazon API Gateway网关在名为 X-Amzn-Trace-Id 的标头中为传入的HTTP请求添加跟踪ID。

     

(...)

     

trace_id由三个用连字符分隔的数字组成。例如,1- 58406520 -a006649127e371903a2de979。这包括:

     
      
  • 版本号,即1.
  •   
  • 原始请求的时间,在Unix纪元时间内,以8个十六进制数字。例如,2016年12月2日上午10点,在纪元时间的PST为1480615200秒,或以十六进制为58406520。
  •   
     

(...)

答案 1 :(得分:2)

更新: API Gateway刚刚添加了两个新的上下文变量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&。我们的积压工作中有这个功能,但遗憾的是我无法承诺任何时间表。

答案 2 :(得分:0)

只需在模板顶部为您希望它到期的日期设置一个时间值。然后将其作为属性添加到您的项目中。例如,如果您希望 Item 在 60 天后过期,则需要添加 5184000 秒。

#set($expireDate = $context.requestTimeEpoch + 5184000) 
{
  "TableName": "your-table-name",
  "Item": {
      ... other attributes
      "expireDate": {"N": "$expireDate"},
  }
}