Elastic Beanstalk 環境のワーカー層に定期的なタスクを追加し、追加されない定期的なタスクの問題をトラブルシューティングするにはどうすればよいですか?

所要時間2分
0

AWS Elastic Beanstalk 環境のワーカー層に定期的なタスクを追加したいと考えています。

解決方法

注: Elastic Beanstalk は aws-elasticbeanstalk-ec2-role インスタンスプロファイルロールを使用します。これには、AWSElasticBeanstalkWebTierAWSElasticBeanstalkWorkerTierAWSElasticBeanstalkMulticontainerDocker という管理権限が含まれています。定期的なタスクを機能させるには、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 デーモンが実行中で、正しいキューをポーリングしていることを確認します。

Amazon SQS デーモンが正しく起動すると、次のようなログが表示されます。

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 デーモンがポート 80http://localhost/ に対して送信する HTTP POST リクエストを確認します。デーモンがキューアイテムをポーリングすると、リクエストを送信します。

その際、次のような出力が表示されます。

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 (First-In-First-Out) キューを設定したワーカー環境では機能しません。


関連情報

Elastic Beanstalk 環境にある Amazon EC2 インスタンスに cron ジョブを作成する方法を教えてください

Periodic Tasks (定期的なタスク)

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ