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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Rinchoku Rinchoku
December 22, 2024

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

Avatar for Rinchoku

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