2019. 12. 1
AWS SAM + Bref で 楽々 PHP on Lambda
この記事は Fusic Advent Calendar 2019 1 日目の記事です。
はじめに
1 年前くらいに、自作の PHP 実行用 Lambda Layer を作成して、Custom Runtime で実行する方法をブログ記事に書きましたが、最近は Bref という OSS を利用して、サクッと Lambda で PHP を動かしているので、その方法を紹介します。
また、公式ドキュメントでは serverless framework を使用する方法について記載があるので、今回は AWS SAM で動作させる方法を紹介します。
なお、 AWS SAM に関しては既にインストール済みの前提とさせていただきます。
What is a Bref ?
Bref は PHP が動作する Lambda Layer と 動作に必要な composer パッケージ、その他デプロイツールなどを包括的に提供してくれるライブラリです。
Bref の使用方法
bref のインストール
まずは、開発用のディレクトリ移動して、bref をインストールします。
$ cd <開発用ディレクトリ>
$ composer require bref/bref
プロジェクトの作成
次に bref 用のプロジェクトを生成してくれるコマンドがあるので、一旦そちらを実行します。
$ vendor/bin/bref init
すると、プロジェクトの種類を尋ねられます。今回はシンプルな PHP Lambda 関数を作成します。
What kind of lambda do you want to create? (you will be able to add more functions later by editing `serverless.yml`) [PHP function]:
[0] PHP function
[1] HTTP application
[2] Console application
> 0
Creating serverless.yml
Creating index.php
[OK] Project initialized and ready to test or deploy.
コマンドが成功すると下記のようなディレクトリ構成になると思います。
$ tree
.
├── composer.json
├── composer.lock
├── index.php
├── serverless.yml
├── template.yml
└── vendor/
SAM テンプレートへの置き換え
serverless をメインで使用している方はこのまま開発を進めていただければ良いですが、私は SAM 派なので、SAM で動くように変更していきます。
まずは、 serverless.yml
を削除します。
次に、SAM 用の templete.yml
を作成します。使用する Lambda Layer の情報は、こちらから取得することができます。
今回は、単純な PHP 7.3 の実行環境を東京リージョンで作成するので、arn:aws:lambda:ap-northeast-1:209497400698:layer:php-73:14
を使用します。
作成する template.yml はこちら。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
BrefSample:
Type: AWS::Serverless::Function
Properties:
FunctionName: bref-sample
Runtime: provided
Layers:
- 'arn:aws:lambda:ap-northeast-1:209497400698:layer:php-73:14'
CodeUri: .
Handler: index.php
Timeout: 300
MemorySize: 128
これでデプロイする準備が整いました。
関数のデプロイ
ここからは SAM の使用方法になるので、詳細な説明は割愛します。
パッケージング
$ sam package \\
--template-file template.yml \\
--output-template-file packaged.yml \\
--s3-bucket <バケット名>
デプロイ実行
aws cloudformation deploy \\
--template-file packaged.yml \\
--stack-name <スタック名> \\
--capabilities CAPABILITY_IAM
デプロイが完了するまで待機します。
関数の実行
作成した関数をマネジメントコンソールで確認します。無事にできていますね。
テストイベントの作成
今回はトリガーをセットしていないので、テストイベントから実行してみます。
テストイベントを作成して・・・。
実行!!
無事に PHP 関数が Lambda で実行できました。
まとめ
今回は、Bref ライブラリと AWS SAM を使用して、PHP を Lambda で動かしてみました。
自力で Lambda Layer を作る必要もなく、お手軽に実行できるようになったので、皆さんも是非活用してみてください。