我正在尝试使用AWS Lambda函数中的AWS X-Ray Python SDK提供的get_service_graph()来获取JSON。 reference link
import boto3
from datetime import datetime
def lambda_handler(event, context):
client = boto3.client('xray')
response1 = client.get_service_graph(
StartTime=datetime(2017, 5, 20, 12, 0),
EndTime=datetime(2017, 5, 20, 18, 0)
)
return response1
但是,当我传递StartTime和EndTime参数时,堆栈跟踪报告的datetime类型不是JSON可序列化的。我甚至尝试过以下方式。
response1 = client.get_service_graph(
StartTime="2017-05-20 00:00:00",
EndTime="2017-05-20 02:00:00"
)
奇怪的是,如果EndTime设置为“2017-05-20 01:00:00”,则不会生成错误。除此之外,发生了同样的错误。
{
"stackTrace": [
[
"/usr/lib64/python2.7/json/__init__.py",
251,
"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",
104,
"decimal_serializer",
"raise TypeError(repr(o) + \" is not JSON serializable\")"
]
],
"errorType": "TypeError",
"errorMessage": "datetime.datetime(2017, 5, 20, 1, 53, 13, tzinfo=tzlocal()) is not JSON serializable"
}
我确实只尝试使用日期,比如datetime(2017年,5,20)。但是,如果我连续两天使用StartTime和EndTime,则运行时抱怨间隔时间不能超过6小时。如果我使用相同的日期,它只返回空的JSON。我不知道如何获得get_service_graph()的粒度。
我认为用于AWS X-Ray的Python SDK可能为时过早,但我仍然希望寻求具有相同经验的人的帮助。谢谢!
答案 0 :(得分:0)
正确的方法是使用{
"TS" :{
"name":"abc",
"value":"123"
},
"DB" :{
"TS": {
"MMPTELID": "043199",
"UNIQUEID": "43199"
}
}
}
而不是字符串...但是你可以尝试只使用日期...没有时间吗?至少AWS文档显示的示例与您的完全相同,但只有yyyy-mm-dd没有时间