您如何使用 Elastic Beanstalk 和 Java 使用 cron 作业?
Posted
技术标签:
【中文标题】您如何使用 Elastic Beanstalk 和 Java 使用 cron 作业?【英文标题】:How do you use cron jobs using Elastic Beanstalk and Java? 【发布时间】:2019-05-28 05:29:49 【问题描述】:我想运行 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
似乎没有任何安全措施。网络中的任何人都可以访问 / 路径以进行 POST 并执行作业,从而导致拒绝服务攻击。
它提到了cron.yaml
,这是没有意义的,因为应用程序是通过 WAR/ZIP 文件部署到 Tomcat 实例(Spring Boot)。
它提到了我们不使用的 Amazon DynamoDB。我们使用 mysql。
未指定负载平衡器连接耗尽超时是否对这些作业有效(10 秒)。
在环境管理控制台的Configuration页面中提到了“Worker Configuration card”,但是Configuration页面下没有Worker Configuration卡。
Running a cron job in Elastic Beanstalk
对于 Python/Django - 使用 cron.yaml
。
我想只拥有一个专用的 EC2 实例,但是如何在那里部署最新的代码更改?
这也可能属于 SoftwareEngineering.StackExchange。
【问题讨论】:
【参考方案1】:有一种使用其他 AWS 系统的简单方法。
您可以使用 CloudWatch 设置计划事件 (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html)。您可以设置规则以按既定时间表设置事件。
那么您至少有两个选择:
设置事件以发布 SNS 消息并使用该 SNS 调用服务器上的 Web 挂钩。关于如何执行此操作的许多示例,但您必须确保检查签名以确保从签名的 SNS 调用 Web API。但这将使用公共 API,可能不是您喜欢的。
设置事件以发布 SQS 消息。然后设置一个弹性 beanstalk worker 来处理 SQS 消息或者只是在你的主服务器上运行一个后台脚本,这基本上是一个无限循环轮询 SQS 的工作。
不确定您对这些系统的熟悉程度,因此不确定是否清楚我在说什么,但无法给出详细的解决方案,因此希望这足以给您提供想法。
【讨论】:
以上是关于您如何使用 Elastic Beanstalk 和 Java 使用 cron 作业?的主要内容,如果未能解决你的问题,请参考以下文章
您如何在 AWS Elastic Beanstalk 应用程序上调用 db:seed?
如何在 AWS Elastic Beanstalk 中更改数据库配置