Elastic Beanstalk 환경의 작업자 계층에 주기적 태스크를 추가하고, 추가되지 않는 주기적 태스크의 문제를 해결하려면 어떻게 해야 합니까?

2분 분량
0

AWS Elastic Beanstalk 환경의 작업자 계층에 주기적 태스크를 추가하고 싶습니다.

해결 방법

참고: Elastic Beanstalk는 aws-Elasticbeanstalk-ec2-role인스턴스 프로파일 역할을 사용합니다. 관리형 권한인 AWSElasticBeanstalkWebTier, AWSElasticBeanstalkWorkerTierWSElasticBeanstalkMulticontainerDocker와 함께 제공됩니다. 정기 작업이 작동하려면 AWSElasticBeanstalkWorkerTier가 필요합니다. 자세한 내용은 Elastic Beanstalk 인스턴스 프로파일 관리를 참조하십시오.

작업자 계층에 주기적 태스크 추가

Elastic Beanstalk 환경의 작업자 티어에 주기적 태스크를 추가하려면 소스 코드의 루트에 cron.yaml 파일을 포함합니다. 예를 들어, 다음과 같습니다.

version: 1
cron:
 - name: "schedule"
   url: "/schedule"
   schedule: "0 */12 * * *"

참고: 앞의 예에서 주기적 태스크 예약은 태스크를 설명하는 Amazon Simple Queue Service(Amazon SQS) 메시지를 대기열 헤드에 전송합니다. 스케줄 태스크는 12시간마다 대기열의 헤드로 메시지를 보냅니다. 메시지가 대기열을 통과하면 인스턴스가 이 태스크를 선택하여 "/schedule" 엔드포인트를 HTTP POST합니다.

여전히 주기적 태스크가 작업자 계층에 표시되지 않으면 주기적 태스크 관련 문제 해결 섹션의 단계를 완료합니다.

주기적 태스크 관련 문제 해결

1.    /var/log/aws-sqsd/default.log 플랫폼 파일에서 다음과 비슷한 로그가 있는지 확인합니다.

schedule-parser: Successfully loaded 1 scheduled tasks from file /var/app/current/cron.yaml .

2.    /var/log/aws-sqsd/default.log 파일에서 Amazon SQS 대몬(daemon)이 실행 중이고 올바른 대기열을 폴링하는지 확인합니다.

Amazon SQS 대몬(daemon)이 올바르게 시작되면 다음과 비슷한 로그가 표시됩니다.

2023-01-17T03:28:31Z init: initializing aws-sqsd 3.0.4 (2022-03-18)
2023-01-17T03:28:31Z schedule-parser: Successfully loaded 1 scheduled tasks from file /var/app/current/cron.yaml .
2023-01-17T03:28:31Z leader-election:  initialized leader election
2023-01-17T03:28:31Z scheduler: initialized 1 job's pending time
2023-01-17T03:28:31Z pollers: start initializting poller timer...
2023-01-17T03:28:31Z pollers: start auto running poller...
2023-01-17T03:28:31Z leader-election:  Starting leader election
2023-01-17T03:28:31Z leader-election:  current role: worker
2023-01-17T03:28:31Z scheduler: Starting scheduler
2023-01-17T03:28:31Z start: polling https://sqs.us-east-1.amazonaws.com/111122223333/yourWorkerQueue

3.    /var/log/aws-sqsd/default.log 파일에서, Amazon SQS 대몬(daemon)이 포트 80에서 **http://localhost/**로 전송하는 HTTP POST 요청이 있는지 확인합니다. 대몬(daemon)이 큐 항목을 폴링하면 요청을 보냅니다.

다음과 유사한 메시지를 볼 수 있습니다.

2019-07-05T13:54:52Z message: sent to http://localhost:80/

4.    메시지가 Amazon SQS 대기열로 전송되는지 확인하려면 NumberOfMessagesReceived 지표에서 작업자 환경과 연결된 대기열이 있는지 확인합니다.

5.    예약된 작업을 수동으로 호출하려면 다음 명령을 실행합니다.

curl -d param1=value1 -d param2=value2 -H "Content-Type: application/json" -X POST http://localhost/scheduled-task-path

-d (-data) 플래그는 주기적 태스크에 전달하려는 데이터를 보관할 수 있습니다.

참고: 주기적 태스크는 Amazon SQS FIFO(선입선출) 대기열로 구성된 작업자 환경에서는 작동하지 않습니다.


관련 정보

Elastic Beanstalk 환경의 Amazon EC2 인스턴스에서 cron 작업을 생성하려면 어떻게 해야 합니까?

주기적 태스크

AWS 공식
AWS 공식업데이트됨 일 년 전