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

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

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

Df065863f38c6268cb70ed44b2e2f5b4?s=128

Taichi Inaba

March 26, 2021
Tweet

Transcript

  1. LAMPを こじらせて サーバーレスに 乗り遅れた PHPerが Lambdaに 入門してみる ちゃちい PHPerKaigi 2021

    2021-03-26 17:30 Track A
  2. ちゃちい is 誰 • Twitter: @chatii0079 • PHP4 からの PHPer

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

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

    #初心者 なので お手柔らかに🙇 • PHPerKaigi のおかげで PHPer 続けられ ているので感謝 👏 ※ 👏 が表示されたら “88888”を流しましょう
  5. アジェンダ • 実際にやってみた • LAMPエンジニアのなやみ • 今の業務・案件が抱える問題 • 入門してみよう

  6. 話さないこと • 具体的なコードや設定方法・内容 • PHPのコードは出てきません • アーキテクチャやベストプラクティスの話 • 入門なので •

    本番でのメリット/デメリット/トラブル事例 • 入門なので…本番運用はまだ…
  7. 実際にやってみた

  8. 実際にやってみた • Bref という Lambda のカスタムランタイムを使ってみる • https://bref.sh/ • 読み方は

    ブレフ (say -v Alex bref)
  9. 実際にやってみた • 動いちゃった npm install -g serverless serverless config credentials

    --provider aws --key <key> --secret <secret> composer require bref/bref vendor/bin/bref init serverless deploy
  10. 実際にやってみた • Laravel 追加して動かしてみよう composer require laravel/laravel hoge • serverless.yml

    の functions.api.handler を public/index.php に • 動いちゃった
  11. サーバーレス入門、完!!👏

  12. そんなわけにもいかないので 何か作ろう

  13. 何か…

  14. 何がいいかな…

  15. ちゃちいといえば…

  16. ちゃちい is 誰 • PHPer チャレンジ • 会場のあちこちに隠されたキーワード (トークン) を特設サイトで入力すると得点獲得

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

  18. PHPerチャレンジに似たものを 作ってみます

  19. 納期(登壇収録日)の関係上 Laravel でサクッと #できなかった

  20. 作った👏 • https://phperkaigi2021.chatii.net • 突貫なのでいろいろアレ(言い訳 • ぼくのブログやこのスライドにトークンがちり ばめられてます • 他、PHPに関係するキーワードをランダムに

    • 合計1000個登録してます
  21. 作った👏 • ログインは Auth0 にマカセタ • バックエンドは API Gateway +

    Lambda, DynamoDB • フロントエンドは CloudFront + S3 • コレのために Nuxt.js にも入門した • 少なくとも PHPerKaigi 2021 会期中は動か しておきます
  22. LAMPエンジニアのなやみ

  23. LAMPエンジニアのなやみ • 業務が「LAMP環境のみ」の方はどれほどいらっしゃいますか? • コメント「ノ」で挙手してくれたら

  24. LAMPエンジニアのなやみ • 事前収録なので挙手してもらいましたが反応できませんね😇 • LAMPしかやっていないけどサーバーレスもやってみたい • そんな(いるかどうかわからない)アナタへのトークです • 一緒に入門しましょう! •

    (業務に採用できるまでのアレコレとかは大変なトコロもありそう…)
  25. LAMPエンジニアのなやみ • #個人の感想です • 大抵の要件は満たせる • 受託だし • LAMPはモダン(OR 流行)ではないかもしれない

    • ここがこじらせポイント • でも仕事できてるし
  26. 今の業務・案件の抱える問題

  27. 今の業務・案件の抱える問題 • 特定の技術や技術スタックやフレームワークをDISるつもりはありません

  28. 今の業務・案件の抱える問題 • Rails + PostgreSQL の案件がある • Rubyist は社を去って行った •

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

    る? • チューニングの勘所がわからない • 推測するな計測せよ、とは言え計測方法… • MとVとCがベッタリになっててツライ • 一部だけVue.jsにしたり • (Bladeさえ書くのキライなんだ) • 何かGemを更新したら動かない puma_worker_killer をGoogle翻訳した様子
  30. 今の業務・案件の抱える問題 • メンバーが触れるPHPにしなくては • ぼくの稼働が吸い取られ続ける • インフラの面倒まで見てられない

  31. 時代はサーバーレスらしい?

  32. 入門してみよう 重い腰をあげて

  33. サーバーレス is 何?

  34. サーバーレス is 何? • Wikipedia w αʔόʔϨεɾίϯϐϡʔςΟϯάʢ4FSWFSMFTTDPNQVUJOHʣͱ͸ɺΫϥ΢ υɾϓϩόΠμʔ͕ΞϓϦέʔγϣϯʹඞཁͳϚγϯɾϦιʔεͷׂΓ౰ͯΛ ಈతʹ؅ཧ͠ɺࣄલʹߪೖ͞Εͨ͜ͱʹجͮ͘੥ٻͰ͸ͳ͘ɺ֤ΞϓϦέʔ γϣϯཁٻΛຬͨͨ͢Ίʹ࢖༻͞ΕΔݸʑͷϦιʔεྔʹج͍ͮͨ੥ٻΛߦ͏

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

    ղ์͢ΔͨΊɺ೥ɺ"84͸αʔόʔϨεͷίϯϐϡʔςΟϯάΛ୲͏ αʔϏεɺ"84-BNCEBΛൃද͠·ͨ͠ɻ-BNCEBؔ਺ͰγεςϜΛߏங͢ Δ͜ͱʹΑΓɺαʔόʔͷϓϩϏδϣχϯά΍؅ཧΛ͢Δඞཁ͕ͳ͘ͳΓ· ͢ɻ ޙུ https://aws.amazon.com/jp/builders-flash/202003/awsgeek-serverless/ より引用
  36. サーバーレス is 何? • GCP w (PPHMF$MPVEͷαʔόʔϨεϓϥοτϑΥʔϜͰ͸ɺؔ਺΍ΞϓϦέʔγϣ ϯΛιʔείʔυ΍ίϯςφͱͯ͠Ϗϧυɺ։ൃɺσϓϩΠͰ͖·͢ɻ·ͨɺ ΠϯϑϥετϥΫνϟ؅ཧ͕·ͬͨ͘ෆཁͳͨΊɺ։ൃ࡞ۀ΋γϯϓϧʹͳΓ ·͢ɻ

    https://cloud.google.com/serverless?hl=ja より引用
  37. サーバーレス is 何? • 共通して伝えていること • サーバー・インフラの管理を行わなくてよい • 抽象化されているため アプリケーションエンジニアに必要な知識は

    ア プリケーションを動かす方法だけ
  38. 今の業務・案件の抱える問題 • メンバーが触れるPHPにしなくては • ぼくの稼働が吸い取られ続ける • インフラの面倒まで見てられない (再掲)

  39. 時代はサーバーレスだ!!

  40. 時代はサーバーレスだ!! • 個人的感想です • 別の新規案件(同じ顧客)がLAMP構成ではまかなえない要件 • 前哨戦の意味もかねて • ゼロベースで作れる案件がたまたまあるのは運がいい •

    いきなりリプレースはきつそう • AWSやっていき • AWSの使用が要件に含まれている
  41. AWSのサーバーレスを学習する

  42. AWSのサーバーレスを学習する • 世界中の国の数(196)よりも多いAWSのサービス群 • 205個 • 参考: https://dev.classmethod.jp/articles/aws-summary-2021/ • ちゃちいは次の流れで学習してみました

  43. AWSのサーバーレスを学習する • まずは Black Belt で概要を掴む • YouTubeでアーカイブが公開されて いて助かる •

    多少古いものも基礎は変わらないはず https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/
  44. AWSのサーバーレスを学習する • AWSドキュメントを眺める • 一次ソースではあるのでドキュメ ントの読み方のコツを • メニューの構成とか • 機械翻訳つらい、英語つらい

    • (Cmd+C*2) DeepL 多用 ぴえん
  45. AWSのサーバーレスを学習する • DevelopersIO で具体的な手法をしる • 知りたいサービス名で検索 • 検索ボックスが無くなってた • Googleで

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

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

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

    • MySQLの代わりにDynamoDB • PHPはLambda (カスタムランタイム)で動く • これで保守管理しなくてよさそうだな! • フラグじゃないんだからねっ • すでに実践されている方は ( ´д)ヒソ(´д`)ヒソ(д` ) とコメント
  49. サーバーレスで作った感想

  50. サーバーレスで作った感想 • デモを作っている間 サーバーの事を気にしていなかった • 「サーバーレス入門の話するんだよな…なんでLaravelのトラブル シュートしてるんだ…」 • サーバーのセットアップや維持管理を気にしなくて良くて精神衛生上とて も良い

    • サーバーレス構築はすんなり、先人たちに感謝 👏
  51. サーバーレスで作った感想 • EC2もRDSも立ち上がってないからコストがかからないね! • EC2(t3.large) + Aurora (t2.small) + αざっくり見積

    • API Gateway, Lambda, DynamoDB, S3ざっくり見積 • みんなが遊ばなければ実質タダでは #年間です
  52. 入門のその先へ

  53. 入門のその先へ • API Gateway のルートごとに Lambda 関数を分ける • Laravel がルーティングするのはモノリシックじゃない?

    • “そのコード、フレームワークの外でも動きますか?” • @77web さんの発表を楽しみにしてます • 2021/03/28 10:50ʙ Track B
  54. 入門のその先へ • X-Ray を組み込む • AWSコンソールからX-Rayを始めようとするとPHPが選択肢に無い • そりゃそうじゃ • aws-php-sdk

    には XRayClient はあるのでできそう
  55. 入門のその先へ • (モノシリックと言った上で) Laravel Livewire をLambdaに載せてみたい • “Laravel Livewire でアプリケーションを作成した話”

    • @localdisk さんの発表を楽しみにしてます • 2021/03/27 10:50ʙ Track B
  56. 入門のその先へ • デプロイ方法の模索 • “プログラマ三大美徳を実現するデプロイフローを目指して” • @yamotuki さんの発表を楽しみにしてます • 2021/03/28

    14:10ʙ Track B
  57. 入門のその先へ • バッチ処理ってどうするの? • Lambda は実行時間 15分 の制限 • Fargate

    使うのかしら… • “Laravelプロダクト Fargate化への道” • @sogaoh さんの発表を楽しみにしてます • 2021/03/28 17:10ʙ (LT)
  58. 入門のその先へ • コンテナイメージでの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/
  59. 入門のその先へ • セキュリティ • サーバーレスならではの対応? https://twitter.com/Typhon666_death/status/1360949401397518338

  60. LAMPエンジニアが サーバーレスに 入門した結果

  61. 結果 • LAMPエンジニアの知見は必ず活きる • 抽象化されたもの「だけ」しかしらないよりも • 具象の理解は助けになる • LAMPエンジニア/経験者こそ恩恵が理解できる •

    クラウドはどれもそう…基礎は知っておこう • 「はい」
  62. #ご静聴ありがとうございました 🙇 👏👏👏

  63. Special Thanks • 表紙絵・挿絵 @MatsuP8 👏