我有一个部署到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表名,我可以在哪里定义它? ,
知道如何解决这个问题。 谢谢!
答案 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中至关重要。至少尝试一下这个。