「コーポレートサイトにちょうどいい」CakePHPベースの国産CMS「baserCMS」 - ここがちょうどいい機能(OSC2015大分)
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
-
Upload
yoshihiro-ohsuka -
Category
Engineering
-
view
2.094 -
download
4
Transcript of PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
whoami
• 大須賀 義浩
• PHPエンジニア@株式会社 Loco Partners
• twitter @oh_sky
• facebook http://fb.com/ohsky
第9話 AWS Lambdaは
PHP Web APPの夢を見るか?
せっかくPHPを動かせたんだし、※1 Webサイトを表示させたい。
=> AWS LambdaでCakePHPを動かしてみよう。
※1 http://www.slideshare.net/oh-sky/php-55467177
通信フロー
API Gatewayを使用して、Webアクセスを トリガーにAWS Lambda が起動するようにする。
Resource Pathを変数にする
Lambdaへのリクエストに Resource Pathをマッピングする
exports.handler = function(event, context) { var exec = require('child_process').exec; exec('sh script.sh ' + event.uri_path, function (error, stdout, stderr) { if(stdout){ console.log('stdout: ' + stdout); } if(stderr){ console.log('stderr: ' + stderr); } if (error !== null) { console.log('Exec error: ' + error); } context.succeed(stdout); }); };
HTTP Request のPATH情報を引数に付与
#!/bin/sh export LD_LIBRARY_PATH=`pwd`'/lib:'$LD_LIBRARY_PATH ./php/php -S localhost:8080 -t ./cakeapp/webroot & mkdir -p /tmp/cakephp/logs mkdir -p /tmp/cakephp/tmp/cache mkdir /tmp/cakephp/tmp/cache/models mkdir /tmp/cakephp/tmp/cache/persistent mkdir /tmp/cakephp/tmp/cache/views curl http://localhost:8080/$1 kill $!
Built-in Serverの起動
CakePHPを動かすための設定
Built-in ServerにリクエストBuit-in Serverの停止 (停止しないとLambdaのTimeoutまで動き続ける)
Lambdaの出力をそのまま クライアントに返す設定 この設定をしないと・・・
出力全体が ”” で括られてしまう
Content-type: text/html でレスポンスするよう設定
設定はここまで 実際にWebブラウザでアクセスしてみると
$ sqlite3 --version
AWS LambdaではSQLite3が使用できる
$ sqlite3 cakeapp.dbSQLite version 3.8.11.1 2015-07-29 20:00:57Enter ".help" for usage hints.sqlite> SELECT * FROM gloriana;1|ダージリン2|アッサム3|オレンジペコ4|ローズヒップ
AWS LambdaでSQLite3
• データベースファイルが /var/task にあると書き込めない(読み込みはできる)
• データベースファイルを /tmp 以下に置けば書き込めるけれど、処理終了時に消失する
使うことはできるが、実用的には使用できない
AWS Lambdaで使用できるDB
• DynamoDB
• RDS(Public Access可能にする必要がある)
まとめ
• API Gatewayはjson以外も返せる
• LambdaでPHPを動かしてWebページを生成するのは遅いので実用できではない
• VPC内リソースへのアクセスに期待(特にRDS)