まえがき
こんにちは。
brefを使って、AWS LambdaでLaravelを実行してみました。
そこで、この記事では、brefの簡単な紹介をしつつ、主に「使ってみて感じたメリット」を書いています。
感想のみが気になる方は、この記事の使ってみて感じたメリットだけ読んでもらえると。
brefとは?
brefは、AWS Lambda上でPHPを実行するためのランタイムを提供するパッケージです。
紹介は公式を読んでもらった方が早いです。
PHP サーバーレスを実行する場合:
- サーバーをセットアップする必要はありません。クラウドプロバイダーがそれを処理します.
- 使用した分だけお支払いいただきます。
- アプリケーションは自動的にスケーリングします。
まんまサーバレスのメリットって感じですね。
ただ、bref特有のキモは下記です。
- LambdaでのPHPのランタイムを手軽に準備できる
- Laravel・Symfonyにもそれぞれ対応
- Laravelの対応がかなり手厚い印象!
どうやって使うの?
えー、この項目は公式通りにインストールしておけばOKです。
Laravelを用意して、下記のドキュメントの通りに実行すればOK。
サクッと動かしてみたいあなた!サンプルのgit repoを用意しておいたので、よければ使ってみてください。
(Laravel 9.x
使ってみて感じたメリット
使ってみて、下記のメリットを感じました。
- HTTPに関わる処理の実装が楽!
- Laravelと他のAWSサービスの親和性が高く、組み合わせやすい!
- サーバレスそのものの料金が安い!
それぞれ詳しく書きます。
HTTPに関わる処理の実装が楽
(筆者が使い慣れた)Laravelであれば、Lambdaエンドポイントを使用する場合の、HTTPの処理がスラスラ書けて良いのが第一印象でした。
例えば、JSON形式のレスポンスや、リクエストのバリデーションなど。
JSやPythonのランタイムでスクラッチで書くことよりも、何倍も楽に書けます。
また、Laravelを用いて、スクラッチではやりづらい複雑な処理が書きやすいのもメリットですね。
Laravelと他のAWSサービスの親和性が高く、組み合わせやすい
Lambdaは単体で動かすことはあまりなく、他のAWSサービスと組み合わせて使うことが多いですよね?
Laravelを用いる場合、(準)公式ライブラリや外部ライブラリを用いて、Facadeなどで楽に複数のAWSサービスが使用できるので、親和性が高いと思いました。シナジー!
AWSサービスと、Laravel9.xのドキュメントや外部ライブラリのリンクを、知ってる限り書いてみました。
- Laravelの公式ドキュメントに記載されているもの (リンクは日本語版
- 外部ライブラリ
- DynamoDB ※DBとして利用
- Cognito
他にあったら、コメントで教えてください~
こんな感じで、他のAWSサービスとの連携部分を、直接SDKを用いずに楽に書けるのが最高でした。
Lambdaエンドポイントを使わないケースにおいても、このあたりの親和性を考慮して、brefとLaravelで書いてみるのもアリだと思います。
サーバレスそのものの料金が安い!
EC2を立てる場合と比較して、思ってたよりも安かった。。。(感想)
実際には、実行時間とリクエスト数、割り当てたメモリの量により変動するところですが。
気が向いたら、料金のシミュレーションの比較を書くかもです。
詰まりどころ
開発していて詰まったところが、2つありました。
SESでメール送れないんだが?
Mail
(Mailable)で、メールを送ろうとするも、謎のIAM認証のエラーが出る。
S3とかは使えているのになぜ...?
と思っていたら、公式ドキュメントのS3の記述と同様に、AWS_SESSION_TOKEN
を指定しなければいけなかった。
これは、Lambda実行時に、IAMロールを元に一時的なcredentialが環境変数にセットされるのですが、そちらのトークンがLaravel上で指定されていない状態になっていたため、発生した現象でした。
config/services.php
のses
の部分に、'token' => env('AWS_SESSION_TOKEN'),
を追加しておきましょう。
余談ですが、
公式に「ドキュメント追記しない?」って言ったら、「PR大歓迎だよ!」と言われたので、そのうちPRを書きます。ワクワク
S3の署名付きURLを発行しようとすると、リンクが有効期限前に無効になるんだが?
こっちもbref関係なく、Lambdaの知識の話。
S3の署名付きURLを発行しようとしている方、是非読んでください。
最後に
そんな感じで、brefを用いてLambdaでLaravelを使ってみた結果、簡単&便利&お安く 開発できました。
個人的には、Lambdaエンドポイントを用いてHTTPで通信する場合、または、Lambdaで若干複雑めのバッチ処理を行う場合、次もbref使ってLaravelで書いてみよっかなーと思ってます。
みなさんも快適なbrefでLaravelライフを!