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

Preview:

Citation preview

whoami

• 大須賀 義浩

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

• twitter @oh_sky

• facebook http://fb.com/ohsky

第1話 PaaSは誰が為に

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

お手軽なWeb開発言語

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

冷遇されている感

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

• イベント駆動

• オートスケール

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

AWS Lambdaで使用できる言語

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

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

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

Perl は使える

PHPは使えない

その他

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

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

(PHPは無かったが)

第3話 AWS Lambdaの愛し方

AWS Lambdaで PHPは使えないのか

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

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

• あるいは自分でコンパイルした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からシェルスクリプトを起動する

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

第6話 手作りのぬくもり

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

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

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

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

実行

まとめ

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

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

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

次回 AWS Lambdaは

PHP Web APPの夢を見るか?

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

Recommended