🧑‍💻

#05 AWS + Serverless Framework + BrefでサーバレスなLaravel環境を構築してみる①

2024/07/25に公開

はじめに

最近、サーバレスにLaravelを運用する環境を目にする機会がありました。
その際に利用されていた技術について備忘録として複数回に分けてこのブログにまとめていこうと思います。
今回は、BrefとServerless Frameworkに焦点をあて、PHP動作環境をAWSにデプロイしてみます。

1. 前提条件

AWSの各種サービスに対する基本的な知識、AWS CLI設定済み、npm/composerインストール済み

2. 動作環境

npm:9.6.1
composer:2.1.14
AWS CLI:2.5.5
Serverless Framework:3.2.81
Bref:1.7

3. 今回利用するツールに関して

1. Brefとは

Brefとは、一言で言えばAWS LambdaでPHPを動作させるための各種設定を行うCLIで、OSSとして提供されています。
LambdaのランタイムにはPHPは存在せず、カスタムランタイムとして利用する必要があります。
カスタムランタイムとしてPHPをLambdaで利用するための各種設定などの煩わしい作業を簡単にしてくれます。
公式ドキュメント:https://bref.sh/docs/

2. Serverless Frameworkとは

AWS/GCP/Azureなどのクラウドサービスにおいてサーバレスなアプリケーションを簡単に開発、デプロイするためのNode.js製のフレームワーク。
サーバレス環境をコード化し、環境のセットアップやデプロイを自動化を行います。
公式ドキュメント:https://www.serverless.com/framework/docs

※AWSでのサーバレスアーキテクチャの自動化というとSAMがまず初めに頭に浮かびますが、
 BrefはSereveless Frameworkを利用したCLIであるためSAMは今回使用しません。

3. PHP動作環境をAWSにデプロイしてみる

Brefの公式ドキュメントにPHPアプリをLambdaで実行するための手順が記載されているので、
それに従ってPHPアプリをデプロイしてみます。
公式ドキュメント:https://bref.sh/docs/installation.html

① Serverless Frameworkのインストール

npm install -g serverless

② Serverless Frameworkで利用するAWS CLIの認証情報を設定

serverless config credentials --provider aws --key <key> --secret <secret>

③ Brefのインストール

composer require bref/bref

④ Brefの初期化

どのようなLambdaを作成するか問われるので、デフォルトの[Web application]でを選択します。

vendor/bin/bref init

What kind of lambda do you want to create? (you will be able to add more functions later by editing `serverless.yml`) [Web application]:

 [0] Web application

 [1] Event-driven function


Creating index.php                                              

 [OK] index.php successfully created.                                          


Creating serverless.yml                                         

 [OK] serverless.yml successfully created.                                        

 [OK] Project initialized and ready to test or deploy. 

Accept all the defaults by pressing "Enter". The following files will be created in your project:

index.php contains the code of your application
serverless.yml contains the configuration for deploying on AWS
出典:https://bref.sh/docs/first-steps.html#initializing-the-project

初期化を行うと、サンプルページ用のindex.phpファイルとAWSへのデプロイに関する設定ファイルが作成されます。

⑤ Serverless Frameworkを利用してPHPをデプロイ

デプロイを実行するとエンドポイントが表示されるので、アクセスするとサンプルページが表示されます。

serverless deploy

Deploying app to stage dev (ap-northeast-1)

✔ Service deployed to stack app-dev (116s)

endpoint: ANY - https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com **** ここにエンドポイントが表示されます。

functions:

 api: app-dev-api (980 kB)

Need a better logging experience than CloudWatch? Try our Dev Mode in console: run "serverless --console"

4. 備考

デプロイを実行することで、AWSのAPIGateway/Lambdaに加えてCloudformationとS3に各種設定が自動的に行われます。
AWS上にデプロイした環境は、Cloudformationで管理されているので、不要になった環境は以下のコマンドで自動的に削除することが可能です。

serverless remove

最後に

今回は、PHP環境をサーバレスに構築してみましたが、非常に簡単に構築することができました。
次回は本題のLaravelアプリをLambdaにデプロイしてみようと思います。

Discussion