无服务器 - 如何在 AWS Lambda 函数中定期 运行 Flask 命令?
Serverless - How to periodically run a Flask command in a AWS Lambda function?
我正在使用以下 serverless.yml 文件到 运行 烧瓶应用程序。我的烧瓶应用程序有一个 cli 命令,我想定期调用它。
所以 yml 文件应该做两个任务,作为普通 wsgi 应用程序执行 api 调用并定期调用命令行函数。
我应该在yml文件中对它做哪些修改?
functions:
app:
handler: wsgi.handler
events:
- http: ANY /
- http: 'ANY {proxy+}'
Serverless.yml
app = Flask(__name__)
user_cli = AppGroup('user')
@user_cli.command('create')
def create_user():
pass
app.cli.add_command(user_cli)
命令需要运行:"flask user create"
因为您可能同时拥有多个 lambda 函数实例 运行ning。你想在所有实例上执行 运行 这个命令吗,很可能你希望它 运行 命令一次,而不管给定的 lambda 函数的数量 运行ning时间.
由于您使用的是无服务器,因此支持编写类似 cronjob 的函数。以下是您需要遵循的步骤:
将您想要的功能 create_user
频率的时间表添加到 运行。
functions:
cronCreateUser:
handler: app.create_user
events:
# At 00:00 on Sunday
- schedule: cron(0 0 * * SUN)
或
functions:
cronCreateUser:
handler: app.create_user
events:
# Every 1 hour
- schedule: rate(1 hour)
备注:
- 您不需要考虑 cli 命令,只需调用函数即可(例如
create_user
)。
- 我假设函数
create_user
位于项目根目录(a.k.a. 顶级目录)中名为 app.py
的文件中。
我建议您阅读以下内容:
- 无服务器docs and examples.
- Crontab examples
- AWS Cloudwatch Event Rules(幕后真正发生的事情)。
我正在使用以下 serverless.yml 文件到 运行 烧瓶应用程序。我的烧瓶应用程序有一个 cli 命令,我想定期调用它。
所以 yml 文件应该做两个任务,作为普通 wsgi 应用程序执行 api 调用并定期调用命令行函数。
我应该在yml文件中对它做哪些修改?
functions:
app:
handler: wsgi.handler
events:
- http: ANY /
- http: 'ANY {proxy+}'
Serverless.yml
app = Flask(__name__)
user_cli = AppGroup('user')
@user_cli.command('create')
def create_user():
pass
app.cli.add_command(user_cli)
命令需要运行:"flask user create"
因为您可能同时拥有多个 lambda 函数实例 运行ning。你想在所有实例上执行 运行 这个命令吗,很可能你希望它 运行 命令一次,而不管给定的 lambda 函数的数量 运行ning时间.
由于您使用的是无服务器,因此支持编写类似 cronjob 的函数。以下是您需要遵循的步骤:
将您想要的功能
create_user
频率的时间表添加到 运行。functions: cronCreateUser: handler: app.create_user events: # At 00:00 on Sunday - schedule: cron(0 0 * * SUN)
或
functions: cronCreateUser: handler: app.create_user events: # Every 1 hour - schedule: rate(1 hour)
备注:
- 您不需要考虑 cli 命令,只需调用函数即可(例如
create_user
)。 - 我假设函数
create_user
位于项目根目录(a.k.a. 顶级目录)中名为app.py
的文件中。
我建议您阅读以下内容:
- 无服务器docs and examples.
- Crontab examples
- AWS Cloudwatch Event Rules(幕后真正发生的事情)。