Elastic Beanstalk 環境のワーカー層に定期的なタスクを追加し、追加されない定期的なタスクの問題をトラブルシューティングするにはどうすればよいですか?
最終更新日: 2022 年 6 月 24 日
AWS Elastic Beanstalk 環境のワーカー層に定期的なタスクを追加したいと考えています。
解決方法
定期的なタスクをワーカー層に追加する
Elastic Beanstalk 環境のワーカー層に定期的なタスクを追加するには、ソースコードのルートに cron.yaml ファイルを配置します。例:
version: 1
cron:
- name: "schedule"
url: "/schedule"
schedule: "0 */12 * * *"
注: 前の例では、schedule 定期タスクは、タスクを記述する Amazon Simple Queue Service (Amazon SQS) メッセージを 12 時間ごとにキューの先頭に送信します。メッセージがキューを通過した後、タスクはインスタンスによって取得され、「/schedule」エンドポイントを HTTP POST します。
定期的なタスクがワーカー層に表示されない場合は、次の「定期的なタスクの問題をトラブルシューティングする」セクションの手順を実行します。
定期的なタスクに関する問題をトラブルシューティングする
1. Elastic Beanstalk 環境のイベントストリームで、次のようなイベントを確認します。
Successfully loaded 1 scheduled tasks from cron.yaml
2. /var/log/eb-*.log プラットフォームファイルで、次のようなログを確認します。
{"status":"SUCCESS","api_version":"1.0","results":[{"status":"SUCCESS","msg":"","returncode":0,"events":[{"msg":"Successfully loaded 1 scheduled tasks from cron.yaml.","severity":"INFO","timestamp":1562000593}]}]}
3. /var/log/aws-sqsd/default.log ファイルで、Amazon SQS デーモンが実行中で、正しいキューをポーリングしていることを確認します。
Amazon SQS デーモンが正しく起動すると、次のようなログが表示されます。
2019-07-04T14:11:21Z init: initializing aws-sqsd 2.4 (2018-09-06)
2019-07-04T14:11:21Z pollers: start initializting poller timer...
2019-07-04T14:11:21Z pollers: start auto running poller...
2019-07-04T14:11:21Z start: polling https://sqs.us-west-2.amazonaws.com/111122223333/yourWorkerQueue
4. /var/log/aws-sqsd/default.log ファイルで、Amazon SQS デーモンがポート 80 で http://localhost/ に対して送信する HTTP POST リクエストを確認します。リクエストは、デーモンがキュー項目をポーリングするときに送信されます。
その際、次のような出力が表示されます。
2019-07-05T13:54:52Z message: sent to http://localhost:80/
5. メッセージが Amazon SQS キューに配信されていることを確認するには、ワーカー環境に関連付けられたキューのメトリクス NumberOfMessagesReceived を確認します。
6. スケジュールされたタスクを手動で呼び出すには、次のコマンドを実行します。
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) キューを設定したワーカー環境では機能しません。