サーバレスフレームワークを使ったシステム開発の場合、Lambdaが乱立すること、フロントとサーバサイドでの仕様の同期(API設計、スキーマ)が問題となっていました。 CloudFormationのスタックを活用することでPRのブランチを独立したデプロイとし、機能追加が円滑にしたお話です。
$MPVE'PSNBUJPOΛͬͨ 13Λग़͠·͘ΕΔϫʔΫϑϩʔ2019年年8⽉月24⽇日 JAWS-UG AIZU
View Slide
-BNCEB
(&5VTFS
(&5VTFS4FSWFSMFTTJT$00-
(&5VTFS1045VTFS %&-&5&VTFS
(&5VTFS1045VTFS %&-&5&VTFS4FSWFSMFTTJT"8&40.&
(&5VTFS1045VTFS %&-&5&VTFS1045PSHBOJ[BUJPO %&-&5&PSHBOJ[BUJPO(&5PSHBOJ[BUJPO1045QPJOU %&-&5&QPJOU(&5QPJOU1045TDPSF %&-&5&TDPSF(&5TDPSF1045TIPQ %&-&5&TI(&5TIPQ45IJTUPSZ %&-&5&IJTUPSZ(&5IJTUPSZ
(&5VTFS1045VTFS %&-&5&VTFS1045PSHBOJ[BUJPO %&-&5&PSHBOJ[BUJPO(&5PSHBOJ[BUJPO1045QPJOU %&-&5&QPJOU(&5QPJOU1045TDPSF %&-&5&TDPSF(&5TDPSF1045TIPQ %&-&5&TI(&5TIPQ45IJTUPSZ %&-&5&IJTUPSZ(&5IJTUPSZ4FSWFSMFTTJT6#&3"8&40.&
(&5VTFS1045VTFS %&-&5&VTFS1045PSHBOJ[BUJPO %&-&5&PSHBOJ[BUJPO(&5PSHBOJ[BUJPO1045QPJOU %&-&5&QPJOU(&5QPJOU1045TDPSF %&-&5&TDPSF(&5TDPSF1045TIPQ %&-&5&TI(&5TIPQ45IJTUPSZ %&-&5&IJTUPSZ(&5IJTUPSZ/PHJUIFSF
ཚཱ-BNCEB
ཧ͞Ε͍ͯͳ͍-BNCEB։ൃऀ͕ͦΕͧΕ-BNCEBؔΛ࡞(JUཧ͞Ε͍ͯͳ͍ίʔυΛݟΔʹ-BNCEB͔ΒμϯϩʔυʢѹॖࡁΈʣཚཱ-BNCEB
ܧଓతͳ։ൃෆՄೳਓ͕มΘΔͱίʔυ͕ແ͘ͳΔ(JUཧ͞Ε͍ͯΔ෦͋Δ͕ ΤϯυϙΠϯτͱϒϥϯν͕ෳࡶཚཱ-BNCEB
Ϗϧυ
(JUಋೖͨ͠Αʂ͜ΕͰཧͰ͖ΔʂґଘύοέʔδೖΒͳ͍ʜ3&"%.&ߋ৽͞Εͯͳ͍ʜͲ͏ͬͯϏϧυ͢Εʜʁ
͋ͬɺͦͷϒϥϯν ͏ͬͯͳ͍Αʜʜࢁ͞ΜͳΒσϓϩΠͰ͖Δ͔Βฉ͍ͯΈͯ
σϓϩΠग़དྷͳ͍
Ϗϧυڥଓใ"1*ΤϯυϙΠϯτ63-ϑϩϯτΤϯυΤϯδχΞʴαʔόαΠυΤϯδχΞ%#ใϝϯόʔ͕૿͑ΔͱʜʁσϓϩΠग़དྷͳ͍
ϝϯόʔߏディレクターデザイナー・コーダーフロント エンジニア サーバ エンジニア仕様
ϝϯόʔߏディレクターデザイナー・コーダーフロント エンジニア x3 サーバ エンジニア x3仕様
ϝϯόʔߏフロント エンジニア x3 サーバ エンジニア x3ಈ࡞֬ೝ͓ئ͍͠·͢ʂ
ϝϯόʔߏディレクターσϓϩΠͲ͏͢Δͷʜʁ
σϓϩΠग़དྷͳ͍ʂ
ཚཱ-BNCEBσϓϩΠͰ͖ͳ͍ʢͦΕʹΑͬͯʣνʔϜ։ൃ͕ࠔ
ࣗݾհ
ਆ֞ɹ૱ΠϯϑϥɺϓϩάϥϜ8PSE1SFTTͷߴԽ͖ͳݴޠ1)1ࣗݾհࣗݾհ
גࣜձࣾɹσβΠχϜνʔϜ։ൃࢧԉʢΠϯλʔϯੜଞʣגࣜձࣾɹ'MPBUJOH8FFE1)1 8PSE1SFTTɺ-BSBWFMʣࣗݾհ
ݱͰى͖͍ͯͨαʔόϨεΞʔΩςΫνϟͱ$MPVE'PSNBUJPOղܾํ๏Ͳ͏ͳ͔ͬͨ࣍
αʔόϨεΞʔΩςΫνϟ
4FSWFSMFTT'SBNFXPSLʢͬͪ͜ʣ"844".αʔόϨεΞʔΩςΫνϟ
"84(PPHMF$MPVE1MBUGPSN"[VSF0QFO8IJTL,VCFMFTT$MPVEqBSF4FSWFSMFTT'SBNFXPSL
-BNCEB'BB4ʢ'VODUJPOBTB4FSWJDFʣ֎෦ͱͷଓ"1*(BUFXBZ"QQ4ZOD4%ZOBNP%#"84ͱ4FSWFSMFTTΞʔΩςΫνϟ
͜ΕΒͷཧ͕େม
$MPVE'PSNBUJPO $'OʢαʔόϨεʹݶΒͣʣΠϯϑϥͷߏΛཧ *BB4-BNCEB "1*(BUFXBZ %ZOBNP%# 4 *".$MPVE'PSNBUJPOςϯϓϨʔτͰهड़୯ҐʮελοΫʯαʔόϨεΞʔΩςΫνϟͷߏ͕ศརʂ"844".ͷݩʢ"844".$MPVE'PSNBUJPOͷ֦ுʣཧ͕େม
4FSWFSMFTTͷσϓϩΠ $MPVE'PSNBUJPOελοΫΛσϓϩΠ"84ʹݶΒͣ൚༻Խ͍ͯ͠Δ4FSWFSMFTT'SBNFXPSL
ݱͰى͖͍ͯͨ
σϓϩΠͰ͖Δਓ͕ݶΒΕΔOQNTMTͳͲɺΤϯδχΞͷΈڥʹΑͬͯϏϧυࣦഊඞཁύοέʔδͷόʔδϣϯϏϧυͱσϓϩΠͷ࣌ؒʢʣϑϩϯτͱαʔόαΠυ͕ඇಉظʹσϓϩΠϑϩϯτ͕ٻΊΔߏͱαʔόαΠυͷߏෆҰகݱͰى͖͍ͯͨ
ΫϥΠΞϯτσΟϨΫλʔΤϯδχΞ͜ͷਓ͚͕ͩσϓϩΠՄೳςελʔσϓϩΠͰ͖Δਓ͕ݶΒΕΔ
ϑϩϯτͱαʔόαΠυνʔϜϝϯόʔؒͰͷಈ࡞ϨϏϡʔσΟϨΫλʔͷಈ࡞ϨϏϡʔϩʔΧϧڥʁνΣοΫΞτϏϧυ֬ೝͦΕେมʜσϓϩΠͰ͖Δਓ͕ݶΒΕΔ
ղܾํ๏
(JU(JUqPX1313ʹର͢Δಈ࡞ϨϏϡʔ$*$% $JSDMF$*ͦͷଞϒϥϯν໊ɺڥɺ%#γʔσΟϯάɺϚΠάϨʔγϣϯϫʔΫϑϩʔͷಋೖ
(JUʹฏԺΛ̍ϒϥϯνϧʔϧ̍ϒϥϯν̍ਓ̍ϒϥϯν̍λεΫʢϢʔβʔετʔϦʔʣϒϥϯν̍13̍ϒϥϯν̍σϓϩΠ(JU(JUqPX13
݄ʴ໊લʴػೳ໊ϒϥϯνͷॴ༗ऀʢऀʣΛ໌֬ʹղܾλεΫΛ໌֬ʹλεΫ͕ਖ਼͘͠ղ͞Ε͍ͯΕ13͕ಠཱ͘͢͠ͳΔλεΫͷ͚ํ໋໊͍͠نଇ
$MPVE'PSNBUJPOͷϙΠϯτ
ελοΫͰಠཱϒϥϯν͝ͱʹಠཱελοΫ͝ͱʹϦιʔε͕ಠཱ-BNCEBʢηοτʣ"QQ4ZOD"1*(BUFXBZ%ZOBNP%#໋໊نଇ
Ϧιʔε͕ಠཱ
(&5VTFS1045VTFS %&-&5&VTFS1045PSHBOJ[BUJPO %&-&5&PSHBOJ[BUJPO(&5PSHBOJ[BUJPO1045QPJOU %&-&5&QPJOU(&5QPJOU1045TDPSF %&-&5&TDPSF(&5TDPSF1045TIPQ %&-&5&TI(&5TIPQ45IJTUPSZ %&-&5&IJTUPSZ(&5IJTUPSZ֬ೝແཧͬ͢ʜ
ཚཱ
ελοΫͰಠཱϒϥϯν͝ͱʹಠཱελοΫ໊ΛϢχʔΫʹϒϥϯν໊ΛݩʹελοΫ໊Λ༩੍͞ݶ͋ΓʢจࣈจࣈͷதͰϢχʔΫʹ͢Δ໋໊نଇ
ελοΫ໊Λϒϥϯν໊͔Β࡞ϒϥϯνͷ໋໊نଇΛݩʹελοΫ໊Λܾఆ GFBUVSFZPVTBOUSZDZQSFTT GFBUVSFZPVTBOUSZDZQSFTT ZPVTUSZDZQSFTTDFϒϥϯν໊ͱ$'OελοΫ໊
Ϧιʔε͕ಠཱ ZPVTUSZDZQSFTTDF TBLBpYBENJOBCD ZPVTUSZDZQSFTTDF
Ϧιʔε͕ಠཱ ZPVTUSZDZQSFTTDF ZPVTUSZDZQSFTTDF ZPVTUSZDZQSFTTDFಈ࡞֬ೝ͓ئ͍͠·͢ʂ
ಠཱͨ͠63-͕ൃߦಠཱ$MPVE'PSNBUJPO4"QQ4ZOD%ZOBNP%#Ϧιʔε͕ಠཱ
13͝ͱʹಈ࡞֬ೝͰ͖Δʜʂ
13ͨ͘͞Μʜʂ
·ͱΊ ZPVTUSZDZQSFTTDF TBLBpYBENJOBCD ZPVTUSZDZQSFTTDF
ཚཱ-BNCEBɺσϓϩΠग़དྷͳ͍$MPVE'PSNBUJPOɺ4FSWFSMFTT'SBNFXPSLσϓϩΠͱϒϥϯνʹϧʔϧʢ໋໊نଇʣ13Ͱಠཱ·ͱΊ
ٕज़తͳഎܠ
໋໊نଇ͕ϙΠϯτεΫϦϓτԽ4FSWFSMFTTͷʮεςʔδ໊ʯΛར༻NBTUFS EFWFMPQͦͷ··ͷεςʔδ໊໋໊نଇ
ίʔυhttps://git.io/fjN1X
4$MPVE'PSNBUJPOʹೖΕͳ͍΄͏͕ྑ͍4ΛελοΫʹೖΕΔ͜ͱՄೳআ͢Δͱ͖ʹ4Λআ$'OΛআ͠ͳ͚ΕͳΒͳ͍4আϑΝΠϧશআόέοτআεςʔδ໊͔Βόέοτ໊ͷεΫϦϓτ$'OσϓϩΠΤϯυϙΠϯτऔಘϑϩϯτʹઃఆҙ
$MPVE'SPOUͱ૬ੑ͕ѱ͍$MPVE'SPOUͷΤϯυϙΠϯτ63-͕औಘͮ͠Β͍$'OελοΫ$MPVE'SPOU͕͍͠4ͱ$MPVE'SPOU$'OʹೖΕͳ͍΄͏͕ྑ͍ҙ
ίʔυ
13Ͱಠཱ͍ͯ͠ΔΠϯϑϥαʔόαΠυ͕༩͑ΔӨڹ13͝ͱʹ࿈ܞ͕ඞཁͳϙΠϯτଘࡏʮքʯ"1*ఆٛॻ(SBQI2-εΩʔϚϑΝΠϧҙ
ཚཱ-BNCEBɺσϓϩΠͰ͖ͳ͍(JUͷϒϥϯνͰಠཱϒϥϯν੍$MPVE'PSNBUJPOελοΫͰಠཱϒϥϯν͝ͱʹσϓϩΠσϓϩΠ͝ͱʹ13Ͱಈ࡞֬ೝ·ͱΊ
͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ࣭͋Γ·ͨ͠Β࠙ձͰͲ͏ͧ