0から始める!AWS LambdaをPHPでやってみるためのハウツー
ユアマイスター株式会社のインターン、京極と申します。
AWS LambdaをPHPで触ってみたかったのでまとめてみました。
AWS Lambdaがサポートする言語にPHPは含まれていませんでしたので、EC2インスタンスをつくり、そのうえでPHP環境を作るところから始めます。
手順には、こちらを参考にさせていただきました。
EC2上でPHPを動かすインスタンスを立ち上げよう!
AWSのコンソールへログインし、EC2上で作業を行います。
amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2というAMIがLambdaの実行環境として動くようなので、クリックします。下図の画面が出たら作成ボタンを押します。
インスタンスタイプにt2.largeを選び、SSHをセキュリティグループに入れて、インスタンスを立ち上げます。
※キーペアは既存のものでも新しく作るでもどちらでも構いません。
以下のように立ち上がっていればオッケーです。
立ち上げたインスタンスへ接続します。
ssh -i <鍵> ec2-user@<IPアドレス>
PHP7のインストール
はじめに接続したインスタンスのパッケージを更新しておきます。
yum update
依存するパッケージをインストールします。
sudo yum install gcc gcc-c++ libxml2-devel -y
PHP7のソースコードを取得します。バージョンは安定版の最新7.2.4を使用しました。
wget http://jp2.php.net/get/php-7.2.4.tar.bz2/from/this/mirror -O php-7.2.4.tar.bz2
tar jxvf php-7.2.4.tar.bz2
いよいよビルドを行います。ホームディレクトリ上にphp-binというディレクトリを作成しそこにインストールします。
mkdir php-bin
cd php-7.2.4
./configure --prefix=/home/ec2-user/php-bin/
make install
ビルドの時間を計ったら7分弱でした。この間にコーヒーでも飲んでいてください。
Lambda用のファイルを設置
前項でPHPがインストールされましたのでそれを使って、Lambda用のzipファイルを作成します。
先にphp-lambdaというディレクトリを作り、そこにさきほどビルドしたphp-binを移動させます。
cd
mkdir php-lambda
mv php-bin php-lambda/
php-lambdaディレクトリに二つファイルを置くのですが、一つ目はphp.jsファイルです。LambdaからはNode.jsが動くようにしておき、Node.jsからPHPをキックするようにしますので、そのためのJSファイルを設置します。
php-lambda/php.js
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];
const spawn = require('child_process').spawn;
exports.handler = function(event, context) {
var php = spawn('php-bin/bin/php',['helloLambda.php']);
var output = "";
php.stdin.write(JSON.stringify(event));
php.stdin.end();
php.stdout.on('data', function(data) {
output+=data;
});
php.stderr.on('data', function(data) {
console.log("STDERR: "+data);
});
php.on('close', function(code) {
context.succeed(JSON.parse(output));
});
}
二つ目のファイルは、helloLambda.phpファイルです。
php-lambda/helloLambda.php
<?php
$data = stream_get_contents(STDIN);
$json = json_decode($data, true);
$result = json_encode(array('result' => count($json)));
echo $result."\n";
?>
helloLambda.phpファイルでは、標準入力で渡されたJsonをデコードして配列の数を返しています。このファイルを書き換えることでLambdaとしての挙動を変えれらるのでサンプル以外のコードも書きたかったのですが環境構築に時間がかかりすぎました。
zipファイルとしてまとめます。
cd php-lambda
zip -r php-lambda.zip ./
一旦SSH接続を終了して、できたzipファイルを手元の環境に持ってきて完了です。
scp -i <鍵> ec2-user@<IPアドレス>:php-lambda/php-lambda.zip .
AWS LambdaでPHPの実行!
いよいよLambdaとして関数を登録する最後の作業です。AWSコンソール上で図のように関数を作成します。zipファイルのアップロードは関数の作成後行いますのでここではNode.jsをランタイムとして作成を終えてください。
作成された関数の関数コードのところでzipファイルのアップロードを行います。こちらも図のように前項で作ったzipファイルをアップロードして、ハンドラをphp.handlerと記述し保存ボタンを押します。
いよいよ最後になりました。Lambdaのテストを行います。
テストボタンで適当な名前のテストイベント名を付けて、実行してください。helloLambda.phpファイルが正しく実行されれば、下図のようにresultというキーの値が3になって返されれば成功です!
まとめ
PHP7の最新版を使い、AWS Lambdaが試せることが分かりました。ぜひ遊んでみてください。
(今回作成したEC2インスタンスはzipファイルが作成できれば不要になりますので削除を忘れずに。)
Author And Source
この問題について(0から始める!AWS LambdaをPHPでやってみるためのハウツー), 我々は、より多くの情報をここで見つけました https://qiita.com/kyogokutaro/items/f14e715018e825063d7d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .