【问题标题】:run lambda function only once, the time set to 5 minutes later只运行一次 lambda 函数,时间设置为 5 分钟后
【发布时间】:2019-04-01 23:16:55
【问题描述】:

我有一个请求设置一个 lambda 函数来初始化一个 RDS 数据库,但只运行一次

我的计划是在一个模块中同时部署 rds 和 lambda 函数,但设置为 5 分钟后运行 lambda 函数,只运行一次。所以我可以保证 RDS 处于活动状态。

我无法设置local-execremote-exec,因为我们公司的代理服务器。 Terraform 在他们的 Golang 代码中不使用 openssh/openssl, 那么 terraform 看不懂 ~/.ssh/config

在 5 分钟后设置运行一次 lambda 函数并稍后忽略更改的任何想法。

timestamp() in terraform可以生成时间,timeadd()可以用来生成5分钟后的时间。

output "time" {
  value = "${timeadd(timestamp(), "5m")}"
}

但是很难转换为cron(Minutes Hours Day-of-month Month Day-of-week Year)。我觉得我不应该直接在 Terraform 中这样做。

更新 1

我将在 lambda 函数中添加一个环境变量 (EXECUTE_TIMESTAMP)。稍后会确认这是否有帮助。

所以 lambda 会检查 timestamp 如果没有通过,或者超过 1 小时,它将忽略其余任务。这个 lambda 函数将被安排为每小时运行一次。

然后,如果有一天我想重新运行这个 lambda 函数,我可以轻松地调整那个变量。

更新 2

A PR 是为这次输出格式功能提出的,但目前没有合并。

不确定新功能是否支持 cron 格式作为输出。

【问题讨论】:

  • 手动发送一次 SQS 事件来触发 lambda 怎么样?
  • 看起来是个好主意。我什至可以直接将 sql 脚本作为文件中的消息提供。

标签: python aws-lambda boto3 terraform


【解决方案1】:

如果您不打算做太多,那么这些天 lambda 的最大超时时间为 15 分钟毫无价值。

因此,虽然它不是最好的架构,但对于一个简单且不常见的“开发”脚本,您可以简单地在部署 RDS 的同时启动 lambda 并让它等待 (time.sleep(300)) 5 分钟在代码中。

【讨论】:

    【解决方案2】:

    您可以在创建 RDS 时使用 null_resource(具有 5 分钟睡眠的本地执行程序)depends_ontrigger。并使 lambda depends_on 高于 null_resource

    这样,您的 lambda 函数只会在 RDS 创建 5 分钟后被调用一次。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      一种解决方案可能是调用一个状态机,该状态机将在调用您的 Lambda 之前等待 5 分钟。

      【讨论】:

        猜你喜欢
        • 2015-05-12
        • 2013-02-03
        • 1970-01-01
        • 2018-12-24
        • 2021-06-14
        • 2015-05-07
        • 2012-05-04
        • 1970-01-01
        • 2020-02-26
        相关资源
        最近更新 更多