概要
この記事はServerless2 Advent Calendar 2018
の19日目の記事になります。
ずっとLambdaについて気になっていたのですが、PHPが対応していない故に手を出せない状態でした。
そんな中、たぶん月刊PHPニュース 2018年11月27日号 | 株式会社インフィニットループ技術ブログでPHP用のサーバレスフレームワークが紹介されていたので、試していきます。
2021/08/17更新
2021年に改めて調べた内容を下記にまとめました。
記事の内容は古いので、こちらを参照いただればと思います。
事前準備
事前にPHPとComposer、Node.jsが動く環境を用意しておいてください。
Composerが早くなるらしいので、下記のライブラリもインストールすると良さそうです。
composerを速くするプラグイン・prestissimoを作った: Architect Note
導入
READMEに従って進めます。
1.serverlessの導入
npm install -g serverless
2.AWSの準備
Lambdaを実行できる準備をします。
事前にアクセスキーを発行してください。
ここで設定するアカウントはAdmin権限のものでは動きませんでした。
IAMでLambdaの権限を与えたアカウントに設定が必要そうです。
# yum install -y python-pip
$ pip install awscli --user
awscliを導入したら、アクセスキー等を設定します。
$ aws configure
AWS Access Key ID [None]: 作ったやつを入力
AWS Secret Access Key [None]: 作ったやつを入力
Default region name [None]: ap-northeast-1
Default output format [None]: json
これでawsの準備はOKです。
3.brefを導入
composer require mnapoli/bref
vendor/bin/bref init
initとすると下記のファイルが生成される。
<?php declare(strict_types=1);
require __DIR__.'/vendor/autoload.php';
λ(function (array $event) {
return [
'hello' => $event['name'] ?? 'world',
];
});
λは下記の省略形で、本格的に書くと下記になります。
$app = new \Bref\Application ;
$app->simpleHandler(function (array $event) {
return [
'hello' => $event['name'] ?? 'world',
];
});
$app->run();
4.brefをデプロイ
先程 init
したディレクトリ配下で、下記Commandを実行します。
正常にデプロイが終われば準備完了です。
$ vendor/bin/bref deploy
Serverless: Packaging service...
(以下略)
Deployment success
記載されているendpointにアクセスすると、下記の画面が表示されました。
これで準備は整ったようです。
まだAWS Lambdaの箇所に、今回デプロイしたプログラムがありました。
CLIで試しに実行してみます。
vendor/bin/bref invoke
を実行して、 hello world
が表示されれば問題ありません。
$ vendor/bin/bref invoke
{
"hello": "world"
}
ちなみにローカルで実行するときは、普通にphpコマンドを実行で良いようです。
$ php bref.php bref:invoke
{
"hello": "world"
}
これでPHPからAWS Lambdaを使う準備が整いました。
bref
は Composer
でインストールできるので、実際に導入する際は他のライブラリやFWと連携して使うと良さそうです。