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という概念が存在しない退屈な世界

2,650 views

Published on

PHP BLT #1 ( http://phpblt.connpass.com/event/21929/ )で補欠になってしまったため発表できなかった発表資料。
AWS LambdaでPHPのスクリプトを動かす話。

Published in: Engineering

PHPという概念が存在しない退屈な世界

  1. 1. whoami • 大須賀 義浩 • PHPエンジニア@株式会社 Loco Partners • twitter @oh_sky • facebook http://fb.com/ohsky
  2. 2. 第1話 PaaSは誰が為に
  3. 3. かつてのPHP どのレンタルサーバでも使用できる お手軽なWeb開発言語 最近のPHP PaaSでは対応をあとまわしにされがち 冷遇されている感
  4. 4. AWS Lambda • Node.js, Java, Pythonのコードをアップロードする だけで実行できるPaaS的なサービス • イベント駆動 • オートスケール • リクエスト回数・実行時間(/100ms)で課金
  5. 5. AWS Lambdaで使用できる言語 • Node.js, Python, Java • Amazon Linuxでサポートされている言語(?)
  6. 6. 第2話 サポート言語のなぞ
  7. 7. 例えば、perlコマンドを呼び出してperlのスクリプトを実行可能 http://oh-sky.hatenablog.com/entry/2015/10/19/010516 Perl は使える
  8. 8. PHPは使えない
  9. 9. その他 FAQにはGo, Rubyを使用できると書いてあるが、
  10. 10. その他、sh, bash, awk, luaなどが使えた 使える言語は他にもありそう (PHPは無かったが)
  11. 11. 第3話 AWS Lambdaの愛し方
  12. 12. AWS Lambdaで PHPは使えないのか • PHPコマンドをアップロードすれば良い • Linux用のパッケージからPHPコマンドを拝借する • あるいは自分でコンパイルしたPHPをアップロード する
  13. 13. AWS LambdaでPHPを動かす ├── index.js ├── script.sh ├── hello.php ├── php/ │   ├── php │   └── php.ini └── lib/    ├── libicudata.so.50    ├── libicui18n.so.50    ├── libicuio.so.50    └── libicuuc.so.50 exports.handler = function(event, context) { var exec = require('child_process').exec; exec('sh script.sh', 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); }); }; Node.jsからシェルスクリプトを起動する
  14. 14. AWS LambdaでPHPを動かす ├── index.js ├── script.sh ├── hello.php ├── php/ │   ├── php │   └── php.ini └── lib/    ├── libicudata.so.50    ├── libicui18n.so.50    ├── libicuio.so.50    └── libicuuc.so.50 <script.sh> #!/bin/sh export LD_LIBRARY_PATH=`pwd`/lib: $LD_LIBRARY_PATH ./php/php hello.php <hello.php> <?php echo "PHP Version:" . PHP_VERSION . "n"; echo "Hello world.n"; 共有ライブラリのPATHを通す
  15. 15. 第6話 手作りのぬくもり
  16. 16. AWS LambdaでPHPを動かす ├── index.js ├── script.sh ├── hello.php ├── php/ │   ├── php │   └── php.ini └── lib/    ├── libicudata.so.50    ├── libicui18n.so.50    ├── libicuio.so.50    └── libicuuc.so.50 ./configure --prefix=/var/task/php --disable-all --enable-intl --enable-mbstring --enable-json --enable-session --enable-pdo --with-sqlite=shared --with-openssl && make php.ini を読み込めるように オプションは お好みで (これらはCakePHP3を動かしたくて 付けたオプション)
  17. 17. AWS LambdaでPHPを動かす ├── index.js ├── script.sh ├── hello.php ├── php/ │   ├── php │   └── php.ini └── lib/    ├── libicudata.so.50    ├── libicui18n.so.50    ├── libicuio.so.50    └── libicuuc.so.50 configureオプションによって 必要となるライブラリはここに置く。 これらは--enable-intlを付けたため必要。 このディレクトリへのライブラリPATHは、 script.sh で設定済み。
  18. 18. AWS LambdaでPHPを動かす $ zip -r hello-php.zip index.js lib php script.sh hello.php zipにまとめてアップロード 実行
  19. 19. まとめ • AWS LambdaでPHPを使えないことはない • 公式でサポートしてほしい • せっかくPHPが動いたので、Webアプリケーション を動かしたい
  20. 20. 次回 AWS Lambdaは PHP Web APPの夢を見るか? http://lmn.connpass.com/event/23001/ 2015/11/27 20:00 On Air

×