Sub Documents

LambdaでLaravelを使えるようにするまでの手順


 LaravelをLambda関数として使えるようにするためにはいくつかの方法があって、ひとつはBrefというPackageを使ってLambda上にランタイムを作成する方法と、Laravel自体のDockerコンテナを作成してそれをLambdaで実行する方法があります。ここではBrefを利用したサーバレスLaravelアプリケーションの構築を参考にして前者のやり方で構築します。まずはいつものようにLaravelをローカル環境で動くようにしておいてください。PHPのバージョンはphp8.1じゃないと諸々正常に起動しないようなので、php8.0とかの場合はその前にバージョンアップアップしておいた方ががよさそうです。

  1. Brefのインストール

Bref running PHP made simple

$ composer require bref/bref
$ composer require bref/bref bref/laravel-bridge --update-with-dependencies
  1. 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
  2. AWSのクレデンシャルの設定
    aws cliのクレデンシャルを設定しますが、すでに設定済みの場合はスキップ。(~/.awsがあればOK) また、IAMでCloudformationにwrite権限を与えておかないといけないので、それもご注意。

    $ serverless config credentials --provider aws --key <key> --secret <secret>
  3. serverless.ymlを作成

    $ ./vendor/bin/sail artisan vendor:publish --tag=serverless-config

    基本的にはデフォルとのままでOKです。providor部分のregionだけちょっと気にすればOKかと思います。私は日本リージョンap-northeast-1に変更しておきました。
    デプロイ前にキャッシュをクリアします。

    $ ./vendor/bin/sail artisan config:clear
  4. デプロイ
    環境が整ったらデプロイします。

    $ serverless deploy

    ROLLBACK_COMPLETEerrorになることがあるんですが、これは Cloudformationにログインして、デプロイしたものをいったん削除してもう一回deployすると解消されます。
    serverless deploy fails with ROLLBACK_COMPLETE error #6612



    こんな感じで Deplyしたものが表示されていればOKです。

  5. 確認
    以下のコマンドを実行すると、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