WEBエンジニア勉強会 #08 https://web-engineer-meetup.connpass.com/event/94200/
資料の補足は以下にあります https://budougumi0617.github.io/2018/07/27/presentation-web-engineer-study-meeting8/
Spinnakerを利用した自動カナリー分析8FCΤϯδχΞษڧձ:PJDIJSP4IJNJ[V!CVEPVHVNJ
View Slide
自己紹介‣ ਗ਼ਫཅҰ!CVEPVHVNJ‣ GSFFF,,‣ #BDLFOE%FTLUPQ"QQFOHJOFFS‣ (P3VCZPO3BJMT/&5‣ ϒϩάIUUQCVEPVHVNJHJUIVCJP
今日のゴール‣ ͳͥΧφϦʔϦϦʔεͷੳΛࣗಈԽ͍ͨ͠ͷ͔ͬͯΒ͏‣ 4QJOOBLFSͱ,BZFOUBΛͬͯԿ͕Ͱ͖Δͷ͔ͬͯΒ͏
アジェンダ‣ ΧφϦʔϦϦʔεͱ‣ ͳͥΧφϦʔϦϦʔεͷੳΛࣗಈԽ͍ͨ͠ͷ͔ʁ‣ 4QJOOBLFSͱ,BZFOUB‣ ·ͱΊ
継続的デリバリー‣ $POUJOVPVTEFMJWFSZ $%JTBTPGUXBSFFOHJOFFSJOHBQQSPBDIJOXIJDIUFBNTQSPEVDFTPGUXBSFJOTIPSUDZDMFT FOTVSJOHUIBUUIFTPGUXBSFDBOCFSFMJBCMZSFMFBTFEBUBOZUJNF‣ [email protected]‣ ϓϩμΫτΛظؒʹ͍ͭͰຊ൪ڥʹϦϦʔεͰ͖Δ͜ͱ
カナリーリリース‣ ϓϩμΫταʔϏεͷ৽ػೳΛҰ෦ϢʔβʔͷΈ͕ར༻Ͱ͖ΔΑ͏ʹϦϦʔε͠ɺ৽ػೳʹ͕ͳ͍͜ͱΛ֬ೝ͠ͳ͕Βஈ֊తʹશମʹ͚ͯల։͍ͯ͘͠σϓϩΠख๏ͷ͜ͱɻ‣ IUUQTNBLJUBOJOFUTIJNBVNBDBOBSZSFMFBTFnext versionProduction
What’s next operation?‣ ΧφϦʔϦϦʔεͷ݁ՌʹԠͨ࣍͡ͷखॱʁ‣ ϩʔϧΞτͯ͠શͯͷσϓϩΠϝϯτΛ৽όʔδϣϯʹ͢Δ‣ ৽όʔδϣϯΛআͯ͠ݱߦόʔδϣϯͰϩʔϧόοΫ͢Δ‣ ྑ͠ѱ͠Ͳ͏ͬͯੳ͢ΔʁͲ͏அ͢Δʁ‣ ͕͜͜खಈͩͱ$%ͷࣗಈԽ్͕ΕΔ
SpinnakerとKayentaでこの問題を解決する
Spinnaker‣ IUUQTXXXTQJOOBLFSJP‣ ܧଓతσϦόϦʔπʔϧɻLVCFSOFUFTରԠɻSFECMBDLEFQMPZ DIBPTNPOLFZͳͲՄೳ‣ 4QJOOBLFSʮϤοτͷࡾ֯ൕʯͱ͍͏ҙຯ‣ /FUqJY(PPHMFڞಉ։ൃɻʹ044Խ‣ $POUSJCVUPSʹ.JDSPTPGU0SBDMFɻ‣ ϚϧνΫϥυରԠ‣ "84 ($1 "[VSF ,VCFOFUFT‣ 4QSJOHCPPUϑϨʔϜϫʔΫ +BWB(SPPWZ
Spinnakerを利用した継続的デリバリー4UBHF/PUJpDBUJPO5SJHHFSΛΈ߹ΘͤͯσϓϩΠύΠϓϥΠϯΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ
Kayenta‣ 4QJOOBLFSͰ͑ΔαϒϞδϡʔϧ‣ "VUPNBUFE$BOBSZ"OBMZTJTBU/FUqJYXJUI,BZFOUB‣ 4QJOOBLFSͱ,BZFOUBΛ͘Έ͋ΘͤΔ͜ͱͰΧφϦʔϦϦʔεͷࣗಈੳ͕Մೳ‣ 4UBDLESJWFS$MPVEXBUDI%BUBEPHͷϝτϦΫεΛࣗಈతʹੳ‣ ࣄલఆٛͨ͠ධՁ߲ͷ݁ՌͰϩʔϧΞτϩʔϧόοΫΛܾఆ
KayentaσϓϩΠύΠϓϥΠϯʹࣗಈΧφϦʔϦϦʔεੳεςʔδΛઃஔ4UBDLESJWFSͷϝτϦΫεঢ়ଶ͔Β৽όʔδϣϯΛࣗಈੳ͢Δ
自動カナリー分析の流れ
ࠓճ($1Ͱ4UBDLESJWFSΛར༻ͨ͠ߏnext versionProduction1. Deploy2. Monitoring3. Scoring分析構成
1.メトリクス定義を事前に設定4UBDLESJWFSͰධՁ߲ʹ͍ͨ͠ϝτϦΫεΛఆ͓ٛͯ͘͠$16ෛՙͳͲLTͷඪ४ϩά͔ΒऔಘՄೳ
2.分析設定を定義4QJOOBLFS্ͰΧφϦʔϦϦʔεͷධՁ߲Λఆٛ͢Δɻෳ߲Λੳରʹͨ͠Γ֤߲ͷΣΠτઃఆՄೳ
3.Piplineで分析用のデプロイを定義ج४ͱͳΔݱߦWFSͱɺΧφϦʔϦϦʔε͢Δ৽WFSͷσϓϩΠΛఆٛ͢Δ
4.本番ロードバランサ配下に配置ج४ͱͳΔݱߦWFSͱɺ৽WFSͷσϓϩΠΛຊ൪ϩʔυόϥϯαԼʹஔ͢Δ
5.自動デプロイを実行৽WFS͕ݱߦWFSΑΓධՁ݁Ռ͕ѱ͔ͬͨ߹ϩʔϧόοΫ͢Δ 1JQFMJOF͕ࣦഊ͢ΔධՁ͕Α͔ͬͨΒͦͷ··࣍ͷ4UBHF͕࣮ߦ͞ΕɺϩʔϧΞτ͢Δ
Demo
まとめ‣ ܧଓతσϦόϦʔͰΧφϦϦϦʔεޙͷϩʔϧΞτ ϩʔϧόοΫʣࣗಈԽ͍ͨ͠‣ 4QJOOBLFS,BZFOUBͰϝτϦΫεΛجʹࣗಈԽ‣ σϓϩΠΛ҆શɾਝʹ͢Δ͜ͱͰ։ൃऀ։ൃʹूதͰ͖Δ