また馬鹿なことを・・・
AWSって普通に使ってたらどんどんお値段が上がっていきますよね?我々のような弱小勢力にはお財布に大変厳しいことになりかねません。安くむしろ無料でどうにかなりませんかね、AWSさん・・・。
考えました。
そうだ、lambdaなら私達の無理難題を解決してくれるはずだ。
そもそも論としてlambdaでphpは動くのか
動きません。非推奨です。ただしカスタムランタイムをつかったりdockerイメージをデプロイしたりすれば使えます。でもめっちゃ面倒くさいですよね・・・。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-custom.html
lambdaだと何が嬉しいのか
- サーバ管理しなくてよい
- アクセス増えても勝手にスケールしてくれる
- 安い(限りなくゼロに近づけることが可能とおもわれ)
そこでbrefの出番です
brefをつかえば、一瞬にしてlaravelアプリケーションをlambdaにデプロイできます。
https://bref.sh/
まずはlaravelプロジェクトを
いつもの
composer create-project laravel/laravel myapp
最低限Laravelが動くように
cd myapp
cp .env.example .env
php artisan key:generate
aws cliのセットアップはがんばって
aws configure
serverlessコマンドも必要
npm install -g serverless
brefをインストール
composer require bref/bref bref/laravel-bridge --update-with-dependencies
php artisan vendor:publish --tag=serverless-config
serverless.ymlができるのでちょっとだけ修正
↓これはまあいじってもいじらなくてもどっちでもいいですけど
region: ap-northeast-1
これ以上は特になにもしなくても動きます。
デプロイ
sls deploy
これだけ!あとは裏でcloudformationが動いて、API Gatewayとlambdaを設定してデプロイしてくれます。最後にこのURLねって教えてくれるのでそこにアクセスすればLaravelのwelcomeページが表示されると思います。
注意点
ディスクには書き込めませんという大前提で。
- セッションはElastiCacheかCookieで
- ElastiCacheにするとコストがかかる
- DBはS3にCSVとかおくかRDS(Aurora)で
- RDSにするとコストがかかる
- 画像ファイルなどはS3におかなきゃいけない
- アクセスがないとコールドスタンバイ状態になるので上がるまで多少時間必要
- 応答スピードが求められるサービスには不向きかも
- 実サービスに使えるのかどうかは吟味が必要
まとめ
ちょっとしたアプリケーションを限りなく無料で公開したい場合は、brefをつかったlaravelをlambdaにデプロイはとても使える手段ではないかと思います。lambdaのためにnodeとかpythonとか勉強したりせなあかんとか、それに付随するであろうフレームワーク覚えたり結構ハードルがあがると思います。
普段からlaravel書いてる人であれば、そのままデプロイできるというのはとても楽ですよね。あとはそれが実運用に耐えられるのかどうかを見極めれば実際のサービスでも使えなくはないのかななんて思いました。
ぜひ一度このlambdaでlaravelが動く感動を味わってみてください。