AWS Lambda - time.time()返回undefined

时间:2018-03-08 18:27:33

标签: python amazon-web-services aws-lambda boto3

我正在使用lambda函数,我使用boto3将put_item()放入我的DynamoBD表中,并在代码中添加ttl参数(生存时间)。

ttl = str(int(time.time() + 2629746))

这一行给了我一个月的时间,但由于某些原因,我得到了很多这样的错误:

An error occurred (ValidationException) when calling the PutItem operation: The parameter cannot be converted to a numeric value: undefined: ClientError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 52, in handler
response = c_put_item(d)
File "/var/task/lambda_function.py", line 40, in c_put_item
'ttl':{'N':ttl}
File "/var/runtime/botocore/client.py", line 317, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/var/runtime/botocore/client.py", line 615, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the PutItem operation: The parameter cannot be converted to a numeric value: undefined

知道为什么吗?

PS:即时通讯使用python3

- 编辑:

我添加了更多的代码。 出于某种原因,这不起作用。

    ttl = str(int(time.time() + 2629746))

    response = client.put_item(TableName='MYTABLENAME',Item={
        'item':{'S':item},
        'title':{'S':title},
        'link':{'S':link},
        'price':{'N':price},
        'category':{'S':category},
        'avaliable':{'S':avaliable},
        'image':{'S':image},
        'ttl':{'N':ttl}
    })

- EDIT2:

AWS docs指定你应该像我一样使用put_item(),除了我被迫使用str()因为我收到了一个错误。

2 个答案:

答案 0 :(得分:1)

@kichik实际上对他的评论是正确的。此错误不一定表示ttl为None。它说整个电话的一个字段是None

所以我检测到冲突的字段我添加了一个异常,问题就停止了。

答案 1 :(得分:0)

考虑将ttl设为整数:ttl = int(time.time() + 2629746)

Boto3 docs, Creating a new item

  

有关可用于项目的所有有效类型,请参阅Valid DynamoDB Types

     

这些是与Boto3表资源(dynamodb.Table)和DynamoDB一起使用的有效项类型:
  •整数 - 数字(N)
  •decimal.Decimal - Number(N)