我有一个AWS Python Lambda,用于管理我的基础架构的资源标记(使用boto3在AWS API上进行多次调用)。在我的笔记本电脑上执行的功能运行良好,也在Lambda下运行。但是当我在Lambda下执行它时,我的所有日志(调试或错误级别)都不会发送到cloudwatch日志。而不是像我这样的多个日志:
Resetting dropped connection: ec2.us-west-2.amazonaws.com
Resetting dropped connection: ec2.us-west-2.amazonaws.com
Google告诉我,这是一个与urlib3相关的问题,而且对AWS API的请求频率过高。
我的问题是,如何在Lambda中避免它在cloudwatch日志中检索我的日志?我搜索了一个更好的解决方案,而不是在我的代有没有办法在全球范围内做到这一点?
由于
答案 0 :(得分:1)
好的,终于可行了。事实上,我在重试过程中过于激进,但我需要尽快完成每项操作(例如:在可用时附加EBS)。在boto3中,有一种更简洁的方法可以等待资源准备就绪,而不是在代码中放入time.sleep(xx)。
解决方案是使用boto3 waiter 我的建议是为重试间隔设置一个自定义值,因为默认值为15秒(太长)。
waiter.config.delay = 1
waiter.config.max_attempts = 10(as you want for this param)
使用此参数可以避免lambda发送类似“重置丢弃连接:ec2.us-west-2.amazonaws.com”的日志,并以最快的方式执行Lambda。
我同意smdev的说法,将睡眠置于lambda函数中是不太好的(boto3服务员就像睡觉一样),但对我而言,只需几次调用Lambda函数即可。例如,当Autoscaling通知调用您的Lambda时。 如果您的Lambda直接由API Gateway(示例)以中等或高频率调用,那么这是一个非常糟糕的想法,但如果它每天只有2-3次就可以了。
答案 1 :(得分:0)
AWS clodwatch日志不会"覆盖"你自己的日志。请不要在lambda函数中睡觉,因为您也将为此付费。此外,如果请求率过高,您将收到$date = new Carbon("2016-05-30 15:35:00");
echo $date->toIso8601String();
错误。
有一些方法可以避免这种情况:
RequestLimitExceeded
和分页来获取项目的列表/集合,而不是查询单个项目希望这澄清。
答案 2 :(得分:-2)
放置此等待配置的位置:
waiter.config.delay = 1
waiter.config.max_attempts = 10
(正如你想要的那样)