AWS SAM + Bref で 楽々 PHP on Lambda

Sun, 01 Dec 2019


この記事は 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

デプロイが完了するまで待機します。

関数の実行

作成した関数をマネジメントコンソールで確認します。無事にできていますね。

img

テストイベントの作成

今回はトリガーをセットしていないので、テストイベントから実行してみます。
テストイベントを作成して・・・。

img

実行!!

img

無事に PHP 関数が Lambda で実行できました。

まとめ

今回は、Bref ライブラリと AWS SAM を使用して、PHP を Lambda で動かしてみました。
自力で Lambda Layer を作る必要もなく、お手軽に実行できるようになったので、皆さんも是非活用してみてください。


← back