Blog 開発ブログ

Blog

brefを使って簡単にLambdaのPHP Custom Runtime環境を構築する

概要

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.phpeventをダンプさせます

<?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に設定することで使用可能になるようです。

まとめ

brefを使うことでかなり簡単にPHPのLambda環境を作ることが出来ました。カスタマイズについてもphpの設定やエクステンションも自由に追加できるため、多くのプロジェクトでは特に問題なく採用できるのでは無いでしょうか。

Our Partners

サーバーレスで
クラウドの価値を最大限にMaximize the cloud value with serverless

Serverless Operationsはこれまでグローバルの第一線で培ってきたクラウド技術(AWS − アマゾンウェブサービス)の豊富な実績と知見を活かし、お客さまのサーバーレスに関するさまざまな課題を解決します。