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

サーバーレスらしさを意識した
AWSにおける開発手法 / Development methodologies in AWS that are serverless-like

サーバーレスらしさを意識した
AWSにおける開発手法 / Development methodologies in AWS that are serverless-like

Cloud on the BEACH 2024 〜いろいろな雲の形〜 勉強会の部
https://jaws-ug-okinawa.doorkeeper.jp/events/171038

shiro seike

April 27, 2024
Tweet

More Decks by shiro seike

Other Decks in Programming

Transcript

  1. ©Fusic Co., Ltd. 2 ਗ਼Ո ࢙࿠ @seike460 AWS Community Builder

    Serverless ླྀٿେֶ޻ֶ෦ిؾిࢠ޻ֶՊ 055538A ίϛϡχςΟ Fukuoka.php Fukuoka.go JAWS-UG Fukuoka Serverless Meetup Fukuoka Cloudflare Meetup Fukuoka JP_Stripes Fukuoka ࣗݾ঺հ ͸͡Ίʹ גࣜձࣾFusic ϓϦϯγύϧΤϯδχΞ/ΤόϯδΣϦετ
  2. ©Fusic Co., Ltd. 5 αʔόʔϨεͱ͸ͳΜͳͷ͔ 言 Cloud Native Computing Foundation

    CNCF Serverless Whitepaper v 1 . 0 行 https://github.com/cncf/wg-serverless/tree/master/whitepapers/serverless-overview
  3. ©Fusic Co., Ltd. 16 αʔόʔϨεͷ੍໿ΛৼΓฦΔ - ࣮ߦ੍࣌ؒݶ - ࣮ߦ͕࣌ؒ௕͍͜ͱ͕ت͹͍͠ͷ͔ -

    Ϧιʔε੍ݶ - ڊେͳCPU΍ϝϞϦΛར༻͢Δͷ͸ت͹͍͠ͷ͔ - σϓϩΠϝϯταΠζ੍ݶ - σϓϩΠϝϯταΠζ͕େ͖͍͜ͱ͸ت͹͍͠ͷ͔ - ಉ࣮࣌ߦ੍ݶ - ಉ࣮࣌ߦ͢Δϓϩηε਺͕ଟେͳࣄ͸ت͹͍͠ͷ͔ - APIϨʔτ੍ݶ - APIͷίʔϧ਺͕ଟେͳࣄ͸ت͹͍͠ͷ͔
  4. ©Fusic Co., Ltd. 26 AWSʹ͓͚ΔαʔόʔϨεΒ͍͠αʔϏε ࠓճ͸AWSʹ͓͚ΔαʔόʔϨεΒ͍͠αʔϏεʹ஫໨ - AWSΛ୅දͱ͢ΔαʔόʔϨεαʔϏε - AWS

    Lambda: Πϕϯτൃੜ࣌ʹίʔυΛ࣮ߦ͠ɺ ίϯϐϡʔςΟϯάϦιʔεΛࣗಈతʹ؅ཧ͢ΔίϯϐϡʔςΟϯάαʔϏε ʮαʔόʔϨεͱ͍͑͹AWS Lambdaʯͱߟ͑Δํ΋ଟ͍ͱࢥ͍·͢
  5. ©Fusic Co., Ltd. 27 αʔόʔϨεͷ࢝૆ɺAWS Lambda - AWS Lambdaͷಛ௃ -

    αʔόʔϨε࣮ߦ؀ڥ - αʔόʔͷઃఆɺ؅ཧɺεέʔϦϯάͷඞཁ͕ͳ͍ - Πϕϯτۦಈ - ଟ༷ͳΠϕϯτιʔεʹ൓Ԡ࣮ͯ͠ߦ - HTTPϦΫΤετ - σʔλϕʔεมߋ - Ωϡʔϝοηʔδ - εέʔϦϯά - ࣗಈͰεέʔϧΞοϓɾμ΢ϯ͠ɺϦΫΤετʹଈ࠲ʹԠ౴ɻ
  6. ©Fusic Co., Ltd. 31 αʔόʔϨεΒ͍͠ετϨʔδʢσʔλϕʔεʣ Amazon S3: ϑΝΠϧΞοϓϩʔυͳͲͷΦϒδΣΫτૢ࡞ Amazon DynamoDB:

    NoSQLʹΑΔςʔϒϧߋ৽ Amazon SQS: ΩϡʔͷΤϯΩϡʔٴͼσΩϡʔ͕Մೳ AWS CloudWatch:ϩάͱϝτϦΫεΛऔಘ
  7. ©Fusic Co., Ltd. 32 αʔόʔϨεΒ͍͠ΠϕϯττϦΨʔ Amazon S3: ϑΝΠϧΞοϓϩʔυͳͲͷΠϕϯτͰτϦΨʔ Amazon DynamoDB:

    ςʔϒϧߋ৽ʹΑΔτϦΨʔ API Gateway: HTTPϦΫΤετΛड͚ͯτϦΨʔ Amazon SQS: ΤϯΩϡʔʹΑΔτϦΨʔ AWS CloudWatch: ఆظతͳεέδϡʔϧ·ͨ͸ϩάͷಛఆͷΠϕϯτʹΑΔτϦΨʔ
  8. ©Fusic Co., Ltd. 36 The Twelve-Factor App I. ίʔυϕʔε ɹόʔδϣϯ؅ཧ͞Ε͍ͯΔ1ͭͷίʔυϕʔεͱෳ਺ͷσϓϩΠ

    II. ґଘؔ܎ ɹґଘؔ܎Λ໌ࣔతʹએݴ͠෼཭͢Δ III. ઃఆ ɹઃఆΛ؀ڥม਺ʹ֨ೲ͢Δ IV. όοΫΤϯυαʔϏε ɹόοΫΤϯυαʔϏεΛΞλον͞ΕͨϦιʔεͱͯ͠ѻ͏ V. ϏϧυɺϦϦʔεɺ࣮ߦ ɹϏϧυɺϦϦʔεɺ࣮ߦͷ3ͭͷεςʔδΛݫີʹ෼཭͢Δ VI. ϓϩηε ɹΞϓϦέʔγϣϯΛ1ͭ΋͘͠͸ෳ਺ͷεςʔτϨεͳϓϩηεͱ࣮ͯ͠ߦ͢Δ
  9. ©Fusic Co., Ltd. 37 The Twelve-Factor App VII. ϙʔτόΠϯσΟϯά ɹϙʔτόΠϯσΟϯάΛ௨ͯ͠αʔϏεΛެ։͢Δ

    VIII. ฒߦੑ ɹϓϩηεϞσϧʹΑͬͯεέʔϧΞ΢τ͢Δ IX. ഇغ༰қੑ ɹߴ଎ͳىಈͱάϨʔεϑϧγϟοτμ΢ϯͰݎ࿚ੑΛ࠷େԽ͢Δ X. ։ൃ/ຊ൪Ұக ɹ։ൃɺεςʔδϯάɺຊ൪؀ڥΛͰ͖Δ͚ͩҰகͤͨ͞ঢ়ଶΛอͭ XI. ϩά ɹϩάΛΠϕϯτετϦʔϜͱͯ͠ѻ͏ XII. ؅ཧϓϩηε ɹ؅ཧλεΫΛ1ճݶΓͷϓϩηεͱ࣮ͯ͠ߦ͢Δ
  10. ©Fusic Co., Ltd. 39 AWS SAM - ςϯϓϨʔτࢦ޲ YAMLϑΥʔϚοτͰهड़͞ΕͨςϯϓϨʔτϑΝΠϧΛ࢖༻ αʔόʔϨεΞϓϦέʔγϣϯͷϦιʔεΛఆٛ

    - ϩʔΧϧςετͱσόοά SAM CLIʹͯϩʔΧϧ؀ڥͰAWS Lambdaؔ਺Λςετٴͼσόοά͕Մೳ - σϓϩΠͷ؆ૉԽ ςϯϓϨʔτʹج͍ͮͯαʔόʔϨεΞϓϦέʔγϣϯΛҰׅͰσϓϩΠ - ౷߹πʔϧͷαϙʔτ SAM͸AWS CloudFormationͱີ઀ʹ࿈ܞ αʔόʔϨεϦιʔεͷ؅ཧɺࣗಈεέʔϦϯάɺ ߋ৽؅ཧ΍ଞͷAWSαʔϏε΍πʔϧνΣʔϯͱͷ౷߹͕Մೳ
  11. ©Fusic Co., Ltd. 40 ϩʔΧϧΤϛϡϨʔτ - DynamoDB Local AWS DynamoDBͷϩʔΧϧ൛

    ։ൃऀ͕ࣗ෼ͷPC΍αʔόʔ্ͰDynamoDBΛ ΤϛϡϨʔτ͢Δ͜ͱ͕Ͱ͖Δ - MinIO AWS S3ޓ׵ͷΦϒδΣΫτετϨʔδΛ ϩʔΧϧΤϛϡϨʔτՄೳͳ ΦϒδΣΫτετϨʔδαʔόʔ - ElasticMQ Amazon SQSޓ׵ͷΩϡʔετϨʔδΛ ϩʔΧϧΤϛϡϨʔτՄೳͳ ϝοηʔδΩϡʔΠϯάγεςϜ
  12. ©Fusic Co., Ltd. 43 ։ൃͷਐΊํ AWS SAMʹͯAWS LambdaΛΤϛϡϨʔτ LocalStackΛར༻ͯ͠ɺDynamoDBɺS3ɺSQS ͳͲΛϩʔΧϧΤϛϡϨʔτ

    - ΋ͪΖΜ௨ৗͷಈ࡞֬ೝ΋Մೳ - ϓϩάϥϜͷUnitςετ΋Մೳ - Integrationςετ΋࠶ݱՄೳ
  13. ©Fusic Co., Ltd. 45 CI/CD (GitHub Actions) ϝϯςφϯεΛΫϥ΢υϕϯμʔଆʹ ೚ͤΔ͜ͱ͕ग़དྷΔͳΒɺ ࣮ࡍར༻͢ΔࡍͷσϓϩΠ΋

    શͯϝϯςφϯεϑϦʔʹ͍ͨ͠ ͦͷ৔߹͸ར༻ऀ͕ଟ͍ͱࢥΘΕΔ GitHub ActionsΛར༻ͯ͠ɺ αʔόʔϨεΞʔΩςΫνϟͷσϓϩΠ΋Մೳ
  14. ©Fusic Co., Ltd. 46 CI/CD (Code XXXܥ) ΋ͪΖΜGitHub Actions͕ར༻Ͱ͖ͳͯ͘΋ AWSͷαʔϏεΛར༻ͯ͠CI/CDͷߏங΋Մೳ

    AWSͷCode XXXܥΛαʔϏεΛར༻͢ΔࣄͰ CI/CDΛߦͬͯɺϓϩάϥϜςετ͔Β σϓϩΠ·ͰΛҠৡ͢Δ͜ͱ͕Մೳ
  15. ©Fusic Co., Ltd. 54 ·ͱΊ αʔό؅ཧΛඞཁͱ͠ͳ͍ΞϓϦέʔγϣϯͷߏஙͱ࣮ߦͷʮ֓೦ʯ Point 01 αʔόʔϨε͸΋ͪΖΜϝϦοτ͕͋ΔɺσϝϦοτ΋͋Δ੍͕໿Λड͚ೖΕΔࣄ͸࣮͸ωΨςΟϒ͡Όͳ͍ Point

    02 αʔόʔϨεΒ͠͞Λҙࣝͨ͠։ൃΛߦ͏͜ͱ͸։ൃ଎౓޲্ʹ΋ͭͳ͕Δ Point 03 ࣮ࡍͷࣄྫͷதͰ΋ϝϦοτ΋࣮ײ͍ͯ͠·͢ɺօ༷΋ͥͻαʔόʔϨεΞʔΩςΫνϟͷݕ౼Λʂ Point 04