はじめに
最近、サーバレスに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にデプロイしてみようと思います。