Aws Elasticbeanstalk cron.yaml worker issue

时间:2016-10-14 11:10:08

标签: amazon-web-services cron elastic-beanstalk worker periodic-task

我有一个部署到Elasticbeanstalk的应用程序并作为worker运行,我想每小时添加一个定期任务,所以我用这个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表名,我可以在哪里定义它? ,

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

3 个答案:

答案 0 :(得分:1)

我没有找到解决此问题的解决方案,因此我转向使用CloudWatch Event创建规则类型的另一种方法:计划并选择目标作为SQS队列(使用工作者配置的目标)。 效果很好!

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

我看起来你的yaml格式化了。这可能是这里的问题。

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

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