サーバーレスシステムのチーム開発

 サーバーレスシステムのチーム開発

AWSでのサーバーレスシステムの利点やチームでの開発方法について紹介しています。

前半は改めてサーバーレスとはどんな利点があったのか振り返っています。オンプレからクラウドになる中でどこが便利になったのか、さらにサーバーレスはどんな問題を解決できるのか記載しています。

後半では、サーバーレスシステムを開発するチームに所属して、今まで行ってきた開発方式や実際に使っているツールなどを紹介しました。

■解説動画
https://www.youtube.com/watch?v=zWIjG997s98&t=65s

380bcd2ab751f5838abd8219df53e5fe?s=128

tomoki10

July 03, 2020
Tweet

Transcript

  1.  $9ࣄۀຊ෦ࠤ౻ஐथ αʔόʔϨεγεςϜͷνʔϜ։ൃ

  2. ͜ͷηογϣϯͰ෼͔Δ͜ͱ  ର৅ऀ w αʔόʔϨεͬͯฉ͍ͨ͜ͱ͸͋Δ͚ͲԿ͕ྑ͍ͷ͔ؾʹͳΔํ w "84-BNCEBͱ͔࢖ͬͨ͜ͱ͸͋Δ͚Ͳ࣮ࡍۀ຿Ͱ͸ ͲͷΑ͏ʹνʔϜͰ։ൃ͍ͯ͠Δͷ͔ؾʹͳΔํ ηογϣϯͷΰʔϧ w

    αʔόʔϨεʹ͍ͭͯ͋Δఔ౓ཧղͰ͖Δ w αʔόʔϨεͳγεςϜͷ։ൃମ੍ͱ։ൃํ๏ΛཧղͰ͖Δ
  3. ࣗݾ঺հ  ໊લɿࠤ౻ஐथ ෦ॺɿ$9ࣄۀຊ෦ ໾ׂɿαʔόαΠυΤϯδχΞ લ৬ɿ4*FSͷ4&Λ೥ऑ ݱࡏɿ*P5νʔϜ ɹɹɹ8FC"1**P5όοΫΤϯυͷ։ൃ ޷͖ͳ"84αʔϏεɿ-BNCEBɺ$%,

  4. ͸͡Ίʹ  αʔόʔϨεͳγεςϜͱ͸Կͳͷ͔

  5. ैདྷͱͷൺֱ ΦϯϓϨ  WEBαʔό • ͱͯ΋γϯϓϧWebαʔϏεͷྫ

  6. • ͱͯ΋γϯϓϧWebαʔϏεͷྫ ैདྷͱͷൺֱ ΦϯϓϨ WEBαʔό w Ωϟογϡαʔό͸ʁ w $%/͸ʁ w

    υϝΠϯ͸ʁ w %#αʔό͸  w ϩʔυόϥϯαʔ͸ʁ ຊ֨తͳӡ༻Λߟ͑ΔͳΒʜ
  7. ɹɹ AWS Cloud ैདྷͷγεςϜߏ੒ ैདྷͱͷൺֱ "84  Amazon CloudFront Elastic

    Load Balancing Amazon EC2 Amazon RDS Amazon Simple Storage Service Amazon Route 53
  8. ैདྷͱͷൺֱ "84  ैདྷͷγεςϜ Amazon CloudFront Elastic Load Balancing Amazon

    EC2 Amazon RDS Amazon Simple Storage Service Amazon Route 53 ɹɹ AWS Cloud w αʔόʔͷ؅ཧ͕ඞཁ ੬ऑੑରԠ 04ͷߋ৽ w ଴ػ࣌ؒͷඅ༻͕͔͔Δ
  9. αʔόʔϨεͳઃܭ  αʔόʔϨεγεςϜ 4JOHMF1BHF"QQMJDBUJPO Amazon CloudFront Amazon Simple Storage Service

    Amazon Route 53 Amazon API Gateway AWS Lambda Amazon DynamoDB ɹɹ AWS Cloud
  10. αʔόʔϨεͳઃܭ  αʔόʔϨεγεςϜ 4JOHMF1BHF"QQMJDBUJPO Amazon CloudFront Amazon Simple Storage Service

    Amazon Route 53 Amazon API Gateway AWS Lambda Amazon DynamoDB w αʔόʔͷ؅ཧ͕ෆཁ 04؅ཧෆཁ αʔόʔͷ ੬ऑੑରԠෆཁ w ࢖༻ͨ͠෼͚ͩ՝ۚ ɹɹ AWS Cloud
  11. αʔόʔϨεͱ͸Կ͔  $/$'4FSWFSMFTT8IJUFQBQFSW ʮ8IBUJTTFSWFSMFTTDPNQVUJOH ʯΑΓ ௒ҙ༁  wαʔόʔϨείϯϐϡʔςΟϯάͱ͸ɺαʔόʔ؅ཧΛඞཁͱ͠ͳ͍ΞϓϦ έʔγϣϯΛߏங࣮ͯ͠ߦ͢Δͱ͍͏֓೦ɻΠϕϯτʹԠ࣮ͯ͡ߦɺεέʔϦϯ άɺ՝͕ۚߦΘΕΔɻ

    wαʔό͕ແ͘ͳΔΘ͚Ͱ΋ӡ༻ΤϯδχΞ͕͍Βͳ͍Θ͚Ͱ΋ͳ͍ɻαʔόʔ ͷ؅ཧʹ͔͔Δ࣌ؒͱϦιʔεΛϓϥοτϑΥʔϜଆʹ࣋ͨͤΔͱ͍͏ߟ͑ํɻ w։ൃऀ͸ΑΓϏδωεϩδοΫʹूதͰ͖Δ wӡ༻ΤϯδχΞ͸ΑΓॏཁͳλεΫʹूதͰ͖Δ IUUQTHJUIVCDPNDODGXHTFSWFSMFTTUSFFNBTUFSXIJUFQBQFSTTFSWFSMFTTPWFSWJFX
  12. αʔόʔϨεͱ͸Կ͔  $/$'4FSWFSMFTT8IJUFQBQFSW ʮ8IBUJTTFSWFSMFTTDPNQVUJOH ʯΑΓ ௒ҙ༁  wαʔόʔϨείϯϐϡʔςΟϯάͱ͸ɺαʔόʔ؅ཧΛඞཁͱ͠ͳ͍ΞϓϦ έʔγϣϯΛߏங࣮ͯ͠ߦ͢Δͱ͍͏֓೦ɻΠϕϯτʹԠ࣮ͯ͡ߦɺεέʔϦϯ άɺ՝͕ۚߦΘΕΔɻ

    wαʔό͕ແ͘ͳΔΘ͚Ͱ΋ӡ༻ΤϯδχΞ͕͍Βͳ͍Θ͚Ͱ΋ͳ͍ɻαʔόʔ ͷ؅ཧʹ͔͔Δ࣌ؒͱϦιʔεΛϓϥοτϑΥʔϜଆʹ࣋ͨͤΔͱ͍͏ߟ͑ํɻ w։ൃऀ͸ΑΓϏδωεϩδοΫʹूதͰ͖Δ wӡ༻ΤϯδχΞ͸ΑΓॏཁͳλεΫʹूதͰ͖Δ IUUQTHJUIVCDPNDODGXHTFSWFSMFTTUSFFNBTUFSXIJUFQBQFSTTFSWFSMFTTPWFSWJFX
  13. ݸਓతʹࢥ͏αʔόʔϨεͷར఺  w ΠϕϯτۦಈͳγεςϜઃܭ Amazon S3 AWS Lambda Amazon DynamoDB

    AWS Lambda Amazon S3 ը૾ΞοϓϩʔυΛ ى఺ʹॲཧΛ࣮ߦ DBͷσʔλ௥ՃΛ ى఺ʹॲཧΛ࣮ߦ
  14. ݸਓతʹࢥ͏αʔόʔϨεͷར఺  w ΠϕϯτۦಈͳγεςϜઃܭ ΠϕϯτۦಈͰૄ݁߹ʹγεςϜΛ࡞ΕΔ վम͠΍͍͢γεςϜ͕࡞ΕΔ

  15. ։ൃྖҬ  ࣗ෼ͷ୲౰͢Δ։ൃྖҬ (IoTνʔϜͷ1PJͷྫ)

  16.  ୲౰ྖҬͷΠϝʔδ *P5 όοΫΤϯυ ϑϩϯτΤϯυ ୲౰Օॴ

  17.  ࣮ࡍʹ୲౰͍ͯ͠Δۀ຿ w όοΫΤϯυ։ൃ ϏδωεϩδοΫΛ5ZQF4DSJQUͰ։ൃ AWS Lambda 41"༻ͷ"1*ͱ͔ όονॲཧͱ͔ AWS

    Lambda Amazon API Gateway Amazon DynamoDB Amazon CloudWatch Amazon DynamoDB
  18.  ࣮ࡍʹ୲౰͍ͯ͠Δۀ຿ w ΞʔΩςΫνϟઃܭ "84$%,ͰΠϯϑϥͷઃܭ΋5ZQF4DSJQUͰߏங AWS Lambda 41"༻ͷ"1*ͱ͔ όονॲཧͱ͔ AWS

    Lambda Amazon API Gateway Amazon DynamoDB Amazon CloudWatch Amazon DynamoDB
  19. ීஈͷۀ຿  ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ w Πϯϑϥɾۀ຿ઃܭ "84ͷΠϯϑϥߏ੒ͷઃܭͱ

    %#ɾ"1*ͳͲͷۀ຿ઃܭΛ·ͱΊ࣮ͯࢪ w ࣮૷ ઃܭͨ͠಺༰ʹԊͬͯϓϩάϥϜͷ࣮૷ Ϣχοτςετɺ&&ςετΛ࣮૷
  20.  ։ൃͷྲྀΕ ઃܭ ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ "TDJJ%PDͱ1MBOU6.-Ͱγʔέϯεਤ࡞੒ https://dev.classmethod.jp/articles/atom-plantuml-sequence/

  21.  ։ൃͷྲྀΕ ઃܭ "TDJJ%PDͱ1MBOU6.-Ͱγʔέϯεਤ࡞੒ https://dev.classmethod.jp/articles/atom-plantuml-sequence/ ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ

  22.  ։ൃͷྲྀΕ(ઃܭ) 4XBHHFS6*Ͱ"1*ઃఆΛఆٛ https://github.com/swagger-api/swagger-ui ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ

  23.  ։ൃͷྲྀΕ(ઃܭ) %SBXJPͰ"84ͷϦιʔεߏ੒Λઃܭ ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ

  24.  ։ൃͷྲྀΕ(ઃܭϨϏϡʔ) ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ (JU)VCͰ1VMM3FRVFTUͰ૬ޓʹϨϏϡʔ ΞαΠϯ͢Δͱ4MBDL௨஌͕ඈΜͰศར

  25. ։ൃ؀ڥߏங  ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ 5ZQF4DSJQUͰ։ൃ w ZBSOͰύοέʔδ؅ཧ

    w XFCQBDLͰτϥϯεύΠϧόϯυϧ؅ཧ https://dev.classmethod.jp/articles/deploying-lambda-with-webpack-typescript-cdk/
  26. ։ൃ؀ڥ४උ  w֤छϓϥάΠϯͰίʔυࣗಈ੔ܗ΍ ։ൃޮ཰ͷ޲্ ✦ &4-JOU ✦ 1SFUUJFS ✦ (JU)JTUPSZ

    ✦ (JU-FOT ✦ -JWF4IBSF 5ZQF4DSJQU74$PEFͰ։ൃ ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ
  27.  ΫϦʔϯΞʔΩςΫνϟͰ࣮૷ https://dev.classmethod.jp/articles/serverless-testing-using-typescript-and-jest/ ։ൃͷྲྀΕ(࣮૷) ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ

  28.  ։ൃͷྲྀΕ(࣮૷) AWS Lambda Amazon API Gateway Amazon DynamoDB -BNCEB

    )BOEMFSɿΠϕϯτ+40/ͷύʔε %PNBJOɿυϝΠϯͷ࣮૷ *OGSBɿ%#΁ͷΞΫηε ྫ͑͹ɺσʔλऔಘ͢Δ"1*ͷ৔߹ ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ
  29.  ։ൃͷྲྀΕ(࣮૷) 5ZQF4DSJQUͰ։ൃ ΠϕϯτΛܕఆٛ ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ

  30. 5ZQF4DSJQUͰ։ൃ ΠϕϯτͷॲཧΛ࣮૷  ։ൃͷྲྀΕ(࣮૷) ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ

  31.  ։ൃͷྲྀΕ(࣮૷) wϢχοτςετ w&&ςετ AWS Lambda Amazon API Gateway Amazon

    DynamoDB AWS Lambda Amazon API Gateway Amazon DynamoDB ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ
  32.  ։ൃͷྲྀΕ(࣮૷) w&&ςετ &&ςετ͸ϞοΫͰͳ͘؀ڥ͝ͱͷ "84ΞΧ΢ϯτͰ"84αʔϏεؚΊͯߏஙɾ࣮ߦ ɹɹ AWS Cloud ɹɹ AWS

    Cloud ɹɹ AWS Cloud ։ൃ༻؀ڥ εςʔδϯά ؀ڥ ຊ൪؀ڥ ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ
  33.  ։ൃͷྲྀΕ(࣮૷) ɹɹ AWS Cloud ɹɹ AWS Cloud ɹɹ AWS

    Cloud ։ൃ༻؀ڥ εςʔδϯά ؀ڥ ຊ൪؀ڥ AWS CDK ಉҰઃఆͰσϓϩΠ ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ
  34.  ઃܭɾ࣮૷ͷྲྀΕ ઃܭ ઃܭϨϏϡʔ ࣮૷ ࣮૷ϨϏϡʔ (JU)VCͰ1VMM3FRVFTUͰ૬ޓʹϨϏϡʔ ։ൃͷྲྀΕ(࣮૷ϨϏϡʔ)

  35. ·ͱΊ

  36. ·ͱΊ  w αʔόʔϨεͳγεςϜͱ͸Կͳͷ͔ʁ 'BB4  ɹ։ൃऀ͕։ൃ͚ͩʹूதͰ͖ΔͨΊͷํ๏ ɹΠϕϯτۦಈͰαʔϏεΛૄ݁߹ʹ࡞ΕΔ

  37. ·ͱΊ  w αʔόʔϨεͰͷ։ൃͷྲྀΕ ɹΫϦʔϯΞʔΩςΫνϟͰઃܭɾ࣮૷ɾςετ ɹϚϧνΞΧ΢ϯτͰͷ&&ςετ࣮ߦ

  38.  ͝ࢹௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ νϟϯωϧొ࿥͓ئ͍͠·͢ɻ Ϋϥεϝιουגࣜձࣾ ެࣜYoutubeνϟϯωϧ