22

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

Embed Size (px)

Citation preview

Page 1: PHPという概念が存在しない退屈な世界
Page 2: PHPという概念が存在しない退屈な世界

whoami

• 大須賀 義浩

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

• twitter @oh_sky

• facebook http://fb.com/ohsky

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

第1話 PaaSは誰が為に

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

かつてのPHPどのレンタルサーバでも使用できる

お手軽なWeb開発言語

最近のPHPPaaSでは対応をあとまわしにされがち

冷遇されている感

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

AWS Lambda• Node.js, Java, Pythonのコードをアップロードするだけで実行できるPaaS的なサービス

• イベント駆動

• オートスケール

• リクエスト回数・実行時間(/100ms)で課金

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

AWS Lambdaで使用できる言語

• Node.js, Python, Java • Amazon Linuxでサポートされている言語(?)

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

第2話 サポート言語のなぞ

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

例えば、perlコマンドを呼び出してperlのスクリプトを実行可能 http://oh-sky.hatenablog.com/entry/2015/10/19/010516

Perl は使える

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

PHPは使えない

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

その他

FAQにはGo, Rubyを使用できると書いてあるが、

Page 11: PHPという概念が存在しない退屈な世界
Page 12: PHPという概念が存在しない退屈な世界

その他、sh, bash, awk, luaなどが使えた 使える言語は他にもありそう

(PHPは無かったが)

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

第3話 AWS Lambdaの愛し方

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

AWS Lambdaで PHPは使えないのか

• PHPコマンドをアップロードすれば良い

• Linux用のパッケージからPHPコマンドを拝借する

• あるいは自分でコンパイルしたPHPをアップロードする

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

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からシェルスクリプトを起動する

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

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を通す

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

第6話 手作りのぬくもり

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

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を動かしたくて 付けたオプション)

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

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 で設定済み。

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

AWS LambdaでPHPを動かす$ zip -r hello-php.zip index.js lib php script.sh hello.php

zipにまとめてアップロード

実行

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

まとめ

• AWS LambdaでPHPを使えないことはない

• 公式でサポートしてほしい

• せっかくPHPが動いたので、Webアプリケーションを動かしたい

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

次回 AWS Lambdaは

PHP Web APPの夢を見るか?

http://lmn.connpass.com/event/23001/2015/11/27 20:00 On Air