Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,692 views

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
  • Be the first to comment

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)

×