Nice programing

cron없이 AWS에서 예약 된 작업 실행

nicepro 2020. 11. 8. 11:05
반응형

cron없이 AWS에서 예약 된 작업 실행


현재 Amazon에 모든 cronjob을 넣는 단일 서버가 있습니다. 이 단일 실패 지점을 제거하고 모든 작업을 웹 서비스로 노출하고 싶습니다. 호출시 작업을 실행하는 몇 대의 서버에 VPC ELB 뒤의 서비스를 노출하고 싶습니다.

Amazon (AWS)에서 예약 된 간격으로 반복되는 작업 (실제로 웹 서비스 호출)을 실행할 수있는 서비스가 있습니까? 시간 / 일 사양 측면에서 cron 기능을 유지하고 싶지만 드라이버의 HA (적절한 시점에 엔드 포인트를 호출하는 것)를 AWS로 팜 아웃합니다.

저는 SQS가 웹 엔드 포인트를 제공하는 방식이 마음에 들지만 제가 말씀 드릴 수있는 것은 일정을 잡을 수 없습니다. SWF도 적합하지 않은 것 같습니다.


AWS 2015 re : Invent 컨퍼런스에서 Lambda의 예정된 기능에 대한 지원을 발표했습니다 . 이 기능을 통해 사용자는 cron과 유사한 구문을 사용하여 일정에 따라 Lambda 함수를 실행할 수 있습니다. 람다 문서는 예를 보여 스케줄 된 이벤트를 수행 Python을 사용한다.

현재 예약 된 람다가 실행할 수있는 최소 해상도는 1 분입니다 (cron과 동일하지만 systemd 타이머만큼 세분화되지는 않음).

Lambder의 프로젝트는 람다에 예정된 기능의 사용을 단순화하는 데 도움이됩니다.

λ Gordon의 cron 예제 에는 예약 된 람다 함수를 배포하기위한 가장 간단한 인터페이스가 있습니다.


후손을 위해 저장된 원래 답변.

Eric Hammond와 다른 사람들이 언급했듯이 예약 된 작업에 대한 기본 AWS 서비스는 없습니다. 다른 답변에서 언급했듯이 해결 방법과 절반의 솔루션 만 있습니다.

현재 옵션을 요약하려면 :

  • Eric Hammond가 설명한대로 일정에 따라 시작 및 중지되는 단일 인스턴스 자동 크기 조정 그룹입니다.
  • 전혀 직관적이지 않은 Simple Workflow Service 타이머 사용 . 사례 연구 에서는 JPL이 SWF를 사용하여 분산 된 크론을 구축했다고 언급했지만 구현 세부 사항은 없습니다. SWF 코드 샘플에 포함 코드 예제대한 참조도 있습니다 .
  • cronlock 과 같은 것을 사용하여 직접 실행하십시오 .
  • Unreliable Town Clock (UTC) 과 같은 것을 사용 하여 Lambda 함수를 일정에 따라 실행하십시오. Lambda는 현재 VPC 내의 리소스에 액세스 할 수 없습니다.

더 나은 솔루션이 곧 나올 것입니다.


AWS Cloudwatch의 이벤트 소개

Lambda 또는 프로그래밍없이 콘솔을 사용하여 분, 시간, 일 또는 CRON 표현식을 사용하여 예약 할 수 있습니다.

SNS HTTP 끝점을 사용하여 ASP.net WEB API (HTTP Post)를 매분 실행하도록 예약했는데 완벽하게 작동합니다.

여기에 이미지 설명 입력


Amazon (AWS)에서 예약 된 간격으로 반복 작업을 실행할 수있는 서비스가 있습니까?

이것은 AWS로 아키텍처를 설계 할 때 사람들 (저를 포함하여)이 계속 언급하는 몇 가지 단일 실패 지점 중 하나입니다. Amazon이 서비스로 문제를 해결할 때까지 일부 회사에서 적극적으로 사용하는 제가 게시 한 해킹이 있습니다.

AWS Auto Scaling은 cron 형식에 지정된 반복 일정을 사용하여 인스턴스를 실행하고 종료 할 수 있습니다.

http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_PutScheduledUpdateGroupAction.html

인스턴스가 시작시 자동으로 프로세스를 실행하도록 할 수 있습니다.

작업이 얼마나 오래 지속 될지 모르는 경우 작업이 완료되면 인스턴스를 종료하도록 설정할 수 있습니다.

다음은이를 설정하는 데 필요한 정확한 명령을 안내하는 기사입니다.

Auto Scaling http://alestic.com/2011/11/ec2-schedule-instance 를 사용하여 반복 일정에 따라 EC2 인스턴스 실행

일련의 작업을 시작하기 위해 전체 인스턴스를 시작하는 것은 약간 과잉 인 것처럼 보이지만 t1.micro 인 경우 비용이 몇 센트에 불과합니다.

t1.micro도 실제 작업을 수행 할 필요가 없습니다. 인스턴스는 다른 중복 서버가 작업을 선택하도록 SQS 또는 SNS를 통해 메시지를 삽입 할 수 있습니다.


도메인에서 예약 된 스크립트를 정기적으로 호출 할 수있는 호스팅 된 타사 사이트입니다.

Apache가 아닌 셸에서 스크립트를 실행해야하는 경우에는 작동하지 않습니다.


다음과 같은 내용이 유용 할 수 있습니다. http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html

Task Runner is a task agent application that polls AWS Data Pipeline for scheduled tasks and executes them on Amazon EC2 instances, Amazon EMR clusters, or other computational resources, reporting status as it does so. Depending on your application, you may choose to:

  • Allow AWS Data Pipeline to install and manage one or more Task Runner applications for you on computational resources that it manages automatically. In this case, you do not need to install or configure Task Runner as described in this section. This is the recommended configuration.

  • Manually install and configure Task Runner on a computational resource such as a long-running EC2 instance or a physical server. To do so, use the procedures in this section.

  • Develop and install a custom task agent instead of Task Runner. The procedures for doing so will depend on the implementation of the custom task agent.


Amazon has introducted Lambda last year for NodeJS, yesterday Amazon added the features Scheduled Functions, VPC Support, and Python Support.

By leveraging Scheduled Function - a proper replacement for CRON can be attained.

More Info - http://aws.amazon.com/lambda/details/

여기에 이미지 설명 입력


Looks like this is a relatively new option from AWS BeanStalk:

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks

Basically, they act like regular SQS receivers, but they're called on a cron schedule instead of in response to a SQS message.


SWF is a Web service from AWS that can be used to schedule tasks. Most of the work goes into specifying what a task and a schedule is.

http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html is a scalable scheduler written against SWF.


The AWS Elastic Load Balancers will ping your instances to check that they're healthy. You can add your cron-like tasks to the script that the ELB is pinging, and it will execute very regularly.

You'd want to add some logic so that each tasks is executed the right amount of times and at the right interval, but this could be accomplished with a database table that tracks executions. Each time the ELB pings your server, your server would check the database to see if any job is pending, and then execute that job.

스크립트를 실행하는 데 너무 오래 걸리면 ELB가 시간 초과되므로 ELB 상태 확인이 cron 작업을 처리하는 데 몇 초가 걸리는 상황을 만들지 않는 것이 중요합니다. 이를 극복하기 위해 AWS Simple Notification Service를 사용할 수 있습니다. ELB 상태 확인 스크립트는 SNS 주제에 메시지를 게시하기 만하면 해당 주제가 HTTP 요청을 통해 웹 서버에 메시지를 전달할 수 있습니다.

즉, ELB가 EC2 인스턴스를 핑합니다 ... EC2 인스턴스가 대기중인 작업을 확인하고 발견 된 경우 SNS에 메시지를 보냅니다. SNS가 HTTP를 통해 앱에 알림 ... SNS의 HTTP 호출은 실제로 크론 작업

참고 URL : https://stackoverflow.com/questions/11616205/run-scheduled-task-in-aws-without-cron

반응형