概要
LambdaでPHPを動かすためにはCustom Runtimeの機能を使って、自分でランタイム環境をビルドして、bootstrapというCustom Runtimeのエンドポイントとなるファイルを用意する必要があります。
しかし、brefというサーバーレス環境でPHPを動かすためのツールとServerless Frameworkを使うことで非常に簡単にPHPのCustom Runtime環境が構築できたのでその紹介をしたいと思います。
使い方
テンプレートからプロジェクトを作成
brefのgithubリポジトリにサンプルとなるプロジェクトが公開されているのでそれを元にローカルにプロジェクトをセットアップします
$ serverless create --template-url https://github.com/brefphp/bref/tree/master/template/default --path sls-phpapp
$ cd sls-phpapp
composerでbrefをインストール
プロジェクト配下でcomposerを使ってインストールを行います
$ composer require bref/bref
serverless.ymlの書き方
service: app
provider:
name: aws
region: us-east-1
runtime: provided
plugins:
- ./vendor/bref/bref
functions:
function:
handler: index.php
description: ''
layers:
- ${bref:layer.php-73}
SQSバックエンドなアプリケーションを構成する
Lambdaはイベントソースをトリガーとして起動させるので、今回はSQSバックエンドLambdaを構成して動かしてみます。
以下がそのserverless.ymlになります
service: phpapp
provider:
name: aws
region: ap-northeast-1
runtime: provided
plugins:
- ./vendor/bref/bref
functions:
function:
handler: index.php
description: ''
layers:
- ${bref:layer.php-73}
events:
- sqs:
arn:
Fn::GetAtt:
- PhpQueue
- Arn
resources:
Resources:
PhpQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: phpqueue
そして、index.php
でevent
をダンプさせます
<?php
declare(strict_types=1);
require __DIR__.'/vendor/autoload.php';
lambda(function ($event) {
var_dump($event);
});
これで準備完了です。デプロイしましょう
$ serverless deploy
デプロイが完了したらSQSにメッセージを送ってこのLambdaが動くか動作確認します。
$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/<アカウントID>/<queue名> --message-body aaa
CloudWatchLogsを見てみると、正しくメッセージが処理されていることがわかります。
php.iniを編集する
デフォルトではLambdaの実行に最適化されたphp.iniがデプロイされています。
設定をカスタマイズしたい場合は、プロジェクト直下にphp/conf.d/php.ini
を配置して設定の記述を行います。
brefは自動でphp/conf.d/*.ini
で設定内容をincludeしてくれるようです。
エクステンションを追加する
デフォルトでは以下のエクステンションがインストールされているようです。
ここにないエクステンションは、自身でそのエクステンション用のLambda layerを作成して、php.ini
に設定することで使用可能になるようです。