Aws Elasticbeanstalk cron.yaml 工作人员问题

Posted

技术标签:

【中文标题】Aws Elasticbeanstalk cron.yaml 工作人员问题【英文标题】:Aws Elasticbeanstalk cron.yaml worker issue 【发布时间】:2017-02-23 19:12:29 【问题描述】:

我有一个应用程序部署到 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 表名,我可以在哪里定义它? ,

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

您的 yaml 格式似乎已关闭。这可能是这里的问题。

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

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

【讨论】:

谢谢乔治,我编辑了我的帖子以放置正确的 cron.yaml 文件(我在第一个版本中错误地复制了它),我使用的格式与你建议的相同。仍然得到同样的错误。

以上是关于Aws Elasticbeanstalk cron.yaml 工作人员问题的主要内容,如果未能解决你的问题,请参考以下文章

aws elasticbeanstalk:无法通过 eb cli 部署到工作环境

Laravel 命令在 AWS EC2 上由 Cron 执行时返回不同的输出

具有 ZF2 的 AWS 工作程序层 cron 产生 404,但在本地工作?

Elastic Beanstalk 未调度 cron.yaml 中定义的作业

上传到 S3 之前的 AWS 临时文件?

ElasticBeanstalk worker cron 每分钟运行多次