公式にサポートはされていませんが、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. テンプレートの展開
[prompt]$ sls install --url https://github.com/ZeroSharp/serverless-php
2. 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上に無いなどの理由で、エラーが発生してしまうことがあります。
そのような場合には、必要なライブラリもアップロードする必要があります。
ライブラリのアップロード・使用については、こちらが参考になるかもしれません。