AWS Elastic Beanstalk環境でLaravelバッチを定期実行する

Laravelで作成したバッチをAWS Elastic Beanstalk環境(以下、EB環境)で定期実行する手順をご紹介致します。

Laravelバッチを定期実行するには

Laravelバッチを定期実行するにはサーバ側に以下のCronエントリを追加します。
あとはアプリ側でバッチ毎にスケジュール定義していく流れとなります。

詳細は以下のLaravel公式サイトのドキュメントをご参照ください。
なお、今回の内容はLaravelバージョン「5.5」前提でのご紹介となります。
https://readouble.com/laravel/5.5/ja/scheduling.html

EB環境にCronエントリを追加するには

アプリケーション用zipファイル内に.ebextensionsディレクトリを作成し、そのディレクトリ内にCronエントリを追加するためのconfigファイルを作成します。
これにより、アプリケーション用zipファイルのデプロイ時にconfigファイルが読み込まれ、EB環境にCronエントリが追加されます。

今回は以下のサイトを参考にconfigファイルを作成しました。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/cron-job-elastic-beanstalk/

上記のconfigファイルのポイントとして、「leader_only: true」を設定しています。
この記述があることで、EC2が複数台の構成であっても、バッチの実行は1台からのみになります。

設定確認

上記のconfigファイルを含めてアプリケーション用zipファイルをデプロイすると、「/etc/cron.d/」にCronエントリが追加されました。
また、Cronエントリが追加されたことでLaravelバッチが定期実行されるようになりました。

おわりに

AWS Elastic BeanstalkはAWSのよくある基本構成を手軽に構築するのに便利なサービスです。
負荷分散やオートスケーリングなども手軽に構成できます。

今回のように、基本構成から外れる部分は.ebextensionsディレクトリにconfigファイルを作成してカスタマイズしていく必要があったりしますが、カスタマイズ部分がそれほど多くなければAWS Elastic Beanstalkを活用するのも一つの手だと思います。

もしこれからAWS Elastic Beanstalkを利用したいという方は以下のサイトなどが参考になるかと思います。
https://aws.amazon.com/jp/elasticbeanstalk/
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/Welcome.html

 

システム開発のご相談はこちらからお気軽にお問合せください。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です