【发布时间】:2016-09-05 16:16:43
【问题描述】:
这应该很简单,所以我希望有人能很快提供帮助。
我有以下基本 python 脚本:
import boto3
elb = boto3.client('elb')
print(elb.describe_load_balancers())
当我通过命令行上的 python 脚本执行此操作时,它可以完美运行,返回所有负载均衡器的所有信息。
CLI 命令也可以从命令行完美运行:
aws elb describe-load-balancers
但是,当我将脚本添加到 AWS 的 Lambda 函数中时,它会失败。 这是脚本在 AWS lambda 中的样子:
import boto3
def lambda_handler(event, context):
elb = boto3.client('elb')
return elb.describe_load_balancers()
这应该像其他返回所有负载均衡器数据一样工作,但是它返回此错误:
{
"stackTrace": [
[
"/usr/lib64/python2.7/json/__init__.py",
250,
"dumps",
"sort_keys=sort_keys, **kw).encode(obj)"
],
[
"/usr/lib64/python2.7/json/encoder.py",
207,
"encode",
"chunks = self.iterencode(o, _one_shot=True)"
],
[
"/usr/lib64/python2.7/json/encoder.py",
270,
"iterencode",
"return _iterencode(o, 0)"
],
[
"/var/runtime/awslambda/bootstrap.py",
41,
"decimal_serializer",
"raise TypeError(repr(o) + \" is not JSON serializable\")"
]
],
"errorType": "TypeError",
"errorMessage": "datetime.datetime(2013, 7, 26, 15, 35, 57, 690000, tzinfo=tzlocal()) is not JSON serializable"
}
到目前为止,我一直在为此烦恼一整天,无法找出问题所在,因此我们将不胜感激。
作为一个额外的说明,我能够让这个函数在 AWS lambda 中正常工作:
import boto3
def lambda_handler(event, context):
elb = boto3.client('elb')
return elb.describe_tags(LoadBalancerNames=[event['loadBalancer']])
您可能会注意到,在上面的命令中我指定了负载均衡器而不是全部,我也尝试过使用其他功能,但没有运气。
【问题讨论】:
-
看起来它只是无法将返回值序列化为 JSON。它在本地运行良好,因为您没有像 Lambda 那样将最终响应转换为 JSON。您可能需要添加一些代码来将响应转换为可以序列化为 JSON 的内容(看起来它在日期时间值上失败了)。
标签: python amazon-web-services amazon-elb boto3 aws-lambda