Mat*_*att 6 python amazon-web-services boto3 aws-lambda
我有一个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
Run Code Online (Sandbox Code Playgroud)
Google说我这是相对于urlib3的问题,对AWS API的请求频率太高。
我的问题是,如何避免在Lambda中使用它在cloudwatch日志中检索我的日志?我寻找比将多个睡眠放入代码中更好的解决方案。有没有办法在全球范围内做到这一点?
谢谢
好吧,终于可以了。事实上,我对重试过程过于激进,但我需要尽快完成每个操作(例如:在可用时附加 EBS)。在 boto3 中,有一种比在代码中放入 time.sleep(xx) 更干净的方法来等待资源准备就绪。
解决方案是使用boto3 服务员 我的建议是为重试间隔设置一个自定义值,因为默认为 15 秒(太长)。
waiter.config.delay = 1
waiter.config.max_attempts = 10(as you want for this param)
Run Code Online (Sandbox Code Playgroud)
使用此参数,您可以避免 lambda 发送类似“重置断开的连接:ec2.us-west-2.amazonaws.com”之类的日志,并且可以以最快的方式执行 Lambda。
我同意 smdev 的观点,他说将 sleep 放入 lambda 函数中并不是一个好主意(boto3 waiter 是一个类似 sleep 的函数),但对我来说,当 Lambda 函数仅被调用几次时,这是可以接受的。例如,当自动扩展通知调用您的 Lambda 时。如果您的 Lambda 直接由 API Gateway(示例)以中等或较高的频率调用,这是一个非常糟糕的主意,但如果每天只有 2-3 次,那就没问题了。
| 归档时间: |
|
| 查看次数: |
5504 次 |
| 最近记录: |