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

いまあるチームにフィットさせる Serverless / Serverless fits in...

いまあるチームにフィットさせる Serverless / Serverless fits in with the team you have now.

Fusic内で行った「外部で登壇している方が、どんな内容をお話ししているのかを知る会」で発表した資料です

shiro seike

September 11, 2024
Tweet

More Decks by shiro seike

Other Decks in Programming

Transcript

  1. ©Fusic Co., Ltd.  1 ͍·͋ΔνʔϜʹϑΟοτͤ͞Δ Serverless 2024.09.11 清家史郎 @seike460

    ֎෦Ͱొஃ͍ͯ͠Δํ͕ɺ ͲΜͳ಺༰Λ͓࿩͍ͯ͠͠Δͷ͔Λ஌Δձ
  2. ©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 ϓϦϯγύϧΤϯδχΞ/ΤόϯδΣϦετ
  3. ©Fusic Co., Ltd. 3 CONTENTS ໨࣍ 1. Serverless Ͱ͋Δ։ൃΛৼΓฦΔ 2.

    Serverless ద༻͠ଓ͚ͨՁ஋ͱݱ࣮ 3. νʔϜʹϑΟοτͤ͞ΔServerless 4. νʔϜͱServerlessΛܨ͙ͨΊͷPlatform Engineering΁ͷ௅ઓ 5. ·ͱΊ
  4. ©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
  5. ©Fusic Co., Ltd. 6 Serverlessͷ֓೦ΛऔΓೖΕΔϝϦοτ͸ଟ਺ Serverless Architectureを導 入 するメリットは多く、 物理サーバーでは取り

    入 れることが難しかった概念の導 入 が可能に 大 規模な事例が語られることは多いのですが、 小 規模な開発こそServerlessの概念が活きるケースも多く 私は積極的にServerless Architectureの採 用 を 行 っています
  6. ©Fusic Co., Ltd. 8 ServerlessΒ͠͞ͷਖ਼ମʁ ServerlessΩϟογϡͰ༗໊ͳmomentoʹΑΔදݱ 1. ϓϩϏδϣϯෆཁɺ؅ཧෆཁ 2. ࠷௿ྉۚͷͳ͍࢖ͬͨ෼͚ͩͷࢧ෷͍

    3. 1 ͭͷ API ݺͼग़͠Ͱར༻Մೳ 4. ܭըఀࢭ͕ͳ͍ 5. Πϯελϯε͕ͳ͍ Serverlessͷಛ௃ଊ͓͑ͯΓڌΓॴʹͯ͠΋ྑ͍ͱࢥ͏͕ ݸਓతͳҙࣝͱͯ͠͸ʮ౴͑ͩͱߟ͑Δඞཁ͸ͳ͍ʯ ServerlessΒ͍͠αʔϏε΋Ξοϓσʔτ͞Ε͍ͯ͘͠ɺ ৽͍֓͠೦ͷ௥ՃʹΑΓServerlessΒ͠͞͸มΘ͍ͬͯ͘
  7. ©Fusic Co., Ltd. 12 ServerlessͳAPIΛ෇ՃՁ஋ͱͯ͠௥Ճ EC 2 上でWebサイト側で連携元からAPIでデータ受け取る要件 負荷分散の為、WebサイトとAPI連携部分を分割 API

    Gateway -> Lambda -> S 3 と受け取ったJsonを、EC 2 のcronで定期的に取り込む設計 Webサイト側に負荷を与えずに連携することができた 事業拡 大 や機能リプレースで連携データが200倍の規模に増加しているが問題なく運 用
  8. ©Fusic Co., Ltd. 13 ServerlessͳAPIΛ෇ՃՁ஋ͱͯ͠௥Ճ 一見 すると成功事例だが、Webサイト側は 自 分以外のメンテナーがいるけど ServerlessなAPIに関しては

    自 分ひとりでメンテナンスを 行 っている事実がありました 小 規模な機能追加であっても、確かな技術スタックの違いによる差分を感じました Pythonで書いていたものを途中でメンバーとのメンテナンス性を考え、 当時の流 行 してたGoに書き直した。それでもメンテナーは増やせなかった
  9. ©Fusic Co., Ltd. 15 ݴޠʹΑΒͳ͍ServerlessͳαΠτߏங フルスタック開発ツールであるAWS Amplifyを利 用 AWS Amplifyに内包されたマネージドGraphQLであるAWS

    AppSyncを利 用 し、 AWSのConfigurationベースGraphQLでフロントエンドでServerlessサイト構築を 行 った AWS Amplifyについての勉強会もやったが(当時は)広がらなかった(今は 自 然に広がっている)
  10. ©Fusic Co., Ltd. 21 Laravel + Bref on AWS Lambda

    ฐࣾͷจԽͱͯࠜ͠෇͍͍ͯΔPHP WebFrameworkͷLaravel AWSͱͷ૬ੑ͕ඇৗʹྑ͘ɺ .envʹAWSͷύϥϝʔλʔΛઃఆ͢Δ͚ͩͰAWSΛ্खʹѻ͏ࣄ͕Մೳ PHPͷOSSϓϩδΣΫτͰ͋ΔBref AWS Lambda্ͰPHPΞϓϦέʔγϣϯΛ؆୯ʹσϓϩΠͱ؅ཧΛՄೳʹ͢Δπʔϧ ͜ΕΒΛ૊Έ߹ΘͤɺνʔϜͷٕज़ελοΫʹϑΟοτͤ͞Δ͜ͱ͕ॏཁͩͱߟ͑·ͨ͠
  11. ©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
  12. ©Fusic Co., Ltd. 23 ͦͷޙผͷνʔϜͰಋೖ͢Δ͜ͱ΋Ͱ͖ͨ AWS Lambda x PHPʹͯएखͷϝϯόʔ͕ߏங Laravelͷ஌ࣝ͸͋ͬͨҝɺීஈͷߏஙͷΑ͏ʹ

    ࣗ෼Ҏ֎ͷϝϯόʔʹߏஙͤ͞Δ͜ͱ͕Ͱ͖ͨ ϕʔε͑͞ߏஙग़དྷΕ͹νʔϜͰͷಋೖͱӡ༻͸Մೳ
  13. ©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
  14. ©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
  15. ©Fusic Co., Ltd. 29 Monolith First Serverless Development ࢀߟURL :

    https://speakerdeck.com/_kensh/monolith-first-serverless-development?slide=55 @_kensh ʮMonolith First Serverless Developmentʯ