Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 👏