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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for chatii chatii
March 26, 2021

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

Avatar for chatii

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/