在 AWS lambda 上的 wsgi 应用程序中如何计算非活动时间?



主要问题是:在 AWS Lambda 上部署的 wsgi 应用程序中如何计算时间?

假设我部署了以下简单的 Flask 应用程序:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!", 200

在 AWS Lambda 上使用 Zappa,具有以下配置:

{
"dev": {
"app_function": "simple_application.app",
"profile_name": "default",
"project_name": "simple_application",
"runtime": "python3.7",
"s3_bucket": "zappa-deployments-RANDOM",
"memory_size": 128,
"keep_warm": false,
"aws_region": "us-east-1"
}
}

现在,如果 AWS 对我的网站有请求,它将启动一个包含我的代码的容器,让它处理该请求。假设请求在 200 毫秒内送达。

显然,里面有 wsgi 服务器的 Lambda 会继续运行(默认情况下,Zappa 使 lambda 运行至少 30 秒(。

所以现在到各种子问题:

  1. 我需要为执行付费多长时间?

    • 200ms 因为请求持续时间
    • 30 秒,因为我的 lambda 执行时间有以下限制
    • 直到 lambda 被 AWS 杀死以回收空间(甚至可能在 30-45 分钟后发生(
  2. 如果出现另一个请求(并且第一个请求仍在提供服务(,第二个请求会启动另一个 Lambda 容器,还是会排队直到阈值时间过去?

我希望通过阅读 AWS Lambda 定价页面只收取 200 毫秒的费用,但我敢打赌它会收取 30 秒的费用,因为毕竟我是施加这种限制的人。

如果我只收取 200 毫秒(以及随后的请求时间(的费用,但容器不间断地运行 30-45 分钟,我还有第三个子问题:

  1. 假设我现在想使用全局变量作为简单的本地缓存,并在容器被杀死之前将其与数据库(假设 DynamoDB(同步。 为此,我想将 lambda 的执行时间限制提高到 15m,然后在创建 lambda 时设置一个计时器来触发一个函数,该函数同步状态并在 14m30s 后中止该函数。

    在此设置中,考虑的运行时间将如何变化(即,计时器在一定时间后触发(?

此子问题的建议 lambda 代码是:

from flask import Flask
from threading import Timer
from db import Visits
import sys
lambda_uuid = "SOME-UUID-OF-LAMBDA-INSTANCE"
# Collects number of visits
visits = 0
def report_visits():
Visits(uuid=lambda_uuid, visits=visits).save()
sys.exit(0)
t = Timer(14 * 60 + 30, report_visits)
t.start()
# Start of flask routes
app = Flask(__name__)
@app.route("/")
def hello():
visits = visits + 1
return "Hello World!", 200

提前感谢您提供任何信息。

默认情况下,Zappa 使 lambda 运行至少 30 秒

我找不到任何文档来支持这一点,此外,我可以找到的所有 Zappa 文档都指出,Zappa 函数将在返回响应后立即结束(就像任何其他 AWS Lambda 函数一样(,因此您只需为生成响应所花费的毫秒数付费。

我确实看到 Zappa Lambda 函数的默认最大执行时间为 30 秒。也许这就是你感到困惑的地方?该设置只是告诉 AWS Lambda 终止正在运行的函数实例(如果它运行了这么长时间(。

我希望通过阅读 AWS Lambda 定价页面只收取 200 毫秒的费用,但我敢打赌它会收取 30 秒的费用,因为毕竟我是施加这种限制的人。

您需要为函数的确切运行时间付费。因此,如果它运行 200 毫秒,那么您需要支付 200 毫秒的费用。

如果我只收取 200 毫秒(以及随后的请求时间(的费用,但容器不间断地运行 30-45 分钟,我还有第三个子问题:

  1. 它不会运行那么长时间,它会在返回响应时结束。
  2. 您告诉 Lambda 在函数实例运行超过 30 秒时将其终止,因此使用当前设置,它永远不会运行超过 30 秒。
  3. AWS Lambda 函数的当前最长运行时间为 15 分钟,因此无论如何它都不可能运行 30-45 分钟。

最新更新