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_pa...
#!/bin/sh
export LD_LIBRARY_PATH=`pwd`'/lib:'$LD_LIBRARY_PATH
./php/php -S localhost:8080 -t ./cakeapp/webroot &
mkdir -p ...
Lambdaの出力をそのまま
クライアントに返す設定
この設定をしないと・・・
出力全体が ”” で括られてしまう
Content-type: text/html
でレスポンスするよう設定
設定はここまで
実際にWebブラウザでアクセスしてみると
$ sqlite3 --version
AWS LambdaではSQLite3が使用できる
$ sqlite3 cakeapp.db
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
sqlite> SELECT * FROM glor...
AWS LambdaでSQLite3
• データベースファイルが /var/task にあると書き込
めない(読み込みはできる)
• データベースファイルを /tmp 以下に置けば書き込
めるけれど、処理終了時に消失する
使うことはできるが、実...
AWS Lambdaで使用できるDB
• DynamoDB
• RDS(Public Access可能にする必要がある)
まとめ
• API Gatewayはjson以外も返せる
• LambdaでPHPを動かしてWebページを生成するの
は遅いので実用できではない
• VPC内リソースへのアクセスに期待(特にRDS)
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
Upcoming SlideShare
Loading in...5
×

PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編

334
-1

Published on

[11/27]最新AWS活用事例LT大会!(ビール付き)で発表した内容の資料
http://lmn.connpass.com/event/23001/

http://www.slideshare.net/oh-sky/php-55467177 の続き

AWS LambdaでPHPのWebアプリケーション(SPAではない)を動かす方法

Published in: Engineering
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
334
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編

  1. 1. whoami • 大須賀 義浩 • PHPエンジニア@株式会社 Loco Partners • twitter @oh_sky • facebook http://fb.com/ohsky
  2. 2. 第9話 AWS Lambdaは PHP Web APPの夢を見るか?
  3. 3. せっかくPHPを動かせたんだし、※1 Webサイトを表示させたい。 => AWS LambdaでCakePHPを動かしてみよう。 ※1 http://www.slideshare.net/oh-sky/php-55467177
  4. 4. 通信フロー API Gatewayを使用して、Webアクセスを トリガーにAWS Lambda が起動するようにする。
  5. 5. Resource Pathを変数にする
  6. 6. Lambdaへのリクエストに Resource Pathをマッピングする
  7. 7. 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情報を引数に付与
  8. 8. #!/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まで動き続ける)
  9. 9. Lambdaの出力をそのまま クライアントに返す設定 この設定をしないと・・・
  10. 10. 出力全体が ”” で括られてしまう
  11. 11. Content-type: text/html でレスポンスするよう設定
  12. 12. 設定はここまで 実際にWebブラウザでアクセスしてみると
  13. 13. $ sqlite3 --version AWS LambdaではSQLite3が使用できる
  14. 14. $ sqlite3 cakeapp.db SQLite version 3.8.11.1 2015-07-29 20:00:57 Enter ".help" for usage hints. sqlite> SELECT * FROM gloriana; 1|ダージリン 2|アッサム 3|オレンジペコ 4|ローズヒップ
  15. 15. AWS LambdaでSQLite3 • データベースファイルが /var/task にあると書き込 めない(読み込みはできる) • データベースファイルを /tmp 以下に置けば書き込 めるけれど、処理終了時に消失する 使うことはできるが、実用的には使用できない
  16. 16. AWS Lambdaで使用できるDB • DynamoDB • RDS(Public Access可能にする必要がある)
  17. 17. まとめ • API Gatewayはjson以外も返せる • LambdaでPHPを動かしてWebページを生成するの は遅いので実用できではない • VPC内リソースへのアクセスに期待(特にRDS)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×