クラウド、レンタルサーバ、SEO、WPなどのレシピを!

サーバーレシピ

AWS WEBアプリ

ゼロから始める、AWS サーバーレス PHP版。PHP for Lambda

投稿日:

新しいAMIイメージ「Amazon Linux 2」をベースにゼロから、「PHP for Lambda」な
サーバーレス環境 samを作りたいと思います。

AWS Lambdaとは

https://aws.amazon.com/jp/lambda/
EC2などのサーバー環境を考えずに、プログラムコードだけを配置するだけで、プログラムが動きます。
使っていないときは料金がかかりません。プログラムが動作するミリ秒単位で課金されます。
処理の重たいときには、自動的にスケールアップされます。

AWS samとは

AWS SAMとは、「AWS Serverless Application Model」の略で、サーバーレスな環境を構築するためのフレームワークの事です。
Lambda,API Gateway,DynamoDBなどを管理できます。
そして、「AWS CloudFormation」の拡張版でもあります。

AWS sam CLI とは

今回、samを利用するにあたり、CLI(Command Line Interface)を利用します。
Windows,Linux,Macなどのコマンドラインから、AWSの環境を構築します。

Amazon Linux 2 初期設定

↑ライブラリなどの初期設定をします。

↑php 7.1を入れます。

↑ pipが入りました。

AWS sam CLI インストール

「/root/.local」と返ってきます。
上記の
/root/.lcoal
に「/bin/」を加えて、環境変数PATHに加えます。

↑.bash_profileの「PATH」を変更して、「source」コマンドで再読み込みをします。

↑ AWS SAM CLIが入りました。

Lambda用プロファイルの登録

AWS Iamで、Lambda用のプロファイルを作成します。

S3のフルアクセスで、設定をします。
「AWS Access Key ID」
「AWS Secret Access Key」
を、aws コマンドで設定します。

↑リージョンは、東京「ap-northeast-1」を指定します。

S3 バケット登録

↑バケット名を指定しますが、世界で一意でなければいけません。既に使われているバケット名だと上記のようにエラーになります。
「–profile」で「プロファイル名」を指定します。
デフォルトで指定する方法や、環境変数で指定する方法もありますが、次回の機会に。

↑ と、登録されました。

Lambda 登録

https://github.com/stackery/php-lambda-layer
にあるtemplate.yamlを、そのまま使います。

↑上記が、実行するPHPです。

↑パッケージ化されました。

↑deployします。

というエラーが出ました。

「cloudformation:CreateChangeSet」
をしようとしたが、指定のプロファイル名では、「権限が無いよ」という事です。

ポリシーの作成

Iamにて

AWSCloudFormationPolicy
という名称で、ポリシーを登録します。

↑「Iam」の画面で、「ポリシー」「ポリシーの作成」を選びます。

↑「JSON」のタブを選びます。

↑上記の赤枠に、↓下記のJOSNを貼り付けます。

↑名前を決めて、「Create policy」を押します。

↑Policyが作成されました。

ポリシーをアタッチ

(プロファイル名)で指定したIamユーザにアタッチします。

↑プロファイル名で指定したユーザの「アクセス権限の追加」というボタンを押します。

↑右上、「既存のポリシーを直接アタッチ」を選び、「ポリシーのフィルタ」の横にポリシー名を入れて、出てきたポリシーをチェックし、右下の「次のステップ:確認」を選びます。

↑「アクセス権限の追加」を選びます。

↑アタッチされました。

deployのエラー

↑再度、deployします。

↑「Failed」となり、失敗

# aws cloudformation describe-stack-events –stack-name (バケット名)
というコマンドで、詳細をみてね。

というメッセージ。

CLIのコマンドラインでみるより、画面で、見た方がいいかもしれません。

↑「CloudFormation」に入ります。

↑エラーになっているとこの右側のメッセージを、よーく見ます。

図とは、違いますが、
is not authorized to perform: iam:DetachRolePolicy
というエラーメッセージが出ていました。

さきほどの
AWSCloudFormationPolicy
のポリシーに、
iam:DetachRolePolicy
を加えます。
そのほか、たくさんエラーが出ました(汗)

ポリシーの追加

結局

と、4つのポリシーが必要でした。

再度、deploy

↑deploy、成功をしました。

phpプログラムへのアクセス

↑API gatewayからアクセスをします。

↑deployした、APIをクリックします。

↑「ダッシュボード」を選びます。

↑「このAPIを次から呼び出します」というところのURLをクリックします。

↑URLに「index.php」を加えて、アクセスします。

すると、設置したPHPが動作します。

PHP for Lambda 結論

「PHP for Lambda」は、最初は、時間がかかるかもしれません。
サーバーレスであるので、サーバー利用料を削減できる可能性が高くなります。
節約できるのであれば、節約をしたほうがイイですね。
サーバーレスのLamdaをもっと勉強して、楽しいクラウド生活を送りたい思います!

-AWS, WEBアプリ

Copyright© サーバーレシピ , 2019 All Rights Reserved.