Slide 1

Slide 1 text

LAMPを こじらせて サーバーレスに 乗り遅れた PHPerが Lambdaに 入門してみる ちゃちい PHPerKaigi 2021 2021-03-26 17:30 Track A

Slide 2

Slide 2 text

ちゃちい is 誰 • Twitter: @chatii0079 • PHP4 からの PHPer (好きな関数 file() ) • ずっとフリーランスでした • 2月から正社員 (13年振りくらい) • Webエンジニア歴は6年くらい • ずっと受託開発 • #エンジニア募集中 DM待ってる…!! • PHPerKaigi スキー いい機会なので #アイコン変えます

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

ちゃちい is 誰 • 人生初登壇 👏 • LTはPHP勉強会@東京とかで何回か • 話すのもスライド書くのも #初心者 なので お手柔らかに🙇 • PHPerKaigi のおかげで PHPer 続けられ ているので感謝 👏 ※ 👏 が表示されたら “88888”を流しましょう

Slide 5

Slide 5 text

アジェンダ • 実際にやってみた • LAMPエンジニアのなやみ • 今の業務・案件が抱える問題 • 入門してみよう

Slide 6

Slide 6 text

話さないこと • 具体的なコードや設定方法・内容 • PHPのコードは出てきません • アーキテクチャやベストプラクティスの話 • 入門なので • 本番でのメリット/デメリット/トラブル事例 • 入門なので…本番運用はまだ…

Slide 7

Slide 7 text

実際にやってみた

Slide 8

Slide 8 text

実際にやってみた • Bref という Lambda のカスタムランタイムを使ってみる • https://bref.sh/ • 読み方は ブレフ (say -v Alex bref)

Slide 9

Slide 9 text

実際にやってみた • 動いちゃった npm install -g serverless serverless config credentials --provider aws --key --secret composer require bref/bref vendor/bin/bref init serverless deploy

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

何か…

Slide 14

Slide 14 text

何がいいかな…

Slide 15

Slide 15 text

ちゃちいといえば…

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

作った👏 • ログインは Auth0 にマカセタ • バックエンドは API Gateway + Lambda, DynamoDB • フロントエンドは CloudFront + S3 • コレのために Nuxt.js にも入門した • 少なくとも PHPerKaigi 2021 会期中は動か しておきます

Slide 22

Slide 22 text

LAMPエンジニアのなやみ

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

LAMPエンジニアのなやみ • #個人の感想です • 大抵の要件は満たせる • 受託だし • LAMPはモダン(OR 流行)ではないかもしれない • ここがこじらせポイント • でも仕事できてるし

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

今の業務・案件の抱える問題 • Rails + PostgreSQL の案件がある • Rubyist は社を去って行った • PHPerしかいない会社でRailsを保守運用していかなければならない件 • 経験キャリア的にお鉢が ちゃちい に回ってくる • 想定以上に使われる業務システム • 少なくとも向こう数年ʙ長いと十数年?使われそう • クローズドとは言え、顧客の規模がでかいのででかい

Slide 29

Slide 29 text

今の業務・案件の抱える問題 • AWS EC2/RDS の構成 • CPU/メモリ使用率がやばくなってAutoScaling走 りまくったり • Pumaってワーカーがメモリを食い散らかして る? • チューニングの勘所がわからない • 推測するな計測せよ、とは言え計測方法… • MとVとCがベッタリになっててツライ • 一部だけVue.jsにしたり • (Bladeさえ書くのキライなんだ) • 何かGemを更新したら動かない puma_worker_killer をGoogle翻訳した様子

Slide 30

Slide 30 text

今の業務・案件の抱える問題 • メンバーが触れるPHPにしなくては • ぼくの稼働が吸い取られ続ける • インフラの面倒まで見てられない

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

サーバーレス is 何?

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

サーバーレス is 何? • 共通して伝えていること • サーバー・インフラの管理を行わなくてよい • 抽象化されているため アプリケーションエンジニアに必要な知識は ア プリケーションを動かす方法だけ

Slide 38

Slide 38 text

今の業務・案件の抱える問題 • メンバーが触れるPHPにしなくては • ぼくの稼働が吸い取られ続ける • インフラの面倒まで見てられない (再掲)

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

時代はサーバーレスだ!! • 個人的感想です • 別の新規案件(同じ顧客)がLAMP構成ではまかなえない要件 • 前哨戦の意味もかねて • ゼロベースで作れる案件がたまたまあるのは運がいい • いきなりリプレースはきつそう • AWSやっていき • AWSの使用が要件に含まれている

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

AWSのサーバーレスを学習する • まずは Black Belt で概要を掴む • YouTubeでアーカイブが公開されて いて助かる • 多少古いものも基礎は変わらないはず https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/

Slide 44

Slide 44 text

AWSのサーバーレスを学習する • AWSドキュメントを眺める • 一次ソースではあるのでドキュメ ントの読み方のコツを • メニューの構成とか • 機械翻訳つらい、英語つらい • (Cmd+C*2) DeepL 多用 ぴえん

Slide 45

Slide 45 text

AWSのサーバーレスを学習する • DevelopersIO で具体的な手法をしる • 知りたいサービス名で検索 • 検索ボックスが無くなってた • Googleで 
 site:dev.classmethod.jp 
 を付けて検索 • Re:Inventの速報も確認したり • 怒濤のごとく新しいサービスや機能追 加がされてる クラスメソッドさんありがとう

Slide 46

Slide 46 text

AWSのサーバーレスを学習する • AWS Lambda • PHPはサポートしていないが カスタムランタイム なるものでPHPも動かせる • Bref というカスタムランタイムがあるらしい • API Gateway • Lambda を Web API として動かす • CloudFront + S3 • クローズドな業務システムなのでSSRしない • フロントエンドはS3で配信しよう

Slide 47

Slide 47 text

AWSのサーバーレスを学習する • Amazon Aurora Serverless / RDS Proxy • Auroraまでもがサーバーレス…だと…!? • 現時点(2021/2)では v2 がプレビュー公開 • プレビューに入門するのは控えておこう… • RDS Proxy は Lambda からRDSを使う時に必須 • RDSへ直接つなぐとコネクションが足りなくなる • AWS DynamoDB • 時代は NoSQL なんでしょう?

Slide 48

Slide 48 text

AWSのサーバーレスを学習する • LAMPの代わりはこれでできそう • OSの存在は気にしない • Webサーバーの代わりにAPI Gateway & CloudFront • MySQLの代わりにDynamoDB • PHPはLambda (カスタムランタイム)で動く • これで保守管理しなくてよさそうだな! • フラグじゃないんだからねっ • すでに実践されている方は ( ´д)ヒソ(´д`)ヒソ(д` ) とコメント

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

サーバーレスで作った感想 • EC2もRDSも立ち上がってないからコストがかからないね! • EC2(t3.large) + Aurora (t2.small) + αざっくり見積 • API Gateway, Lambda, DynamoDB, S3ざっくり見積 • みんなが遊ばなければ実質タダでは #年間です

Slide 52

Slide 52 text

入門のその先へ

Slide 53

Slide 53 text

入門のその先へ • API Gateway のルートごとに Lambda 関数を分ける • Laravel がルーティングするのはモノリシックじゃない? • “そのコード、フレームワークの外でも動きますか?” • @77web さんの発表を楽しみにしてます • 2021/03/28 10:50ʙ Track B

Slide 54

Slide 54 text

入門のその先へ • X-Ray を組み込む • AWSコンソールからX-Rayを始めようとするとPHPが選択肢に無い • そりゃそうじゃ • aws-php-sdk には XRayClient はあるのでできそう

Slide 55

Slide 55 text

入門のその先へ • (モノシリックと言った上で) Laravel Livewire をLambdaに載せてみたい • “Laravel Livewire でアプリケーションを作成した話” • @localdisk さんの発表を楽しみにしてます • 2021/03/27 10:50ʙ Track B

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

入門のその先へ • バッチ処理ってどうするの? • Lambda は実行時間 15分 の制限 • Fargate 使うのかしら… • “Laravelプロダクト Fargate化への道” • @sogaoh さんの発表を楽しみにしてます • 2021/03/28 17:10ʙ (LT)

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

入門のその先へ • セキュリティ • サーバーレスならではの対応? https://twitter.com/Typhon666_death/status/1360949401397518338

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

結果 • LAMPエンジニアの知見は必ず活きる • 抽象化されたもの「だけ」しかしらないよりも • 具象の理解は助けになる • LAMPエンジニア/経験者こそ恩恵が理解できる • クラウドはどれもそう…基礎は知っておこう • 「はい」

Slide 62

Slide 62 text

#ご静聴ありがとうございました 🙇 👏👏👏

Slide 63

Slide 63 text

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