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. LAMPを

    こじらせて

    サーバーレスに

    乗り遅れた
    PHPerが

    Lambdaに

    入門してみる
    ちゃちい
    PHPerKaigi 2021

    2021-03-26 17:30 Track A

    View full-size slide

  2. ちゃちい is 誰
    • Twitter: @chatii0079

    • PHP4 からの PHPer (好きな関数 file() )

    • ずっとフリーランスでした

    • 2月から正社員 (13年振りくらい)

    • Webエンジニア歴は6年くらい

    • ずっと受託開発

    • #エンジニア募集中 DM待ってる…!!

    • PHPerKaigi スキー
    いい機会なので

    #アイコン変えます

    View full-size slide

  3. ちゃちい is 誰
    • PHPer チャレンジ

    • 会場のあちこちに隠されたキーワード (トークン)
    を特設サイトで入力すると得点獲得

    • 2019: 2位

    • 1位は #ドメイン駆動設計入門 で有名な成瀬氏

    • 成瀬氏 3/28(最終日) 12:30 Track A 「なる
    せ先生のPHP学~PHP8新機能スペシャル~」
    に登場、楽しみですね

    • 2020: 1位

    • 成瀬氏不参加だったのは大きな要因と分析して
    います

    • 2021: 無さそう

    • オンライン開催だからね、しょうがないね

    • (伏線です)
    ↑2019 同点2位

    ↓2020   1位

    View full-size slide

  4. ちゃちい is 誰
    • 人生初登壇 👏

    • LTはPHP勉強会@東京とかで何回か

    • 話すのもスライド書くのも #初心者 なので
    お手柔らかに🙇

    • PHPerKaigi のおかげで PHPer 続けられ
    ているので感謝 👏
    ※ 👏 が表示されたら “88888”を流しましょう

    View full-size slide

  5. アジェンダ
    • 実際にやってみた

    • LAMPエンジニアのなやみ

    • 今の業務・案件が抱える問題

    • 入門してみよう

    View full-size slide

  6. 話さないこと
    • 具体的なコードや設定方法・内容

    • PHPのコードは出てきません

    • アーキテクチャやベストプラクティスの話

    • 入門なので

    • 本番でのメリット/デメリット/トラブル事例

    • 入門なので…本番運用はまだ…

    View full-size slide

  7. 実際にやってみた

    View full-size slide

  8. 実際にやってみた
    • Bref という Lambda のカスタムランタイムを使ってみる

    • https://bref.sh/


    • 読み方は ブレフ (say -v Alex bref)

    View full-size slide

  9. 実際にやってみた
    • 動いちゃった
    npm install -g serverless


    serverless config credentials --provider aws --key --secret


    composer require bref/bref


    vendor/bin/bref init


    serverless deploy

    View full-size slide

  10. 実際にやってみた
    • Laravel 追加して動かしてみよう
    composer require laravel/laravel hoge
    • serverless.yml の functions.api.handler を public/index.php に

    • 動いちゃった

    View full-size slide

  11. サーバーレス入門、完!!👏

    View full-size slide

  12. そんなわけにもいかないので

    何か作ろう

    View full-size slide

  13. 何がいいかな…

    View full-size slide

  14. ちゃちいといえば…

    View full-size slide

  15. ちゃちい is 誰
    • PHPer チャレンジ

    • 会場のあちこちに隠されたキーワード (トークン)
    を特設サイトで入力すると得点獲得

    • 2019: 2位

    • 1位は #ドメイン駆動設計入門 で有名な成瀬氏

    • 成瀬氏 3/28(最終日) 12:30 Track A 「なる
    せ先生のPHP学~PHP8新機能スペシャル~」
    に登場、楽しみですね

    • 2020: 1位

    • 成瀬氏不参加だったのは大きな要因と分析して
    います

    • 2021: 無さそう

    • オンライン開催だからね、しょうがないね

    • (この話は伏線です)
    ↑2019 同点2位

    ↓2020   1位

    View full-size slide

  16. PHPerチャレンジ!!
    #伏線回収

    View full-size slide

  17. PHPerチャレンジに似たものを

    作ってみます

    View full-size slide

  18. 納期(登壇収録日)の関係上

    Laravel でサクッと
    #できなかった

    View full-size slide

  19. 作った👏
    • https://phperkaigi2021.chatii.net


    • 突貫なのでいろいろアレ(言い訳

    • ぼくのブログやこのスライドにトークンがちり
    ばめられてます

    • 他、PHPに関係するキーワードをランダムに

    • 合計1000個登録してます

    View full-size slide

  20. 作った👏
    • ログインは Auth0 にマカセタ

    • バックエンドは API Gateway + Lambda,
    DynamoDB

    • フロントエンドは CloudFront + S3

    • コレのために Nuxt.js にも入門した

    • 少なくとも PHPerKaigi 2021 会期中は動か
    しておきます

    View full-size slide

  21. LAMPエンジニアのなやみ

    View full-size slide

  22. LAMPエンジニアのなやみ
    • 業務が「LAMP環境のみ」の方はどれほどいらっしゃいますか?

    • コメント「ノ」で挙手してくれたら

    View full-size slide

  23. LAMPエンジニアのなやみ
    • 事前収録なので挙手してもらいましたが反応できませんね😇

    • LAMPしかやっていないけどサーバーレスもやってみたい

    • そんな(いるかどうかわからない)アナタへのトークです

    • 一緒に入門しましょう!

    • (業務に採用できるまでのアレコレとかは大変なトコロもありそう…)

    View full-size slide

  24. LAMPエンジニアのなやみ
    • #個人の感想です

    • 大抵の要件は満たせる

    • 受託だし

    • LAMPはモダン(OR 流行)ではないかもしれない

    • ここがこじらせポイント

    • でも仕事できてるし

    View full-size slide

  25. 今の業務・案件の抱える問題

    View full-size slide

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

    View full-size slide

  27. 今の業務・案件の抱える問題
    • Rails + PostgreSQL の案件がある

    • Rubyist は社を去って行った

    • PHPerしかいない会社でRailsを保守運用していかなければならない件

    • 経験キャリア的にお鉢が ちゃちい に回ってくる

    • 想定以上に使われる業務システム

    • 少なくとも向こう数年ʙ長いと十数年?使われそう

    • クローズドとは言え、顧客の規模がでかいのででかい

    View full-size slide

  28. 今の業務・案件の抱える問題
    • AWS EC2/RDS の構成

    • CPU/メモリ使用率がやばくなってAutoScaling走
    りまくったり

    • Pumaってワーカーがメモリを食い散らかして
    る?

    • チューニングの勘所がわからない

    • 推測するな計測せよ、とは言え計測方法…

    • MとVとCがベッタリになっててツライ

    • 一部だけVue.jsにしたり

    • (Bladeさえ書くのキライなんだ)

    • 何かGemを更新したら動かない
    puma_worker_killer をGoogle翻訳した様子

    View full-size slide

  29. 今の業務・案件の抱える問題
    • メンバーが触れるPHPにしなくては

    • ぼくの稼働が吸い取られ続ける

    • インフラの面倒まで見てられない

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  32. サーバーレス is 何?

    View full-size slide

  33. サーバーレス is 何?
    • Wikipedia

    w αʔόʔϨεɾίϯϐϡʔςΟϯάʢ4FSWFSMFTTDPNQVUJOHʣͱ͸ɺΫϥ΢
    υɾϓϩόΠμʔ͕ΞϓϦέʔγϣϯʹඞཁͳϚγϯɾϦιʔεͷׂΓ౰ͯΛ
    ಈతʹ؅ཧ͠ɺࣄલʹߪೖ͞Εͨ͜ͱʹجͮ͘੥ٻͰ͸ͳ͘ɺ֤ΞϓϦέʔ
    γϣϯཁٻΛຬͨͨ͢Ίʹ࢖༻͞ΕΔݸʑͷϦιʔεྔʹج͍ͮͨ੥ٻΛߦ͏
    Α͏ͳΫϥ΢υɾίϯϐϡʔςΟϯάͷ࣮ߦϞσϧͰ͋Δɻ<>ϢʔςΟϦ
    ςΟɾίϯϐϡʔςΟϯάͷҰܗଶͰ͋Δɻ෺ཧαʔόʔ͕ΞϓϦέʔγϣ
    ϯɾίʔυΛఏڙ͢ΔϢʔβʔͷࢹ఺͔Β׬શʹந৅Խ͞Ε͍ͯΔͨΊɺʮαʔ
    όʔϨεɾίϯϐϡʔςΟϯάʯͱ͍͏໊લ͕࢖༻͞ΕΔɻ<>
    https://ja.wikipedia.org/wiki/サーバーレス・コンピューティング より引用

    View full-size slide

  34. サーバーレス is 何?
    • AWS

    w લུ
    དྷΔ͔΋͠Εͳ͍ϦΫΤετͷͨΊʹ࣮ߦ؀ڥͷ૿ڧΛͨ͠Γɺαʔ
    όʔͷϝϯςφϯεʹਓతϦιʔε΍࿑ྗΛׂ͘Α͏ͳϏδωεʹ௚઀ͷՁ஋
    ΛੜΈग़͞ͳ͍࡞ۀΛݮΒ͍ͯ͘͠ํ๏͸ͳ͍Ͱ͠ΐ͏͔ɻͦΜͳ࿑ྗ͔Β
    ղ์͢ΔͨΊɺ೥ɺ"84͸αʔόʔϨεͷίϯϐϡʔςΟϯάΛ୲͏
    αʔϏεɺ"84-BNCEBΛൃද͠·ͨ͠ɻ-BNCEBؔ਺ͰγεςϜΛߏங͢
    Δ͜ͱʹΑΓɺαʔόʔͷϓϩϏδϣχϯά΍؅ཧΛ͢Δඞཁ͕ͳ͘ͳΓ·
    ͢ɻ ޙུ

    https://aws.amazon.com/jp/builders-flash/202003/awsgeek-serverless/ より引用

    View full-size slide

  35. サーバーレス is 何?
    • GCP

    w (PPHMF$MPVEͷαʔόʔϨεϓϥοτϑΥʔϜͰ͸ɺؔ਺΍ΞϓϦέʔγϣ
    ϯΛιʔείʔυ΍ίϯςφͱͯ͠Ϗϧυɺ։ൃɺσϓϩΠͰ͖·͢ɻ·ͨɺ
    ΠϯϑϥετϥΫνϟ؅ཧ͕·ͬͨ͘ෆཁͳͨΊɺ։ൃ࡞ۀ΋γϯϓϧʹͳΓ
    ·͢ɻ
    https://cloud.google.com/serverless?hl=ja より引用

    View full-size slide

  36. サーバーレス is 何?
    • 共通して伝えていること

    • サーバー・インフラの管理を行わなくてよい

    • 抽象化されているため アプリケーションエンジニアに必要な知識は ア
    プリケーションを動かす方法だけ

    View full-size slide

  37. 今の業務・案件の抱える問題
    • メンバーが触れるPHPにしなくては

    • ぼくの稼働が吸い取られ続ける

    • インフラの面倒まで見てられない
    (再掲)

    View full-size slide

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

    View full-size slide

  39. 時代はサーバーレスだ!!
    • 個人的感想です

    • 別の新規案件(同じ顧客)がLAMP構成ではまかなえない要件

    • 前哨戦の意味もかねて

    • ゼロベースで作れる案件がたまたまあるのは運がいい

    • いきなりリプレースはきつそう

    • AWSやっていき

    • AWSの使用が要件に含まれている

    View full-size slide

  40. AWSのサーバーレスを学習する

    View full-size slide

  41. AWSのサーバーレスを学習する
    • 世界中の国の数(196)よりも多いAWSのサービス群

    • 205個

    • 参考: https://dev.classmethod.jp/articles/aws-summary-2021/

    • ちゃちいは次の流れで学習してみました

    View full-size slide

  42. AWSのサーバーレスを学習する
    • まずは Black Belt で概要を掴む

    • YouTubeでアーカイブが公開されて
    いて助かる

    • 多少古いものも基礎は変わらないはず
    https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/

    View full-size slide

  43. AWSのサーバーレスを学習する
    • AWSドキュメントを眺める

    • 一次ソースではあるのでドキュメ
    ントの読み方のコツを

    • メニューの構成とか

    • 機械翻訳つらい、英語つらい

    • (Cmd+C*2) DeepL 多用 ぴえん

    View full-size slide

  44. AWSのサーバーレスを学習する
    • DevelopersIO で具体的な手法をしる

    • 知りたいサービス名で検索

    • 検索ボックスが無くなってた

    • Googleで

    site:dev.classmethod.jp

    を付けて検索

    • Re:Inventの速報も確認したり

    • 怒濤のごとく新しいサービスや機能追
    加がされてる
    クラスメソッドさんありがとう

    View full-size slide

  45. AWSのサーバーレスを学習する
    • AWS Lambda

    • PHPはサポートしていないが カスタムランタイム なるものでPHPも動かせる

    • Bref というカスタムランタイムがあるらしい

    • API Gateway

    • Lambda を Web API として動かす

    • CloudFront + S3

    • クローズドな業務システムなのでSSRしない

    • フロントエンドはS3で配信しよう

    View full-size slide

  46. AWSのサーバーレスを学習する
    • Amazon Aurora Serverless / RDS Proxy

    • Auroraまでもがサーバーレス…だと…!?

    • 現時点(2021/2)では v2 がプレビュー公開

    • プレビューに入門するのは控えておこう…

    • RDS Proxy は Lambda からRDSを使う時に必須

    • RDSへ直接つなぐとコネクションが足りなくなる

    • AWS DynamoDB

    • 時代は NoSQL なんでしょう?

    View full-size slide

  47. AWSのサーバーレスを学習する
    • LAMPの代わりはこれでできそう

    • OSの存在は気にしない

    • Webサーバーの代わりにAPI Gateway & CloudFront

    • MySQLの代わりにDynamoDB

    • PHPはLambda (カスタムランタイム)で動く

    • これで保守管理しなくてよさそうだな!

    • フラグじゃないんだからねっ

    • すでに実践されている方は ( ´д)ヒソ(´д`)ヒソ(д` ) とコメント

    View full-size slide

  48. サーバーレスで作った感想

    View full-size slide

  49. サーバーレスで作った感想
    • デモを作っている間 サーバーの事を気にしていなかった

    • 「サーバーレス入門の話するんだよな…なんでLaravelのトラブル
    シュートしてるんだ…」

    • サーバーのセットアップや維持管理を気にしなくて良くて精神衛生上とて
    も良い

    • サーバーレス構築はすんなり、先人たちに感謝 👏

    View full-size slide

  50. サーバーレスで作った感想
    • EC2もRDSも立ち上がってないからコストがかからないね!

    • EC2(t3.large) + Aurora (t2.small) + αざっくり見積

    • API Gateway, Lambda, DynamoDB, S3ざっくり見積

    • みんなが遊ばなければ実質タダでは
    #年間です

    View full-size slide

  51. 入門のその先へ

    View full-size slide

  52. 入門のその先へ
    • API Gateway のルートごとに Lambda 関数を分ける

    • Laravel がルーティングするのはモノリシックじゃない?

    • “そのコード、フレームワークの外でも動きますか?”

    • @77web さんの発表を楽しみにしてます

    • 2021/03/28 10:50ʙ Track B

    View full-size slide

  53. 入門のその先へ
    • X-Ray を組み込む

    • AWSコンソールからX-Rayを始めようとするとPHPが選択肢に無い

    • そりゃそうじゃ

    • aws-php-sdk には XRayClient はあるのでできそう

    View full-size slide

  54. 入門のその先へ
    • (モノシリックと言った上で) Laravel Livewire をLambdaに載せてみたい

    • “Laravel Livewire でアプリケーションを作成した話”

    • @localdisk さんの発表を楽しみにしてます

    • 2021/03/27 10:50ʙ Track B

    View full-size slide

  55. 入門のその先へ
    • デプロイ方法の模索

    • “プログラマ三大美徳を実現するデプロイフローを目指して”

    • @yamotuki さんの発表を楽しみにしてます

    • 2021/03/28 14:10ʙ Track B

    View full-size slide

  56. 入門のその先へ
    • バッチ処理ってどうするの?

    • Lambda は実行時間 15分 の制限

    • Fargate 使うのかしら…

    • “Laravelプロダクト Fargate化への道”

    • @sogaoh さんの発表を楽しみにしてます

    • 2021/03/28 17:10ʙ (LT)

    View full-size slide

  57. 入門のその先へ
    • コンテナイメージでの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/

    View full-size slide

  58. 入門のその先へ
    • セキュリティ

    • サーバーレスならではの対応?
    https://twitter.com/Typhon666_death/status/1360949401397518338

    View full-size slide

  59. LAMPエンジニアが

    サーバーレスに

    入門した結果

    View full-size slide

  60. 結果
    • LAMPエンジニアの知見は必ず活きる

    • 抽象化されたもの「だけ」しかしらないよりも

    • 具象の理解は助けになる

    • LAMPエンジニア/経験者こそ恩恵が理解できる

    • クラウドはどれもそう…基礎は知っておこう

    • 「はい」

    View full-size slide

  61. #ご静聴ありがとうございました

    🙇 👏👏👏

    View full-size slide

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

    View full-size slide