19

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

Embed Size (px)

Citation preview

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

whoami

• 大須賀 義浩

• PHPエンジニア@株式会社 Loco Partners

• twitter @oh_sky

• facebook http://fb.com/ohsky

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

第9話 AWS Lambdaは

PHP Web APPの夢を見るか?

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

せっかくPHPを動かせたんだし、※1 Webサイトを表示させたい。

=> AWS LambdaでCakePHPを動かしてみよう。

※1 http://www.slideshare.net/oh-sky/php-55467177

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

通信フロー

API Gatewayを使用して、Webアクセスを トリガーにAWS Lambda が起動するようにする。

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

Resource Pathを変数にする

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

Lambdaへのリクエストに Resource Pathをマッピングする

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

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情報を引数に付与

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

#!/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まで動き続ける)

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

Lambdaの出力をそのまま クライアントに返す設定 この設定をしないと・・・

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

出力全体が ”” で括られてしまう

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

Content-type: text/html でレスポンスするよう設定

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

設定はここまで 実際にWebブラウザでアクセスしてみると

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

$ sqlite3 --version

AWS LambdaではSQLite3が使用できる

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

$ 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|ローズヒップ

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

AWS LambdaでSQLite3

• データベースファイルが /var/task にあると書き込めない(読み込みはできる)

• データベースファイルを /tmp 以下に置けば書き込めるけれど、処理終了時に消失する

使うことはできるが、実用的には使用できない

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

AWS Lambdaで使用できるDB

• DynamoDB

• RDS(Public Access可能にする必要がある)

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

まとめ

• API Gatewayはjson以外も返せる

• LambdaでPHPを動かしてWebページを生成するのは遅いので実用できではない

• VPC内リソースへのアクセスに期待(特にRDS)