如何使用Elastic Beanstalk和Java使用cron作业?

时间:2018-12-31 21:33:12

标签: java amazon-web-services spring-boot cron amazon-elastic-beanstalk

我想运行cron作业并使用相同的代码库。我找到了一些解决方案,但它们似乎并不理想。例如,使用Heroku,您可以添加Scheduler element并填写要在网页中运行的命令。

  • http://blog.rotaready.com/scheduled-tasks-elastic-beanstalk-cron/
    • 对于负载平衡的实例来说似乎过于复杂。
    • 它在Node中使用了require('async'),但是等效于Java Spring Boot?
  • https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html
    • 似乎没有任何安全性。网络中的任何人都可以访问/ path来执行POST并执行作业,从而导致拒绝服务攻击。
    • 它提到cron.yaml,因为该应用程序是通过WAR / ZIP文件部署到Tomcat实例(Spring Boot)的,所以没有意义。
    • 它提到了我们不使用的Amazon DynamoDB。我们使用MySQL。
    • 它没有指定负载平衡器连接耗尽超时对于这些作业(10s)是否有效。
    • 它提到“环境管理控制台的“配置”页面上的“工作程序配置卡””,但在“配置”页面下没有工作程序配置卡。
  • Running a cron job in Elastic Beanstalk
    • 对于Python / Django-使用cron.yaml
  • 我想到只是有一个专用的EC2实例,但是如何在其中部署最新的代码更改?

这也可能属于SoftwareEngineering.StackExchange。

1 个答案:

答案 0 :(得分:0)

使用其他AWS系统有一种简便的方法。

您可以使用CloudWatch设置计划的事件(https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html)。您可以设置规则以按预定时间表设置事件。

然后您至少有两个选择:

  • 设置事件以发布SNS消息,并使用该SNS调用服务器上的Web挂钩。有关如何执行此操作的许多示例,但是您必须确保检查签名以确保从已签名的SNS调用Web API。但这将使用公共API,但您可能不满意。

  • 设置事件以发布SQS消息。然后设置一个弹性beantalk工作者来处理SQS消息,或者只是在您的主服务器上运行后台脚本,该脚本基本上是在无限循环轮询SQS上要做的工作。

不确定您对这些系统有多熟悉,因此不确定是否能清楚我在说什么,但是无法给出详细的解决方案,因此希望这足以为您提供想法。