Laravelで書いたバッチを実行するにあたって、EC2インスタンスだと実行タイミング以外もコストがかかるし、ECSタスクだとコンテナの管理がちょっと面倒。Lambdaで動かせればメンテも楽だし安く上がりそうなのでやってみた。
前提
brefphp を導入済の環境。
実行するのは Laravel で作成済みのコマンド、croncmd:exec
。通常は php artisan croncmd:exec
で実行。
brefphp の導入については brefphpを使って簡単にLaravelをサーバレス環境で動かす - Qiita がとてもわかりやすいです。
serverless.yml
今回は serverles.yml
の設定のみです。例として月曜から金曜まで 09:00-17:00まで5分ごとに定期実行する設定を記載します。
input 部分で実行するコマンドを、rate で実行タイミングを指定します。時間についてはGMTで設定することに注意してください。
service: test-app
provider:
name: aws
region: ap-northeast-1
runtime: provided
plugins:
- ./vendor/bref/bref
functions:
artisan:
handler: artisan
timeout: 120 # in seconds
layers:
- ${bref:layer.php-73}
- ${bref:layer.console}
events:
- schedule:
rate: cron(0/5 0-8 ? * MON-FRI *) # GMT
input: '"croncmd:exec"'