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

LAMPをこじらせてサーバーレスに乗り遅れたPHPerがLambdaに入門してみる

chatii
March 26, 2021

 LAMPをこじらせてサーバーレスに乗り遅れたPHPerがLambdaに入門してみる

chatii

March 26, 2021
Tweet

More Decks by chatii

Other Decks in Programming

Transcript

  1. ちゃちい is 誰 • Twitter: @chatii0079 • PHP4 からの PHPer

    (好きな関数 file() ) • ずっとフリーランスでした • 2月から正社員 (13年振りくらい) • Webエンジニア歴は6年くらい • ずっと受託開発 • #エンジニア募集中 DM待ってる…!! • PHPerKaigi スキー いい機会なので #アイコン変えます
  2. ちゃちい is 誰 • PHPer チャレンジ • 会場のあちこちに隠されたキーワード (トークン) を特設サイトで入力すると得点獲得

    • 2019: 2位 • 1位は #ドメイン駆動設計入門 で有名な成瀬氏 • 成瀬氏 3/28(最終日) 12:30 Track A 「なる せ先生のPHP学~PHP8新機能スペシャル~」 に登場、楽しみですね • 2020: 1位 • 成瀬氏不参加だったのは大きな要因と分析して います • 2021: 無さそう • オンライン開催だからね、しょうがないね • (伏線です) ↑2019 同点2位 ↓2020   1位
  3. ちゃちい is 誰 • 人生初登壇 👏 • LTはPHP勉強会@東京とかで何回か • 話すのもスライド書くのも

    #初心者 なので お手柔らかに🙇 • PHPerKaigi のおかげで PHPer 続けられ ているので感謝 👏 ※ 👏 が表示されたら “88888”を流しましょう
  4. 実際にやってみた • 動いちゃった npm install -g serverless serverless config credentials

    --provider aws --key <key> --secret <secret> composer require bref/bref vendor/bin/bref init serverless deploy
  5. ちゃちい is 誰 • PHPer チャレンジ • 会場のあちこちに隠されたキーワード (トークン) を特設サイトで入力すると得点獲得

    • 2019: 2位 • 1位は #ドメイン駆動設計入門 で有名な成瀬氏 • 成瀬氏 3/28(最終日) 12:30 Track A 「なる せ先生のPHP学~PHP8新機能スペシャル~」 に登場、楽しみですね • 2020: 1位 • 成瀬氏不参加だったのは大きな要因と分析して います • 2021: 無さそう • オンライン開催だからね、しょうがないね • (この話は伏線です) ↑2019 同点2位 ↓2020   1位
  6. 作った👏 • ログインは Auth0 にマカセタ • バックエンドは API Gateway +

    Lambda, DynamoDB • フロントエンドは CloudFront + S3 • コレのために Nuxt.js にも入門した • 少なくとも PHPerKaigi 2021 会期中は動か しておきます
  7. 今の業務・案件の抱える問題 • Rails + PostgreSQL の案件がある • Rubyist は社を去って行った •

    PHPerしかいない会社でRailsを保守運用していかなければならない件 • 経験キャリア的にお鉢が ちゃちい に回ってくる • 想定以上に使われる業務システム • 少なくとも向こう数年ʙ長いと十数年?使われそう • クローズドとは言え、顧客の規模がでかいのででかい
  8. 今の業務・案件の抱える問題 • AWS EC2/RDS の構成 • CPU/メモリ使用率がやばくなってAutoScaling走 りまくったり • Pumaってワーカーがメモリを食い散らかして

    る? • チューニングの勘所がわからない • 推測するな計測せよ、とは言え計測方法… • MとVとCがベッタリになっててツライ • 一部だけVue.jsにしたり • (Bladeさえ書くのキライなんだ) • 何かGemを更新したら動かない puma_worker_killer をGoogle翻訳した様子
  9. サーバーレス is 何? • Wikipedia w αʔόʔϨεɾίϯϐϡʔςΟϯάʢ4FSWFSMFTTDPNQVUJOHʣͱ͸ɺΫϥ΢ υɾϓϩόΠμʔ͕ΞϓϦέʔγϣϯʹඞཁͳϚγϯɾϦιʔεͷׂΓ౰ͯΛ ಈతʹ؅ཧ͠ɺࣄલʹߪೖ͞Εͨ͜ͱʹجͮ͘੥ٻͰ͸ͳ͘ɺ֤ΞϓϦέʔ γϣϯཁٻΛຬͨͨ͢Ίʹ࢖༻͞ΕΔݸʑͷϦιʔεྔʹج͍ͮͨ੥ٻΛߦ͏

    Α͏ͳΫϥ΢υɾίϯϐϡʔςΟϯάͷ࣮ߦϞσϧͰ͋Δɻ<>ϢʔςΟϦ ςΟɾίϯϐϡʔςΟϯάͷҰܗଶͰ͋Δɻ෺ཧαʔόʔ͕ΞϓϦέʔγϣ ϯɾίʔυΛఏڙ͢ΔϢʔβʔͷࢹ఺͔Β׬શʹந৅Խ͞Ε͍ͯΔͨΊɺʮαʔ όʔϨεɾίϯϐϡʔςΟϯάʯͱ͍͏໊લ͕࢖༻͞ΕΔɻ<> https://ja.wikipedia.org/wiki/サーバーレス・コンピューティング より引用
  10. サーバーレス is 何? • AWS w લུ དྷΔ͔΋͠Εͳ͍ϦΫΤετͷͨΊʹ࣮ߦ؀ڥͷ૿ڧΛͨ͠Γɺαʔ όʔͷϝϯςφϯεʹਓతϦιʔε΍࿑ྗΛׂ͘Α͏ͳϏδωεʹ௚઀ͷՁ஋ ΛੜΈग़͞ͳ͍࡞ۀΛݮΒ͍ͯ͘͠ํ๏͸ͳ͍Ͱ͠ΐ͏͔ɻͦΜͳ࿑ྗ͔Β

    ղ์͢ΔͨΊɺ೥ɺ"84͸αʔόʔϨεͷίϯϐϡʔςΟϯάΛ୲͏ αʔϏεɺ"84-BNCEBΛൃද͠·ͨ͠ɻ-BNCEBؔ਺ͰγεςϜΛߏங͢ Δ͜ͱʹΑΓɺαʔόʔͷϓϩϏδϣχϯά΍؅ཧΛ͢Δඞཁ͕ͳ͘ͳΓ· ͢ɻ ޙུ https://aws.amazon.com/jp/builders-flash/202003/awsgeek-serverless/ より引用
  11. AWSのサーバーレスを学習する • まずは Black Belt で概要を掴む • YouTubeでアーカイブが公開されて いて助かる •

    多少古いものも基礎は変わらないはず https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/
  12. AWSのサーバーレスを学習する • DevelopersIO で具体的な手法をしる • 知りたいサービス名で検索 • 検索ボックスが無くなってた • Googleで

    
 site:dev.classmethod.jp 
 を付けて検索 • Re:Inventの速報も確認したり • 怒濤のごとく新しいサービスや機能追 加がされてる クラスメソッドさんありがとう
  13. AWSのサーバーレスを学習する • AWS Lambda • PHPはサポートしていないが カスタムランタイム なるものでPHPも動かせる • Bref

    というカスタムランタイムがあるらしい • API Gateway • Lambda を Web API として動かす • CloudFront + S3 • クローズドな業務システムなのでSSRしない • フロントエンドはS3で配信しよう
  14. AWSのサーバーレスを学習する • Amazon Aurora Serverless / RDS Proxy • Auroraまでもがサーバーレス…だと…!?

    • 現時点(2021/2)では v2 がプレビュー公開 • プレビューに入門するのは控えておこう… • RDS Proxy は Lambda からRDSを使う時に必須 • RDSへ直接つなぐとコネクションが足りなくなる • AWS DynamoDB • 時代は NoSQL なんでしょう?
  15. AWSのサーバーレスを学習する • LAMPの代わりはこれでできそう • OSの存在は気にしない • Webサーバーの代わりにAPI Gateway & CloudFront

    • MySQLの代わりにDynamoDB • PHPはLambda (カスタムランタイム)で動く • これで保守管理しなくてよさそうだな! • フラグじゃないんだからねっ • すでに実践されている方は ( ´д)ヒソ(´д`)ヒソ(д` ) とコメント
  16. サーバーレスで作った感想 • EC2もRDSも立ち上がってないからコストがかからないね! • EC2(t3.large) + Aurora (t2.small) + αざっくり見積

    • API Gateway, Lambda, DynamoDB, S3ざっくり見積 • みんなが遊ばなければ実質タダでは #年間です
  17. 入門のその先へ • API Gateway のルートごとに Lambda 関数を分ける • Laravel がルーティングするのはモノリシックじゃない?

    • “そのコード、フレームワークの外でも動きますか?” • @77web さんの発表を楽しみにしてます • 2021/03/28 10:50ʙ Track B
  18. 入門のその先へ • バッチ処理ってどうするの? • Lambda は実行時間 15分 の制限 • Fargate

    使うのかしら… • “Laravelプロダクト Fargate化への道” • @sogaoh さんの発表を楽しみにしてます • 2021/03/28 17:10ʙ (LT)
  19. 入門のその先へ • コンテナイメージでのLambdaの実行 • AWSのブログにちゃんと書いてある • “Building PHP Lambda functions

    with Docker container images” • https://aws.amazon.com/jp/blogs/compute/building-php-lambda- functions-with-docker-container-images/