Sub Documents
LambdaでLaravelを使えるようにするまでの手順
LaravelをLambda関数として使えるようにするためにはいくつかの方法があって、ひとつはBrefというPackageを使ってLambda上にランタイムを作成する方法と、Laravel自体のDockerコンテナを作成してそれをLambdaで実行する方法があります。ここではBrefを利用したサーバレスLaravelアプリケーションの構築を参考にして前者のやり方で構築します。まずはいつものようにLaravelをローカル環境で動くようにしておいてください。PHPのバージョンはphp8.1じゃないと諸々正常に起動しないようなので、php8.0とかの場合はその前にバージョンアップアップしておいた方ががよさそうです。
- Brefのインストール
$ composer require bref/bref
$ composer require bref/bref bref/laravel-bridge --update-with-dependencies
-
Serverless Frameworkのインストール
$ npm install -g serverless $ serverless --version Running "serverless" from node_modules Framework Core: 3.19.0 (local) 3.21.0 (global) Plugin: 6.2.2 SDK: 4.3.2
-
AWSのクレデンシャルの設定
aws cliのクレデンシャルを設定しますが、すでに設定済みの場合はスキップ。(~/.awsがあればOK) また、IAMでCloudformationにwrite権限を与えておかないといけないので、それもご注意。$ serverless config credentials --provider aws --key <key> --secret <secret>
-
serverless.ymlを作成
$ ./vendor/bin/sail artisan vendor:publish --tag=serverless-config
基本的にはデフォルとのままでOKです。providor部分のregionだけちょっと気にすればOKかと思います。私は日本リージョン
ap-northeast-1
に変更しておきました。
デプロイ前にキャッシュをクリアします。$ ./vendor/bin/sail artisan config:clear
-
デプロイ
環境が整ったらデプロイします。$ serverless deploy
ROLLBACK_COMPLETE
errorになることがあるんですが、これは Cloudformationにログインして、デプロイしたものをいったん削除してもう一回deployすると解消されます。
serverless deploy fails with ROLLBACK_COMPLETE error #6612
こんな感じで Deplyしたものが表示されていればOKです。
-
確認
以下のコマンドを実行すると、brefが使えるか確認できます。$ ./vendor/bin/bref cli laravel-dev-artisan --region ap-northeast-1 -- inspire
はまりポイント
- IAMの権限系の問題
- PHP8.1.0と8.0.22の問題
権限の設定がちゃんとしていないとAPI側でMissing Authentication Token
が出る。しかしえらーとしては何故か404になっているという謎。権限周りの設定を見直しましょう。パーミッションを与えるのはCloudformation
です。
また私の場合だけかもしれませんが、serverless.ymlのリージョンの設定がうまく反映しておらず、確認時に明示的にリージョンを設定してやらないといけませんでした。
$ ./vendor/bin/bref cli laravel-dev-artisan --region ap-northeast-1
Cloudformationにもあがり、Lambdaにも無事あがっても、ややしばらくは
Runtime exited with error: exit status 255
に悩まされました。PHP8.1.0と8.0.22の問題で、
Your Composer dependencies require a PHP version ">= 8.1.0". You are running 8.0.22. in /var/task/vendor/composer/platform_check.php on line 24
Laravel自体をbuildし直してみる
$ ./vendor/bin/sail build --no-cache