Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AWS函数无法通过Lambda返回ELB数据-在控制台上运行_Python_Amazon Web Services_Amazon Elb_Boto3_Aws Lambda - Fatal编程技术网

Python AWS函数无法通过Lambda返回ELB数据-在控制台上运行

Python AWS函数无法通过Lambda返回ELB数据-在控制台上运行,python,amazon-web-services,amazon-elb,boto3,aws-lambda,Python,Amazon Web Services,Amazon Elb,Boto3,Aws Lambda,这应该很简单,所以我希望一些人能很快帮上忙 我有以下基本python脚本: import boto3 elb = boto3.client('elb') print(elb.describe_load_balancers()) 当我通过命令行上的python脚本执行此命令时,它工作得非常好,返回所有负载平衡器的所有信息 CLI命令在命令行中也可以正常工作: aws elb describe-load-balancers 但是,当我将脚本添加到AWS的Lambda函数中时,它失败了。 以下是A

这应该很简单,所以我希望一些人能很快帮上忙

我有以下基本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']])
正如您在上面的命令中所注意到的,我指定了负载平衡器而不是所有的负载平衡器,我也尝试了其他函数,但没有成功。

这看起来可能是特定于“python”的,它在本地机器上工作的原因可能是您的lambda函数中没有包含python库

描述错误的几篇文章:

以及关于为Lambda Python创建部署包的文档:

这看起来可能是特定于“python”的,它在本地机器上工作的原因可能是您有一个不包含在lambda函数中的python库

描述错误的几篇文章:

以及关于为Lambda Python创建部署包的文档:


我在和Jim.p挖掘相同的参考资料,并尝试使用我的帐户。通过正确的实施为我提供了正确的结果:

import boto3
import json
import datetime
from time import mktime

class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return int(mktime(obj.timetuple()))
        return json.JSONEncoder.default(self, obj)

def lambda_handler(event, context):
    elb = boto3.client('elb')
    return json.dumps(elb.describe_load_balancers(), cls = MyEncoder)

我在和Jim.p.挖同样的参考资料,并试着用我的账户。通过正确的实施为我提供了正确的结果:

import boto3
import json
import datetime
from time import mktime

class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return int(mktime(obj.timetuple()))
        return json.JSONEncoder.default(self, obj)

def lambda_handler(event, context):
    elb = boto3.client('elb')
    return json.dumps(elb.describe_load_balancers(), cls = MyEncoder)

看起来它只是无法将返回值序列化为JSON。它在本地运行良好,因为您没有像Lambda那样将最终响应转换为JSON。您可能需要添加一些代码来将响应转换为可以序列化为JSON的内容(看起来它在datetime值上失败了)。看起来它只是无法将返回值序列化为JSON。它在本地运行良好,因为您没有像Lambda那样将最终响应转换为JSON。您可能需要添加一些代码来将响应转换为可以序列化为JSON的内容(看起来它在日期时间值上失败了)。很好!多走一英里的路!;-)谢谢你们,这真的帮了我大忙。我现在可以研究很多好东西:Dnice!多走一英里的路!;-)谢谢你们,这真的帮了我大忙。我现在可以研究很多好东西:D