Slide 1

Slide 1 text

©Fusic Co., Ltd.  1 ͍·͋ΔνʔϜʹϑΟοτͤ͞Δ Serverless 2024.09.11 清家史郎 @seike460 ֎෦Ͱొஃ͍ͯ͠Δํ͕ɺ ͲΜͳ಺༰Λ͓࿩͍ͯ͠͠Δͷ͔Λ஌Δձ

Slide 2

Slide 2 text

©Fusic Co., Ltd. 2 ਗ਼Ո ࢙࿠ @seike460 AWS Community Builder Serverless ίϛϡχςΟ Serverless Meetup Fukuoka Cloudflare Meetup Fukuoka Fukuoka.php Fukuoka.go JAWS-UG Fukuoka JP_Stripes Fukuoka JBUG Fukuoka ࣗݾ঺հ ͸͡Ίʹ גࣜձࣾFusic ϓϦϯγύϧΤϯδχΞ/ΤόϯδΣϦετ

Slide 3

Slide 3 text

©Fusic Co., Ltd. 3 CONTENTS ໨࣍ 1. Serverless Ͱ͋Δ։ൃΛৼΓฦΔ 2. Serverless ద༻͠ଓ͚ͨՁ஋ͱݱ࣮ 3. νʔϜʹϑΟοτͤ͞ΔServerless 4. νʔϜͱServerlessΛܨ͙ͨΊͷPlatform Engineering΁ͷ௅ઓ 5. ·ͱΊ

Slide 4

Slide 4 text

©Fusic Co., Ltd. 4 Serverless Ͱ͋Δ։ൃΛৼΓฦΔ 1

Slide 5

Slide 5 text

©Fusic Co., Ltd. 5 Serverlessͱ͸ͳΜͳͷ͔ Serverless という 言 葉の定義は 「Cloud Native Computing Foundation」が提供している資料 CNCF Serverless Whitepaper v 1 . 0 によると サーバ管理を必要としないアプリケーションの構築と実 行 の「概念」 https://github.com/cncf/wg-serverless/tree/master/whitepapers/serverless-overview

Slide 6

Slide 6 text

©Fusic Co., Ltd. 6 Serverlessͷ֓೦ΛऔΓೖΕΔϝϦοτ͸ଟ਺ Serverless Architectureを導 入 するメリットは多く、 物理サーバーでは取り 入 れることが難しかった概念の導 入 が可能に 大 規模な事例が語られることは多いのですが、 小 規模な開発こそServerlessの概念が活きるケースも多く 私は積極的にServerless Architectureの採 用 を 行 っています

Slide 7

Slide 7 text

©Fusic Co., Ltd. 7 ServerlessΒ͠͞ Serverlessͱ͸֓೦Ͱ͋Γɺ ͜ͷαʔϏε͸ServerlessͰ͋ΔɺServerlessͰ͸ͳ͍ͱ͍͏ٞ࿦ࣗମ ࣮͸ߦ͏ඞཁ͕ͳ͍ͷ͔΋͠Εͳ͍ େࣄͳͷ͸Serverlessͱ͍͏֓೦ͷཧղ౓ΛਂΊ ʮServerlessΒ͠͞ͷਖ਼ମΛ௫Ή͜ͱʯ

Slide 8

Slide 8 text

©Fusic Co., Ltd. 8 ServerlessΒ͠͞ͷਖ਼ମʁ ServerlessΩϟογϡͰ༗໊ͳmomentoʹΑΔදݱ 1. ϓϩϏδϣϯෆཁɺ؅ཧෆཁ 2. ࠷௿ྉۚͷͳ͍࢖ͬͨ෼͚ͩͷࢧ෷͍ 3. 1 ͭͷ API ݺͼग़͠Ͱར༻Մೳ 4. ܭըఀࢭ͕ͳ͍ 5. Πϯελϯε͕ͳ͍ Serverlessͷಛ௃ଊ͓͑ͯΓڌΓॴʹͯ͠΋ྑ͍ͱࢥ͏͕ ݸਓతͳҙࣝͱͯ͠͸ʮ౴͑ͩͱߟ͑Δඞཁ͸ͳ͍ʯ ServerlessΒ͍͠αʔϏε΋Ξοϓσʔτ͞Ε͍ͯ͘͠ɺ ৽͍֓͠೦ͷ௥ՃʹΑΓServerlessΒ͠͞͸มΘ͍ͬͯ͘

Slide 9

Slide 9 text

©Fusic Co., Ltd. 9 ServerlessΒ͋͘͠Ζ͏ͱ͢Δ Serverlessͱ͍͏ͷ͸ʮ͜Ε͚͕ͩServerlessͰ͋Δʯͱ͍͏΋ͷͰ͸ͳ͍ͱࢥ͍ͬͯ·͢ ࠓճ͸͜ͷServerlessͷ֓೦ΛऔΓೖΕΑ͏ͱ௅ઓ͠ଓ͚ͯఏڙ͖ͯͨ͠Ձ஋ͱڞʹ ͦͷதͰݟ͖͑ͯͨ։ൃऀʹ໨Λ޲͚ͯʮνʔϜʹϑΟοτͤ͞Δʯ͜ͱΛߟ͑ͨ ௅ઓͷ࿩Λͤͯ͞௖͖·͢

Slide 10

Slide 10 text

©Fusic Co., Ltd. 10 Serverless ద༻͠ଓ͚ͨݱ࣮ 2

Slide 11

Slide 11 text

©Fusic Co., Ltd. 11 ฐࣾͷٕज़ελοΫ PHPɺRubyɺͦͯ͠AWSΛத৺ͱͨ͠डୗ։ൃΛओʹߦ͍ͬͯ·ͨ͠ ࣗࣾϓϩμΫτ΋PHPͰ։ൃ͓ͯ͠Γɺٕज़ελοΫͱͯ͠PHP͸੾Γ཭ͤͳ͍΋ͷ ҰํͰPHP͸AWS LambdaͷެࣜϥϯλΠϜ͕ଘࡏ͠ͳ͍ɺϛεϚον͕͋ͬͨ ͦΜͳத๻͸ServerlessͷՁ஋Λײͯ͡ɺಋೖΛଓ͚·ͨ͠

Slide 12

Slide 12 text

©Fusic Co., Ltd. 12 ServerlessͳAPIΛ෇ՃՁ஋ͱͯ͠௥Ճ EC 2 上でWebサイト側で連携元からAPIでデータ受け取る要件 負荷分散の為、WebサイトとAPI連携部分を分割 API Gateway -> Lambda -> S 3 と受け取ったJsonを、EC 2 のcronで定期的に取り込む設計 Webサイト側に負荷を与えずに連携することができた 事業拡 大 や機能リプレースで連携データが200倍の規模に増加しているが問題なく運 用

Slide 13

Slide 13 text

©Fusic Co., Ltd. 13 ServerlessͳAPIΛ෇ՃՁ஋ͱͯ͠௥Ճ 一見 すると成功事例だが、Webサイト側は 自 分以外のメンテナーがいるけど ServerlessなAPIに関しては 自 分ひとりでメンテナンスを 行 っている事実がありました 小 規模な機能追加であっても、確かな技術スタックの違いによる差分を感じました Pythonで書いていたものを途中でメンバーとのメンテナンス性を考え、 当時の流 行 してたGoに書き直した。それでもメンテナーは増やせなかった

Slide 14

Slide 14 text

©Fusic Co., Ltd. 14 ݴޠʹΑΒͳ͍ServerlessͳαΠτߏங 機械学習チームが作った解析プログラムを動作させるプラットフォーム 待機コストがほぼ0、必要な時だけ強 力 なインスタンスを利 用 するServerlessの価値を発揮

Slide 15

Slide 15 text

©Fusic Co., Ltd. 15 ݴޠʹΑΒͳ͍ServerlessͳαΠτߏங フルスタック開発ツールであるAWS Amplifyを利 用 AWS Amplifyに内包されたマネージドGraphQLであるAWS AppSyncを利 用 し、 AWSのConfigurationベースGraphQLでフロントエンドでServerlessサイト構築を 行 った AWS Amplifyについての勉強会もやったが(当時は)広がらなかった(今は 自 然に広がっている)

Slide 16

Slide 16 text

©Fusic Co., Ltd. 16 ϥϯλΠϜͱͷϛεϚον ࣮֬ʹServerlessͷԸܙ͸ײ͍ͯͨ͡Ұํɺ ಋೖ͢Δ͜ͱͰϝϯςφʔ͕গͳ͍ϓϩδΣΫτΛ૿΍͍ͯ͠ΔΑ͏ͳײ֮΋͋Γ·ͨ͠ ٯʹRubyͷνʔϜʹؔͯ͠͸ɺެࣜϥϯλΠϜ͕͋ΔͨΊ͔ Serverless͕গͣͭ͠ਁಁ͍ͯͨ͠ ࣾ಺ͷٕज़ελοΫͰ͋ΔPHPͱAWS LambdaͷϥϯλΠϜͱͷϛεϚονͱ Serverlessͱ͍͏࣮ߦ؀ڥʹର͢Δೝ஌ෛՙ͕૝૾Ҏ্ʹେ͖͍ͷΛ࣮ײ࢝͠Ί͍ͯͨ

Slide 17

Slide 17 text

©Fusic Co., Ltd. 17 ServerlessΛద༻͢Δ͜ͱ͸ѱͳͷ͔ もちろんNo 提供しているシステムに対する価値発揮している

Slide 18

Slide 18 text

©Fusic Co., Ltd. 18 ໨ඪΛݟ௚͢ 目 標は「Serverlessを導 入 して終わり」ではない 「チームで運 用 できるServerless」を考える

Slide 19

Slide 19 text

©Fusic Co., Ltd. 19 νʔϜʹϑΟοτͤ͞ΔServerless 3

Slide 20

Slide 20 text

©Fusic Co., Ltd. 20 PHPΛAWS Lambda্Ͱ࢖͏͜ͱΛݕ౼ PHPΛಋೖ͢Δ͜ͱΛ2018೥͋ͨΓ͔Βݕ౼Λ࢝Ί͍ͯͨ ΧελϜϥϯλΠϜ͕ൃද͞Εͨཌ೥ͷPHP Conference 2019ͷࢿྉʹͯ ʮAWS LambdaΛPHPʹͯ࢖͏ͨΊʹ͸ʯͱ͍͏ͱ͜ΖΛௐ΂͍ͯͨ

Slide 21

Slide 21 text

©Fusic Co., Ltd. 21 Laravel + Bref on AWS Lambda ฐࣾͷจԽͱͯࠜ͠෇͍͍ͯΔPHP WebFrameworkͷLaravel AWSͱͷ૬ੑ͕ඇৗʹྑ͘ɺ .envʹAWSͷύϥϝʔλʔΛઃఆ͢Δ͚ͩͰAWSΛ্खʹѻ͏ࣄ͕Մೳ PHPͷOSSϓϩδΣΫτͰ͋ΔBref AWS Lambda্ͰPHPΞϓϦέʔγϣϯΛ؆୯ʹσϓϩΠͱ؅ཧΛՄೳʹ͢Δπʔϧ ͜ΕΒΛ૊Έ߹ΘͤɺνʔϜͷٕज़ελοΫʹϑΟοτͤ͞Δ͜ͱ͕ॏཁͩͱߟ͑·ͨ͠

Slide 22

Slide 22 text

©Fusic Co., Ltd. 22 PHPΛAWS Lambda্ͰϓϩμΫγϣϯར༻Λ࣮ݱ AWS Dev Day 2022ʹͯϑϧServerlessʹͯఏڙ͍ͯ͠ΔαΠτͷ࿩Λ͠·ͨ͠ PHP+Laravelͱ͍͏ٕज़ελοΫʹϑΟοτͤ͞Δ͜ͱͰνʔϜͰಋೖͰ͖ͨࣄྫ https://speakerdeck.com/seike460/serverless-high-load-site-realized-with-amazon-s3-select

Slide 23

Slide 23 text

©Fusic Co., Ltd. 23 ͦͷޙผͷνʔϜͰಋೖ͢Δ͜ͱ΋Ͱ͖ͨ AWS Lambda x PHPʹͯएखͷϝϯόʔ͕ߏங Laravelͷ஌ࣝ͸͋ͬͨҝɺීஈͷߏஙͷΑ͏ʹ ࣗ෼Ҏ֎ͷϝϯόʔʹߏஙͤ͞Δ͜ͱ͕Ͱ͖ͨ ϕʔε͑͞ߏஙग़དྷΕ͹νʔϜͰͷಋೖͱӡ༻͸Մೳ

Slide 24

Slide 24 text

©Fusic Co., Ltd. 24 ҰํͰ

Slide 25

Slide 25 text

©Fusic Co., Ltd. 25 LambdaͷϞϊϦε Amazon Web Services ϒϩάͷʮOperating Lambda: ΠϕϯτۦಈܕΞʔΩςΫνϟʹ͓͚ΔΞϯνύλʔϯ – Part 3ʯ ҎԼͷΑ͏ʹ৮ΕΒΕ͍ͯ·͢ɻ -LambdaͷϞϊϦε -ύοέʔδαΠζ -࠷খݖݶΛద༻͢Δͷ͕೉͍͠ -ΞοϓάϨʔυ͕ࠔ೉ -อक͕ࠔ೉ -ҎԼ͸֘౰͠ͳ͍ -ίʔυͷ࠶ར༻͕೉͍͠ɿLaravelಘҙ -ςετ͕೉͍͠ɿLaravelಘҙ ࢀߟURL:https://aws.amazon.com/jp/blogs/news/compute-operating-lambda-anti-patterns-in-event-driven-architectures-part-3/ Operating Lambda: ΠϕϯτۦಈܕΞʔΩςΫνϟʹ͓͚ΔΞϯνύλʔϯ – Part 3

Slide 26

Slide 26 text

©Fusic Co., Ltd. 26 The Lambda monolith ࢀߟURL : https://docs.aws.amazon.com/lambda/latest/operatorguide/monolith.html ʮThe Lambda monolithʯ

Slide 27

Slide 27 text

©Fusic Co., Ltd. 27 ServerlessͷՁ஋ΛνʔϜͰڗडग़དྷΔ ʮAWS Lambdaͱͯ͠͸ϕετͰ͸ͳ͍ ɹͰ΋ߏஙɺӡ༻·ͰؚΊͨΞϓϦέʔγϣϯͱͯ͠͸ ɹνʔϜͱͯ͠ϕετͩͬͨʯͱߟ͑·ͨ͠ νʔϜͷจԽͱͯ͠ServerlessΛड͚ೖΕΔ͜ͱ͕ग़དྷͨ

Slide 28

Slide 28 text

©Fusic Co., Ltd. 28 ಛੑΛཧղ͠ɺݒ೦ʹର͢ΔέΞ΋ߦ͍༕͍Λແ͘͢ ύοέʔδαΠζʹΑΔσϓϩΠ଎౓௿Լ΍ίʔϧυελʔτύϑΥʔϚϯεྼԽ -> దٓνϡʔχϯάɺܭଌʹΑΓ໰୊ͳ͍͜ͱΛ֬ೝ ࠷খݖݶͷద༻ -> ಉ͡ϓϩάϥϜΛΤϯυϙΠϯτΛ෼͚ͯఏڙ͢Δ͜ͱͰରԠ functions: web: handler: public/index.php runtime: php- 8 2 -fpm timeout: 28 events: - httpApi: '*' admin-web: handler: public/index.php runtime: php- 8 2 -fpm timeout: 28 role: api-admin-role events: - httpApi: method: '*' path: /admin

Slide 29

Slide 29 text

©Fusic Co., Ltd. 29 Monolith First Serverless Development ࢀߟURL : https://speakerdeck.com/_kensh/monolith-first-serverless-development?slide=55 @_kensh ʮMonolith First Serverless Developmentʯ

Slide 30

Slide 30 text

©Fusic Co., Ltd. 30 খن໛ͳ։ൃͳΒLambdalith΋બ୒ࢶͱ͍͏هࣄ΋ ࢀߟURL : https://rehanvdm.com/blog/should-you-use-a-lambda-monolith-lambdalith-for-the-api ʮShould you use a Lambda Monolith, aka Lambdalith, for your API?ʯ

Slide 31

Slide 31 text

©Fusic Co., Ltd. 31 ServerlessͷՁ஋Λఏڙ͢ΔνʔϜʹϑΟοτͨ͠ߏ੒ なぜ浸透しないのかを理解した この構成をチームに浸透させる

Slide 32

Slide 32 text

©Fusic Co., Ltd. 32 νʔϜͱServerlessΛܨ͙ͨΊͷ Platform Engineering΁ͷ௅ઓ 4

Slide 33

Slide 33 text

©Fusic Co., Ltd. 33 ɹ9/21 ServerlessDays Tokyoʹͯʂ ɹҪ্͘Μɺؙࢁ͞Μɺഡ͞Μɺ҆ݩ͞Μ͕ؤுͬͯΔΑʂ

Slide 34

Slide 34 text

©Fusic Co., Ltd. 34 Thank You We are Hiring! https://recruit.fusic.co.jp/ ͝ਗ਼ௌ͍͖ͨͩ͋Γ͕ͱ͏͍͟͝·ͨ͠