Brefを理解するためにプロジェクト作り直して一から勉強中の忘備録。
まずはBrefの存在意義について。
なぜBrefを使うのか
AWS Lambdaがサポートする言語は現時点(2021/8/31)で、Java、Go、PowerShell、Node.js、C#、Python、Rubyのみ。
これらの言語を使用する場合はLambda上でコードを書いて動かすことができるが、PHPはサポートされていない。
Lambdaは、その他の言語を使用できるようにするためランタイムAPIという機能を提供している。
PHPを使用するには、カスタムランタイム機能を使って自分でランタイム環境をビルドして、bootstrapというカスタムランタイムのエンドポイントとなるファイルを用意する必要がある。
これがまぁまぁ面倒くさい。
brefを使うと、その部分をServerless Frameworkを利用してサクッと自動構築してくれて、サーバーレスPHPアプリケーションを簡単に作成できる。
以下はLaravelでのBref導入時の手順。
1. Serverless Frameworkのインストール
$ npm install -g serverless
$ serverless config credentials --provider aws --key <key> --secret <secret>
Serverless Frameworkとは、AWSならCloudFromationといったクラウドの構築管理サービスといい感じに連携してくれるOSS。(説明雑
2. Laravelプロジェクトを作成
$ composer create-project laravel/laravel sample-serverless-laravel
$ cd sample-serverless-laravel
今回は新しく作成しているけど既存のプロジェクトでもOK。
3. Bref&Laravel-Brefパッケージをインストール
$ composer require bref/bref
$ composer require bref/bref bref/laravel-bridge --update-with-dependencies
Laravel-Brefパッケージは、Laravelでのログドライバやセッションドライバの設定をサーバレス用にいい感じに設定してくれる。
4. serverless.yml構成ファイルを作成
$ php artisan vendor:publish --tag=serverless-config
Copied File [/vendor/bref/laravel-bridge/config/serverless.yml] To [/serverless.yml]
Publishing complete.
以下のようなファイルがプロジェクトディレクトリに作成される。
service: laravel
provider:
name: aws
# The AWS region in which to deploy (us-east-1 is the default)
region: us-east-1
# The stage of the application, e.g. dev, production, staging… ('dev' is the default)
stage: dev
runtime: provided.al2
package:
# Directories to exclude from deployment
exclude:
- node_modules/**
- public/storage
- resources/assets/**
- storage/**
- tests/**
functions:
# This function runs the Laravel website/API
web:
handler: public/index.php
timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
layers:
- ${bref:layer.php-74-fpm}
events:
- httpApi: '*'
# This function lets us run artisan commands in Lambda
artisan:
handler: artisan
timeout: 120 # in seconds
layers:
- ${bref:layer.php-74} # PHP
- ${bref:layer.console} # The "console" layer
plugins:
# We need to include the Bref plugin
- ./vendor/bref/bref
必要ならregion: us-east-1
の部分をregion: ap-northeast-1
(東京リージョン)に変える。
5. キャッシュクリア
プロジェクト作成直後は必要ないけど、二度目以降はキャッシュが残るのでデプロイ前にキャッシュクリアが必要。
$ php artisan config:clear
Configuration cache cleared!
6. デプロイ
$ serverless deploy
Service Information
service: laravel
stage: dev
region: us-east-1
stack: laravel-dev
resources: 14
api keys:
None
endpoints:
ANY - https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com
functions:
web: laravel-dev-web
artisan: laravel-dev-artisan
layers:
None
デプロイ確認
一応AWSコンソール上でもデプロイ確認。
AWS CloudFormationにアクセス。
イベントタブやリソースタブで各リソースがCREATE_COMPLETE
またはUPDATE_COMPLETE
になっていればOK。
artisanコマンド確認
vendor/bin/bref cli <function-name> -- <command>
使用例↓
$ vendor/bin/bref cli laravel-dev-artisan -- inspire
誰かの名言が出てきたらOK。無事にbref上でphp artisanのコマンドが使えている。
記事に間違いあったらご指摘ください。
次回はRDSを構成して繋げる部分を書いていきます。
参考