Dockerを使用したPHPのLambda環境の構築

はじめに

AWS LambdaでPHPは使用できないのですが、どうしてもPHPで実装する必要があったのでAWSのドキュメントを見ながら作成しました。Amazon Linux 2023のDockerImageを使用してPHPのLambdaとして動く環境を構築します。

参考にしたURL:
コンテナ Lambda をカスタマイズして、自分好みの PHP イメージを作ろう !
Docker コンテナイメージを使用した PHP Lambda 関数の構築

環境構築

①DockerDesktopをインストール

②VSCodeインストール

③VSCodeにDocker関係の拡張機能インストール

私の環境は①~③はインストール済みだったので問題はなかったです。ローカル環境にPHPはインストール不要です。

ファイルは4ファイル作成します。

Dockerfile Dockerコンテナ上でPHPを動かす環境
docker-compose.yml Docker-composeの設定ファイル
bootstrap Lambdaの起動ファイル
app.php Lambdaの処理内容(本体)

まずDockerfileを準備します。参考にしたURLではAmazonLinux2、PHP7.4で構築していましたが、どうせなら新しいほうがいいなと思いAmazonLinux2023、PHP8.3で構築します。PHPのインストール、composerのインストール、guzzelのインストールをしています。その後、ローカル環境からDocker環境へのファイル(ファイルに関しては後述)のコピーになります。最後の1行のCMD [ “app.handler” ]ですが、app.phpのhandler()関数を呼び出しています。

docker-compose.ymlは本来は不要で私はdocker-composeで動かすために作成しました。Lambdaは1台のサーバーで済むのでdocker-composeは不要です。

次にapp.php。今回はPHPで受け取ったjsonのHMAC-SHA256を出力する関数を作りました。

最後にbootstrapを作成します。これはこのDockerがLambdaとして動作するためのファイルになります。参考にしたURLにあるbootstrapそのままで動きます。1点注意なのがbootstrapのはじめにGuzzleの読み込みを行うのでそのディレクトリだけDockerfileと合わせる必要があります。今回の場合は/opt/vendorがそれにあたります。

動作確認

VSCodeのターミナルを開いて以下のコマンドでコンテナを作成し、起動します。

コンテナ内でOSの確認とPHPのバージョンの確認をします。

HTTPリクエストを出して応答を確認します。VSCodeの拡張機能「REST Client」を使用してGETリクエストとPOSTリクエストを出してみます。

期待通りGETリクエストに対しては404 Not Found、POSTリクエストに対しては200 OKで渡したJSONに対するハッシュ値が帰ってきています。

おわりに

今回はDockerを使用してAWS LambdaのPHPで動作する環境を構築しました。あとはAmazonECRにプッシュしてLambdaをデプロイしてあげるとAWS Lambda上で動くようになります。

また今回はGuzzleを使用しましたが、BrefやLaravelを使ったやり方もあるようです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です