首页 > 解决方案 > 无服务器 - 如何在 AWS Lambda 函数中定期运行 Flask 命令?

问题描述

我正在使用以下 serverless.yml 文件来运行烧瓶应用程序。我的烧瓶应用程序有一个 cli 命令,我想定期调用它。

所以 yml 文件应该做两个任务,作为一个普通的 wsgi 应用程序执行 api 调用,并定期调用一个命令行函数。

我应该在 yml 文件中对其进行哪些更改?

functions:
  app:
    handler: wsgi.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'

无服务器.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”

标签: flaskaws-lambdaaws-serverless

解决方案


因为您可能同时运行多个 lambda 函数实例。您是否想在所有实例上运行此命令,很可能您希望它运行一次命令,而不管在给定时间运行的 lambda 函数的数量

由于您使用的是无服务器,因此支持编写类似 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)
    

笔记:

  1. 您不需要考虑 cli 命令,只需调用该函数即可(例如create_user)。
  2. 我假设该函数位于项目的根目录(也称为顶级目录)中的create_user一个名为的文件中。app.py

我建议您阅读以下内容:

  1. 无服务器文档示例
  2. crontab 示例
  3. AWS Cloudwatch 事件规则(幕后真正发生的事情)。

推荐阅读