2

我有一个应用程序部署到 Elasticbeanstalk 并作为工作人员运行,我想添加一个每小时运行的定期任务,所以我用这个 conf 创建了一个 cron.yaml:

version: 1
cron:
   - name: "task1"
     url: "/task"
     schedule: "00 * * * *"

但是在部署过程中我总是遇到这个错误:

[Instance: i-a072e41d] Command failed on instance. Return code: 1 Output: missing required parameter params[:table_name] - (ArgumentError). Hook /opt/elasticbeanstalk/addons/sqsd/hooks/start/02-start-sqsd.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

我为 EBT 角色添加了正确的权限,并且我验证了 cron.yaml 可能是为 Windows(CR/LF)格式化的,但总是得到相同的错误。

missing required parameter params[:table_name]好像缺少 DynamoDB 表名,我可以在哪里定义它?,

知道如何解决这个问题。谢谢 !

4

3 回答 3

1

当我在容器命令中动态生成 cron.yaml 文件而不是已经在我的应用程序根目录中时,我遇到了同样的错误。

用于 cron 的 DynamoDB 表是在 PreInitStage 中创建的,该阶段发生在您的任何自定义代码执行之前,因此如果没有 cron.yaml 文件,则不会创建 DynamoDB 表。当文件稍后出现并且正在安排 cron 作业时,它会失败,因为从未创建过表。

我通过在我的应用程序根目录中有一个骨架 cron.yaml 解决了这个问题。它必须有一个有效的 cron 作业(我只是每月点击一次我的健康检查 URL),但它没有被安排,因为作业注册确实发生在您的自定义命令之后,该命令可以重置文件,只包含您需要的作业。

这可能不是您的确切问题,但希望它可以帮助您找到您的问题,因为当未创建 DynamoDB 表时会出现错误。

于 2018-01-23T01:23:50.827 回答
1

好吧,我没有找到解决这个问题的方法,所以我转向了另一种方法,它使用 CloudWatch Event 创建一个规则类型:调度并选择一个目标作为 SQS 队列(使用工作人员配置的那个)。完美运行!

于 2016-10-17T15:31:11.990 回答
0

我看起来您的 yaml 格式已关闭。这可能是这里的问题。

version: 1
cron:
  - name: "task1"
    url: "/task"
    schedule: "00 * * * *"

格式化在 Yaml 中至关重要。至少试试这个。

于 2016-10-14T11:28:00.063 回答