AWS Lambda 实例运行超过 15 分钟
AWS Lambda instance runs for more than 15 minutes
我有一个 lambda 是 运行ning 一个 API,所以 lambda 的每个实例都会启动一个烧瓶服务器,运行s 直到 lambda 被杀死。当收到另一个请求时,将创建一个新的 lambda 实例 - 再次启动 flask 服务器。
查看我的一个 lambda 的日志,日志流 运行 超过 15 分钟(进程失败前约 20 分钟)。超时设置为 5 分 0 秒。
据我了解,每个实例生成一个长流,达到超时后实例被杀死,并且不能设置超过15分钟的超时。
如何在同一个日志流中拥有跨越约 20 分钟的日志?超时是 lambda 可以 运行 在被杀死之前不生成日志的时间量吗?有没有办法限制 lambda 实例终止前 运行s 的时间?
初始日志时间戳:2022-02-20T11:05:05.970-07:00
最终日志时间戳:2022-02-20T11:25:29.895-07:00
Lambda 超时:5min0sec
START、END、REPORT 语句——我在每个日志流中有多个这样的语句:
2022-02-20T11:05:06.509-07:00
START RequestId: 6807306e-f05f-425b-bd75-985b42794eaa
2022-02-20T11:05:07.203-07:00
END RequestId: 6807306e-f05f-425b-bd75-985b42794eaa
2022-02-20T11:05:07.203-07:00
REPORT RequestId: 6807306e-f05f-425b-bd75-985b42794eaa Duration: 691.58 ms Billed Duration: 2856 ms Memory Size: 128 MB Max Memory Used: 119 MB Init Duration: 2163.68 ms
XRAY TraceId: 1-621282cf-00745c0f030b1d810fad9710 SegmentId: 3effe66c64dc69d4 Sampled: true
2022-02-20T11:05:07.767-07:00
START RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9 Version: $LATEST
2022-02-20T11:05:07.845-07:00
END RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9
2022-02-20T11:05:07.845-07:00
REPORT RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9 Duration: 76.09 ms Billed Duration: 77 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-621282d3-55a51f9d69552d8905b959b7 SegmentId: 47dc3b533278679f Sampled: true
2022-02-20T11:05:08.182-07:00
START RequestId: ee69e296-af07-49a2-8264-ed9758d03992 Version: $LATEST
2022-02-20T11:05:08.263-07:00
END RequestId: ee69e296-af07-49a2-8264-ed9758d03992
2022-02-20T11:05:08.263-07:00
REPORT RequestId: ee69e296-af07-49a2-8264-ed9758d03992 Duration: 78.26 ms Billed Duration: 79 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-621282d4-7c8f7ea75ead3f7c166a44a6 SegmentId: 2dcaed42621dbebd Sampled: true
...失败的最终start/end。
2022-02-20T11:25:29.749-07:00
START RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9 Version: $LATEST
2022-02-20T11:25:29.895-07:00
END RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9
2022-02-20T11:25:29.895-07:00
REPORT RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9 Duration: 142.60 ms Billed Duration: 143 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-62128799-19bd91ab324cf0271e964434 SegmentId: 554bd90b4a8ba1c5 Sampled: true
我认为你这里的误解是When another request is received, a new instance of the lambda is created- starting the flask server again.
这不一定是真的。根据 documentation:
The first time you invoke your function, AWS Lambda creates an instance of the function and runs its handler method to process the event. When the function returns a response, it stays active and waits to process additional events.
这很有意义,尤其是对于 http api。如果一个新的 lambda 实例必须启动每个请求,数据库连接、缓存层等都必须重新建立。这将不是可扩展的或高性能的。因此,AWS 通过保持 lambda 实例启动和 运行 来帮您一个忙,即使您只为它实际工作的时间付费。
至于超时问题,超时是 lambda 完成单个作业的最长时间,在您的情况下响应 API 请求。不是 lambda 将保持活动状态多长时间。
单个请求将在 15 分钟后终止,但处理该请求的实例会停留 4.5 小时。(我上次至少检查过)
它将把每个请求写入同一个日志流。
如果另一个请求进来,当 lambda 实例“活着”并且不忙时,同一个实例将被重用,并将写入同一个日志流,就像之前的调用一样。
仅当没有 lambda 实例可根据请求自由运行时,才会启动一个新实例。
这就是为什么“热身”需要一些设计糟糕、启动时间长的 lambda 的原因。
我有一个 lambda 是 运行ning 一个 API,所以 lambda 的每个实例都会启动一个烧瓶服务器,运行s 直到 lambda 被杀死。当收到另一个请求时,将创建一个新的 lambda 实例 - 再次启动 flask 服务器。
查看我的一个 lambda 的日志,日志流 运行 超过 15 分钟(进程失败前约 20 分钟)。超时设置为 5 分 0 秒。
据我了解,每个实例生成一个长流,达到超时后实例被杀死,并且不能设置超过15分钟的超时。
如何在同一个日志流中拥有跨越约 20 分钟的日志?超时是 lambda 可以 运行 在被杀死之前不生成日志的时间量吗?有没有办法限制 lambda 实例终止前 运行s 的时间?
初始日志时间戳:2022-02-20T11:05:05.970-07:00
最终日志时间戳:2022-02-20T11:25:29.895-07:00
Lambda 超时:5min0sec
START、END、REPORT 语句——我在每个日志流中有多个这样的语句:
2022-02-20T11:05:06.509-07:00
START RequestId: 6807306e-f05f-425b-bd75-985b42794eaa
2022-02-20T11:05:07.203-07:00
END RequestId: 6807306e-f05f-425b-bd75-985b42794eaa
2022-02-20T11:05:07.203-07:00
REPORT RequestId: 6807306e-f05f-425b-bd75-985b42794eaa Duration: 691.58 ms Billed Duration: 2856 ms Memory Size: 128 MB Max Memory Used: 119 MB Init Duration: 2163.68 ms
XRAY TraceId: 1-621282cf-00745c0f030b1d810fad9710 SegmentId: 3effe66c64dc69d4 Sampled: true
2022-02-20T11:05:07.767-07:00
START RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9 Version: $LATEST
2022-02-20T11:05:07.845-07:00
END RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9
2022-02-20T11:05:07.845-07:00
REPORT RequestId: 8c724d99-8640-4634-88b9-1efb774c54a9 Duration: 76.09 ms Billed Duration: 77 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-621282d3-55a51f9d69552d8905b959b7 SegmentId: 47dc3b533278679f Sampled: true
2022-02-20T11:05:08.182-07:00
START RequestId: ee69e296-af07-49a2-8264-ed9758d03992 Version: $LATEST
2022-02-20T11:05:08.263-07:00
END RequestId: ee69e296-af07-49a2-8264-ed9758d03992
2022-02-20T11:05:08.263-07:00
REPORT RequestId: ee69e296-af07-49a2-8264-ed9758d03992 Duration: 78.26 ms Billed Duration: 79 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-621282d4-7c8f7ea75ead3f7c166a44a6 SegmentId: 2dcaed42621dbebd Sampled: true
...失败的最终start/end。
2022-02-20T11:25:29.749-07:00
START RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9 Version: $LATEST
2022-02-20T11:25:29.895-07:00
END RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9
2022-02-20T11:25:29.895-07:00
REPORT RequestId: 5521e958-0ffb-4de7-b028-953a21ac2ac9 Duration: 142.60 ms Billed Duration: 143 ms Memory Size: 128 MB Max Memory Used: 119 MB
XRAY TraceId: 1-62128799-19bd91ab324cf0271e964434 SegmentId: 554bd90b4a8ba1c5 Sampled: true
我认为你这里的误解是When another request is received, a new instance of the lambda is created- starting the flask server again.
这不一定是真的。根据 documentation:
The first time you invoke your function, AWS Lambda creates an instance of the function and runs its handler method to process the event. When the function returns a response, it stays active and waits to process additional events.
这很有意义,尤其是对于 http api。如果一个新的 lambda 实例必须启动每个请求,数据库连接、缓存层等都必须重新建立。这将不是可扩展的或高性能的。因此,AWS 通过保持 lambda 实例启动和 运行 来帮您一个忙,即使您只为它实际工作的时间付费。
至于超时问题,超时是 lambda 完成单个作业的最长时间,在您的情况下响应 API 请求。不是 lambda 将保持活动状态多长时间。
单个请求将在 15 分钟后终止,但处理该请求的实例会停留 4.5 小时。(我上次至少检查过) 它将把每个请求写入同一个日志流。
如果另一个请求进来,当 lambda 实例“活着”并且不忙时,同一个实例将被重用,并将写入同一个日志流,就像之前的调用一样。
仅当没有 lambda 实例可根据请求自由运行时,才会启动一个新实例。
这就是为什么“热身”需要一些设计糟糕、启动时间长的 lambda 的原因。