Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWSのLambdaで PHPを動かす選択肢

Rinchoku
December 22, 2024

AWSのLambdaで PHPを動かす選択肢

PHP Conference 2024の登壇資料

https://fortee.jp/phpcon-2024/proposal/74c94e3c-a587-47f1-96c8-235d688571eb

Rinchoku

December 22, 2024
Tweet

More Decks by Rinchoku

Other Decks in Programming

Transcript

  1. アジェンダ • 自己紹介 • AWS Lambdaについて • AWS Lambda Web

    Adapterとは • PHPをLambdaで動かす方法 • メリット・デメリット • 最後に
  2. 自己紹介 名前:林 直哉(Rinchoku) 所属:eForce株式会社 X: @stupid_owl 趣味:宝石鑑賞、指輪づくり、個人スポンサー(予定) その他: • SRE

    Kaigi 2025 コアスタッフ @ 2025/1/26(日) • PHPer Kaigi 2025 LT @2025/3/22(土), 3/23(日) • SRE NEXT 2025 コアスタッフ @ 2025/7/11(土), 7/12(日)
  3. AWS Lambda の特徴 • 高可用性・耐障害性 ◦ 1リージョン内で複数のAZに分散 • スケーリング ◦

    負荷状況に応じて自動でインスタンス(VM)の増減を行う ◦ リクエストがない場合はインスタンス(VM)が0 →コストも0
  4. Lambdaが選択肢に上がらない理由 • Lambdaの制限による障壁 ◦ タイムアウト時間(15分) ◦ ファイルサイズ ▪ zipで50MB、展開後250MB以内 ▪

    リクエストとレスポンスにそれぞれ 6 MB • ストリーミング応答や非同期でサイズは変動 • 事例が少ない
  5. Lambdaが選択肢に上がらない理由 • LambdaのランタイムにPHPがない ◦ サポート中の言語 ▪ .Net ▪ Python ▪

    Node.js ▪ Java ※カスタムランタイム(ユーザーが定義した環境)を利用すれば 任意のプログラミング言語を動かせる
  6. Lambdaが選択肢に上がらない理由 Lambdaが送信するイベント HTTP/1.1 200 OK Content-Type: application/json { "TotalCodeSize": 104330022,

    "FunctionCount": 26} { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "body": "{\"TotalCodeSize\": 104330022, \"FunctionCount\": 26}" } HTTPレスポンス
  7. AWS Lambda Web Adapterの使い方 • Zip ◦ Lambda の Layerに追加

    ◦ arn:aws:lambda:${AWS::Region}:753240598075:layer :LambdaAdapterLayerX86:7 • Container Image ◦ Dockerfileに1行追加 ◦ COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0 .5.0 /lambda-adapter /opt/extensions/lambda-adapter
  8. Brefでのデプロイ 1. AWSでデプロイアカウント、ServerlessFrameworkのアカウントを作る 2. npm install -g serverless 3. serverless

    config credentials --provider aws --key "key" --secret "secret" 4. composer require bref/bref bref/laravel-bridge --update-with-dependencies 5. php artisan vendor:publish --tag=serverless-config 6. php artisan config:clear 7. serverless deploy
  9. Brefの注意点 • Serverless Frameworkがデフォルトの設定 ◦ Serverless Frameworkはv4から一部有料化 ◦ AWSのみサポート ◦

    AWS CDKに置き換える手順書はある • CloudFormationを理解していないと、デプロイで躓く ◦ デプロイ時に色々な権限が必要 • API Gatewayのため、タイムアウト時間が30sec ◦ CloudFrontに置き換えたほうが個人的に便利
  10. Lambda Web Adapterのメリット • 安価で高速で始められる ◦ リクエストがない場合、実質コスト0 ◦ Brefにより初期構築時間も少なくできる •

    既存コードの置き換えが不要 • Lambdaのマネージド性を利用できる • スケーリングの意識が不要 • BrefによりInfrastructure as a Codeの障壁が下がる
  11. Lambda Web Adapterのデメリット • Lambdaの制約は残り続ける ◦ ファイルサイズ(S3やECRに移行で防げる) ◦ タイムアウト時間が15分 •

    コールドスタートがあることで、初回のレスポンスが遅い(数十 ~数百msec) ◦ Lambda呼び出し時間の0.5%がコールドスタート
  12. Lambda Web Adapterの使いどころ Good Bad • 社内ツール • Webアプリケーション •

    アクセスピークが存在する サービス • モノリシックアーキテクチャ • AWSのみによる構成 • リアルタイムレスポンスが求 められる • マイクロサービスアーキテク チャ • マルチクラウド • レガシーアプリケーション
  13. 参考 • Lambda ◦ https://tech.nri-net.com/entry/aws_history_and_chronology_all ◦ https://aws.amazon.com/jp/lambda/ ◦ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html#function-code ◦

    https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html ◦ https://docs.aws.amazon.com/ja_jp/lex/latest/dg/lambda-input-response-format.html#using-l ambda-response-format • Lambda Extension ◦ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-extensions.html ◦ https://dev.classmethod.jp/articles/cons-of-lambda-extensions/ ◦ https://lumigo.io/blog/aws-lambda-extensions-what-are-they-and-why-do-they-matter/
  14. 参考 • Lambda Web Adapter ◦ https://github.com/awslabs/aws-lambda-web-adapter ◦ https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/ ◦

    https://github.com/awslabs/aws-lambda-web-adapter ◦ https://speakerdeck.com/tmokmss/aws-lambda-web-adapterwohuo-yong-suruxin-siisabaresunoshi-zhuang-p atan ◦ https://speakerdeck.com/fujiwara3/yapc-hakodate2024 ◦ https://speakerdeck.com/_kensh/web-frameworks-on-lambda • Bref ◦ https://github.com/brefphp/bref ◦ https://bref.sh/docs ◦ https://speakerdeck.com/seike460/php-serverless-pattern