PHP
AWS
lambda
serverless
PHPDay 1

serverless frameworkでPHPを使用する

More than 1 year has passed since last update.

公式にサポートはされていませんが、AWS LambdaでPHPを動かすことは可能です。

Linux用のPHP本体をアプリケーションと一緒にアップロードすることで、AWS LambdaでPHPのアプリケーションを動かすことができます。

といったことを、去年のAdvent CalendarやらPHPカンファレンスのLTで紹介しました。

しかし、これらを自分で一からやろうとすると、ちょっと面倒です。

カジュアルに用意できればいいのになーと思っていたところ・・・

Serverlessフレームワーク用のプラグイン serverless-php が先月に公開されました。

開発元のブログ→ http://blog.zerosharp.com/the-serverless-framework-and-php/

github→ https://github.com/ZeroSharp/serverless-php

これを使えば、簡単に、AWS LambdaでPHPを動かすことができます。


serverless-php の使い方


事前準備


アプリケーションの構築から実行まで


1. テンプレートの展開


serverless-phpのテンプレートを展開

[prompt]$ sls install --url https://github.com/ZeroSharp/serverless-php



2. serverless.yml の編集(必要であれば)

デフォルトでは、アイルランドリージョンに展開するように記述してあります。

日本リージョンに展開するように書き換えます。


serverless.yml

(前略)

provider:
name: aws
runtime: nodejs4.3
region: ap-northeast-1
(後略)


3. デプロイ

アクセスキー、シークレットキーには、事前準備で生成したCredentialの情報を入力します。


アプリケーションのデプロイ

[prompt]$ AWS_ACCESS_KEY_ID=AKI********* \

AWS_SECRET_ACCESS_KEY=*********** \
sls deploy

デプロイに成功すると、APIのエンドポイントなどの情報が出力されます。


4. 実行

作成されたエンドポイントに対して、リクエストを行います。


デプロイしたアプリケーションの実行

[prompt]$ curl -i https://******.execute-api.ap-northeast-1.amazonaws.com/dev/hello

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 74
Connection: keep-alive
Date: Thu, 01 Dec 2016 10:50:05 GMT
x-amzn-RequestId: 892d80e2-b7ab-11e6-8ed0-8b69baa26de7
X-Amzn-Trace-Id: Root=1-583ff24d-e749cf3e97cb5ef4e73c2783
X-Cache: Miss from cloudfront
Via: 1.1 2587f87ca37d9b8f8c0f687522eec7f6.cloudfront.net (CloudFront)
X-Amz-Cf-Id: xGZWHF9VKDd1pJnMAHhck4R5uT5BFnZ5raZe3sajdpvFwqm2fFKSpg==

{"message":"Go Serverless v1.0! Your PHP function executed successfully!"}


このように簡単な手順で、アプリケーションを作成することができます。


任意のバージョンのphpを使用したい場合

PHPをビルドするためのdockerfileが同梱されていますので、それを編集し、動かせば、好きなバージョン・好きなビルドオプションのphpを使用することができます。


アプリケーションによっては、うまく動かない場合がある

動かしたいアプリケーションによっては、必要なライブラリがAWS Lambda上に無いなどの理由で、エラーが発生してしまうことがあります。

そのような場合には、必要なライブラリもアップロードする必要があります。

ライブラリのアップロード・使用については、こちらが参考になるかもしれません。