PHPをAWS Lambdaで使うためのカスタムランタイム環境を構築する
はじめに
AWS Lambdaを使おうと思った時に、PHPがサポートされていなかったので、カスタムランタイム環境を構築しました。bref(サーバーレス環境でPHPを動かすためのツール)とServerless Frameworkを使って構築します。
構築手順
1.IAMの設定
AWSコンソールよりIAMを開く
①ポリシーの作成
ポリシー名:kuryu-lambda-policy
JSONで、SAMデプロイメントに必要な権限を許可
・CloudFormation
・IAM
・Lambda
・S3
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iam:*",
"s3:*",
"lambda:*",
"cloudformation:*"
],
"Resource": "*"
}
]
}
②ユーザーグループの作成
ユーザーグループ名:kuryu-lambda-user-group
③ユーザーの作成
ユーザー名:kuryu-lambda-user
アクセスキー・シークレットアクセスキーの作成をする
④グループをポリシーにアタッチ
2.ランタイム環境構築
①Composerを使って、brefをインストール
composer require bref/bref
②プロジェクトの初期化
vendor/bin/bref init
以下のメッセージが出力される。brefでは、Webアプリケーション用またはイベントドリブン関数用のLambdaのどちらかを構築するか選択できるので、今回は1を選択する。
What kind of lambda do you want to create? (you will be able to add more functions later by editing `serverless.yml`) [Web application]:
[0] Web application
[1] Event-driven function
ディレクトリ配下に以下ファイルが生成される
- sserverless.yml
- vendor
- async-aws
- ...
- async-aws
- composer.json
- composer.lock
- index.php
③serverless.ymlをSAM用のtemplete.yamlに変更
mv serverless.yml template.yaml
serverless.ymlは、IacツールであるServerless Frameworkで必要となるテンプレートファイルで、今回はAWS SAM(AWSのサービス(Lambda、API Gateway、DynamoDBなど)を使って、サーバーレスアプリケーションを構築できるフレームワーク)を使用するのでserverless.ymlを削除しSAM用のtemplete.yamlを作成
④template.yamlに下記を追加
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Sample SAM Template for handson-bref
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: hello-world-function
CodeUri: .
Runtime: provided.al2
Handler: index.php
MemorySize: 1024
Timeout: 30
Layers:
- arn:aws:lambda:ap-northeast-1:534081306603:layer:php-82:42
※template.yamlのLayersへの記載内容は下記を参照。データセンターとphpバージョンに注意する。
データセンター:ap-northeast-1
PHPバージョン:php8.2 42
を使用
3.AWS SAMの環境構築
Mac に homebrew を使って SAM CLI をインストールする
①AWSパッケージをインストール
brew tap aws/tap
②AWS SAM CLI をインストール
brew install awa-sam-cli
③インストールされているか確認
sam --version
4.デプロイ
①S3バケットの作成
aws s3 mb s3://lambda-bref-kuryu-php-test
②SAM CLIを使用してパッケージングを行う
AWS SAMテンプレートとLambda関数のコードをパッケージングし、デプロイ可能な形式に変換する
sam package
--template-file template.yaml
--output-template-file bref-output.yaml
--s3-bucket lambda-bref-kuryu-php-test
*説明
SAMテンプレート(template.yaml)に基づいて定義されたLambda関数のコードとリソースを、指定されたS3バケット(lambda-bref-kuryu-php-test)にアップロードし、パッケージングされたテンプレートファイル(bref-output.yaml)を作成
③パッケージ化されたAWS SAMアプリケーションをデプロイ
sam deploy
--template-file bref-output.yaml
--stack-name lambda-bref-kuryu-php-test
--capabilities CAPABILITY_IAM
*説明
指定されたパッケージ化されたテンプレートファイル(bref-output.yaml)を使用して、AWS CloudFormationスタックを作成または更新
再デプロイするときは②③を行う
Discussion