“解析器必须是字符串或字符流,而不是日期时间” lambda aws函数中的错误-无法弄清楚如何解决它

问题描述 投票:1回答:1

尝试保存/测试此Lambda Boto3函数时,我收到一个非常烦人的错误。关于此问题,这里还有其他线程,但是我花了大约2个小时尝试调试此问题,但无法弄清楚我做错了什么(可能很明显)。任何帮助,将不胜感激!

{
  "errorMessage": "Parser must be a string or character stream, not datetime",
  "errorType": "TypeError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 35, in lambda_handler\n    a = dateutil.parser.parse(instance.launch_time)\n",
    "  File \"/var/runtime/dateutil/parser/_parser.py\", line 1358, in parse\n    return DEFAULTPARSER.parse(timestr, **kwargs)\n",
    "  File \"/var/runtime/dateutil/parser/_parser.py\", line 646, in parse\n    res, skipped_tokens = self._parse(timestr, **kwargs)\n",
    "  File \"/var/runtime/dateutil/parser/_parser.py\", line 722, in _parse\n    l = _timelex.split(timestr)         # Splits the timestr into tokens\n",
    "  File \"/var/runtime/dateutil/parser/_parser.py\", line 207, in split\n    return list(cls(s))\n",
    "  File \"/var/runtime/dateutil/parser/_parser.py\", line 76, in __init__\n    '{itype}'.format(itype=instream.__class__.__name__))\n"
  ]
}
import json
import boto3
import time
import datetime 
import dateutil
from dateutil.parser import parse


def lambda_handler(event, context):
    detailDict = event["detail"]
    ec2 = boto3.resource('ec2')
    instanceId = str(detailDict["instance-id"])
    instance = ec2.Instance(instanceId)
    instanceState = instance.state

    a = dateutil.parser.parse(instance.launch_time)
    b = current_time = datetime.datetime.now(launch_time.tzinfo)

    # returns a timedelta object 
    c = a-b  
    print('Difference: ', c) 

    minutes = c.seconds / 60
    print('Difference in minutes: ', minutes)

    Message=str(instanceId)+" is "+str(instanceState["Name"])
    return {
        'statusCode': 200,
        'body': Message
    }
datetime lambda boto3 launch-time
1个回答
0
投票

launch-time属性已经是日期时间属性。您不需要解析它。

参考:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html

© www.soinside.com 2019 - 2024. All rights reserved.