こんにちは、サーバーワークスのこけしの人、坂本(@t_sakam)です。
re:Invent 2018のキーノートでLambdaの「Custom Runtimes」と「Layers」が発表されました。これにより、AWS公式での言語サポートではありませんが、パートナーの「Stackery」が公開している「PHP Layer For AWS Lambda」を使うことで、LambdaでPHPが使えるので、簡単に試してみたいと思います。 LambdaとPHPを使って、先日デビューした「New kokexa dot」、通称「ejixa」の画像を動的にランダム表示するページを作ってみたいと思います。
New kokexa dotについてはこちら
http://blog.serverworks.co.jp/tech/2018/11/26/alexa/
手順
「PHP Layer For AWS Lambda」に書いてある手順を参考に、足りないところは足しつつ進めてみます。
PHPをインストール
開発環境のEC2にPHPが入っていませんでしたので、yumでインストールします。バージョンは、7.1です。
$ sudo yum install php71
SAMをインストール
SAMも使ったことがなかったので、インストールします。
$ pip install --user aws-sam-cli
デプロイ用のS3バケットを作成
$ aws s3 mb s3://kokexa-php --region ap-northeast-1
開発用のディレクトリを作成して中へ
$ mkdir kokexa-php $ cd kokexa-php
template.ymlファイル作成
中身は、「PHP Layer For AWS Lambda」に載っているtemplate.ymlそのままです。
$ vim template.yml
AWSTemplateFormatVersion: 2010-09-09 Description: My PHP Application Transform: AWS::Serverless-2016-10-31 Resources: phpserver: Type: AWS::Serverless::Function Properties: FunctionName: !Sub ${AWS::StackName}-phpserver Description: PHP Webserver CodeUri: src/server Runtime: provided Handler: index.php MemorySize: 3008 Timeout: 30 Tracing: Active Layers: - !Sub arn:aws:lambda:${AWS::Region}:887080169480:layer:php71:3 Events: api: Type: Api Properties: Path: /{proxy+} Method: ANY
以下の構造になるようにディレクトリを追加
kokexa-phpディレクトリの構造
├── template.yaml └── src └── server └── index.php
index.phpの作成
$ vim src/server/index.php
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>kokexa-php</title> </head> <body> <h1>New kokexa dot</h1> <?php $url = "https://s3-ap-northeast-1.amazonaws.com/xxx-xxx/"; $img01 = $url . "kokexa_01.jpg"; $img02 = $url . "kokexa_02.jpg"; $img = array($img01, $img02); $rand = rand(0, 1); ?> <img src = <?php echo $img[$rand]; ?>> </body> </html>
「xxx-xxx」というS3バケットにkokexaの画像が2枚置かれているイメージです。この2つをランダムに切り替えます。
デプロイ
$ sam package \ --template-file template.yaml \ --output-template-file serverless-output.yaml \ --s3-bucket kokexa-php $ sam deploy \ --template-file serverless-output.yaml \ --stack-name kokexa-php \ --capabilities CAPABILITY_IAM
アクセス
API Gatewayのマネジメントコンソールで発行されたURLを確認して、アクセスしてみます。 「https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/index.php」にアクセスすると、S3に置かれた2枚のkokexaの画像のどちらかが表示されるようになりました。
まとめ
今回は、「PHP Layer For AWS Lambda」を使って、LambdaでPHPを動かしてみました。これで、新しいkokexa dotの画像を簡単にランダムに表示できるようになりましたね!
PHPはHTMLの中に簡単にコードを入れられるので、今回のようなちょっとした動的ページがこれからはLambdaでサクッと作れますね!
いや〜、「PHP Layer For AWS Lambda」って本当にいいものですね!