https://d226lax1qjow5r.cloudfront.net/blog/blogposts/aws-lambda-with-php-using-bref-and-serverless-framework-dr/E_AWS-Lambda_1200x600.png

ブレフとサーバーレスフレームワークを使ったPHPによるAWSラムダ

最終更新日 March 16, 2020

所要時間:5 分

様々なクラウド・プロバイダーが提供するデフォルトのランタイムがないため、以前はサーバーレス環境でPHPを使うことは困難だった。しかし、最近になってライブラリや機能が追加され、PHPの利用がより身近なものになった。

この例では AWS Lambda関数を作成します。 を使用してPHP用のAWS Lambda Functionを作成します。.この例では AWS Lambda Runtime APIの追加と AWS Lambda レイヤーを追加できるようになったことで、PHPカスタムランタイムの作成が容易になった。そのため、Bref のようなパッケージが登場し、PHP 開発者の生活を楽にしている。

前提条件

この例で必要なものは以下の通り:

サーバーレス・フレームワーク

ブレフ ブレフツールは サーバーレス・フレームワークこれは「サーバーレス・アプリケーションの構築と運用のための完全なソリューション」だ。従って、最初のステップは、使用している開発システムにこのフレームワークをインストールすることだ。CLI経由でどこからでも使えるように、グローバルにインストールすることをお勧めする。

npm install -g serverless

AWSクレデンシャル

Serverlessをインストールしたら、Serverlessが様々なAWSサービスとやり取りするために必要なAWS認証情報も設定しておく。(この例では、S3とLambdaのみを使用する。これについては serverless.combref.shで詳しく説明されているので、ここでは割愛する。

ブレフをインストールする

また、Brefを使用する各プロジェクト内の依存関係としてインストールする必要がある。それを念頭に置いて、Composerを使ってプロジェクト・ディレクトリ内からCLIを使ってインストールすることにする。

composer require bref/bref

イニット・ブレフ・プロジェクト

ComposerがプロジェクトにBrefを追加することを最終決定した後、開始する最良の方法は、次のとおりである。 initBrefを使用する。を実行することだ。 initを実行すると、Function関数、HTTP関数、Console関数のどれを希望するかが表示されます。 serverless.ymlが作成されます。 index.phpが作成され、アプリケーションのニーズに合うように編集することができます。

vendor/bin/bref init

YMLファイルの例

例として、以下にサンプルを示します。 serverless.ymlファイルのサンプルです:

service: app

provider:
    name: aws
    region: us-east-1
    runtime: provided

plugins:
    - ./vendor/bref/bref

functions:
    function:
        handler: index.php
        description: ''
        layers:
            - ${bref:layer.php-73}

# Exclude files from deployment
package:
    exclude:
        - 'tests/**'

ファイルの中で、サービスの名前を観察してください。これは、あなたの機能の望ましい命名規則に合わせて変更することができます。デフォルトでは app.

続いて、AWS Lambdaのプロバイダー情報を見ることができる。

あらゆるプラグインのためのセクションがあり、Bref.

次に、関数の詳細を説明するセクションがある。ハンドラ、AWSに追加する説明文、PHPのような必要なレイヤが含まれる。上の例では php-73が指定されていることに注意してください。代わりに HTTP を選択した場合は php-73-fpmを指定し、CLIのみのバージョンのPHPの代わりにWebサーバーをレイヤーに提供する。使用するイメージは initプロセスは、Lambdaが正しいレイヤーを作成するために不可欠です。

AWS Lambdaへのデプロイ

FunctionまたはHTTPのどちらのユースケースでも、デフォルトの initには、AWS Lambda に直接デプロイして Serverless を使ってテストするのに十分なスケルトンが用意されている。先に追加したAWS認証情報の設定を活用して、ServerlessはLambdaに直接デプロイします。 serverless.ymlの内容を基準としてLambdaに直接デプロイします。

serverless deploy

重要重要: サンプルアプリケーションは、そのままでは認証や検証を行いません。配備後に提供される URL にアクセスできる人なら誰でもアクセスできます。そうすることで、お客様のアカウントに予期せぬ請求が発生する可能性があります。そのため、アプリをアクティブにしたままにする場合は、アプリを保護してください。

機能のテスト

関数の場合、テストには2つの方法がある。1つはAWS Consoleを使う方法で、もう1つはデプロイに使ったシステムからCLI経由でServerlessを使う方法だ。

AWSコンソール

AWSコンソールをナビゲートして、ComputeサービスのリストからLambdaの項目を選択します。

AWS Console-Lambda DashboardAWS Console-Lambda Dashboard

Lambdaダッシュボードで、作成した関数を選択し、新しいテストを作成するには、次のようにクリックします。 Configure test events.あるいは Testボタンをクリックしても同じプロンプトが表示されます。

Lambda Function Create Test ExampleLambda Function Create Test Example

作成したスケルトンのテスト用に、名前を追加し、ボディーのJSONを少し変更する。

Configure Lambda Test EventsConfigure Lambda Test Events

ダイアログ下部の Createボタンをクリックすると、テストが実行されます。 Testボタンをクリックしてテストを実行します。実行すると、緑色のダイアログが表示され、結果を表示することができます。

Lambda Test ResultsLambda Test Results

サーバーレス関数の実行

上記のように、Serverless CLIを使用して、ローカル・アプリケーション・ルートから以下のコマンドを使用して関数をテストすることもできます:

serverless invoke -f function --data='{"name": "Adam"}'

結果の例:

Serverless Lambda Function ExecutionServerless Lambda Function Execution

HTTP関数のテスト

代わりにHTTP関数をデプロイした場合、上記の2つのテスト方法は機能しません。代わりに、HTTPクライアントまたは標準ブラウザーを使って、デプロイ出力結果で提供されるURLを使ってテストすることができます。

次のページ

AWS Lambda 関数を作成すれば、さらにコードを追加し、現在利用可能なサーバーレス技術を活用して、より堅牢な PHP アプリを作成し続けることができます。AWS Lambda を使用して Vonage API とサービスを活用するための便利な関数を構築する方法を紹介する今後の投稿に注目してください。

シェア:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam Culpヴォネージの卒業生

アダムは開発者兼コンサルタントで、ウルトラランニング、ブログ、そして指導と支援への飽くなき欲求を持ちながら、他の人々が素晴らしいことを成し遂げるためにテクノロジーを手なずけるのを助けることを楽しんでいる。