企業セミナー「サイバー攻撃に備える「DevOps」という選択」での発表資料です。 https://www.kdl.co.jp/event_info/seminar/2019/04/devops.html https://appsecbriefing.doorkeeper.jp/events/91423
MSP ʹ͓͚ΔSite Reliability Engineering ͷ࣮ફגࣜձࣾϋʔτϏʔπ MSPࣄۀ෦ߴଜ ಓʢ@nari_exʣ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 1
View Slide
ࣗݾհ• Takamura Narimchi / ߴଜ ಓ• @nari_ex• גࣜձࣾϋʔτϏʔπ• औక VP of Engineering• MSPࣄۀ෦ΤϯδχΞϦϯάάϧʔϓγχΞϚωʔδϟʔ• MSPࣄۀ෦ӡ༻άϧʔϓγχΞϚωʔδϟʔ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 2
גࣜձࣾϋʔτϏʔπ• 2005ۀ• ࣄۀ༰• MSP ࣄۀ• Πϯϑϥӡ༻ͷΞτιʔαʔ• ࢹɺઃܭɺߏஙɺΫϥυಋೖࢧԉɺίϯαϧςΟϯά• ։ൃࣄۀ• ࣾһ: 76໊ʢΤϯδχΞ: 60໊ʣ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 3
ࢀߟ: ఏڙαʔϏε2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 4
ࢀߟ: αʔϏεಋೖޙͷମ੍2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 5
࣮ࡍʹӡ༻͍ͯ͠Δ Web αʔϏε2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 6
2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 7
͝ҙ• SRE ͷઆ໌Ͱ͖Δ͚ͩ SRE ຊʹج͍͍ͯ·͕͢ݸਓతͳղऍΛؚΉ෦͕͋Γ·͢• ݫີͳఆٛΛ֬ೝ͍ͨ͠߹ɺGoogle ͷॻ੶υΩϡϝϯτΛࢀর͍ͩ͘͞2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 8
SRE ͱ• 2ͭͷݴ༿ͷུޠ• Site Reliability EngineeringʢSREʣ• దͳαΠτ৴པੑΛ࣮ݱ͢ΔͨΊͷٕज़ख๏ɾٕज़ྖҬ• ౷తͳ ops ͱҰઢΛը͢• Site Reliability EngineerʢSREsʣ• ্هख๏Λ࣮ݱ͢Δ৬छ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 9
౷తͳ ops• جຊతʹख࡞ۀʹཔΔ• γεςϜվળͷͨͼʹखॱॻʹखॱ͕Ճ͞ΕɺͲΜͲΜ͕૿͍͑ͯ͘• ҆ఆՔಇΛॏࢹ͠ա͗Δ͋·ΓɺੵۃతͳػೳվળΛߦ͓͏ͱ͢Δ Dev ͱରཱ͕ͪ͠2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 10
SRE ͕ੜ·Εͨഎܠ• Motivation• େنͷෳࡶͳίϯϐϡʔλγεςϜΛӡ༻͢Δͱ͖ɺγεςϜͷɾ֦େʹൺྫͯ͠ӡ༻ܥΤϯδχΞͷਓ͕όϯόϯ૿͑ΔͷΛΊ͍ͨ• ։ൃνʔϜʢDevʣͱӡ༻νʔϜʢOpsʣͷରཱΛղܾ͍ͨ͠• Basic Concepts• γεςϜɾମ੍ΛιϑτΣΞΤϯδχΞϦϯάͱͯ͋͠Δ͖࢟ʹ͢Δ• ৫ߏతͳରཱΛͳ͘͢• Core Practices• ιϑτΣΞΤϯδχΞʹΑΔ౷త ops ͷ࠶ఆٛɾஔ• ্هͷཤߦɾਪਐɾҡ࣋ʹ͓͍ͯձ͕ࣾ SRE Λࢧ࣋ɾࢧԉ͢Δ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 11
DevOps ͱ SRE Ͳ͏͍͏ؔʁ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 12
class SRE implements DevOps2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 13
class SRE implements DevOps1• DevOps ͱؔͳ͘ SRE ੜ·Ε͚ͨͲɺ݁Ռతʹ DevOps ͷֶΛମݱ͍ͯͨ͠ͱ͍͏ྲྀΕ• SRE ͷϓϥΫςΟε DevOps ͷൣғ֎ͷͷؚΜͰ͍Δ͕ɺൣғͷͷʹ͍ͭͯ۩ମతͳख๏͕ఏҊ͞Ε͍ͯΔͱ͍͏• ͜ͷؔੑΛҰݴͰද͢ͱ class SRE implements DevOps• DevOps ͱ SRE ڝ߹͢Δख๏Ͱͳ͍͘͠༑ͩͪ1 SRE vs. DevOps: competing standards or close friends?2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 14
ิ: DevOps ͱ SRE ͷؔੑ1ͨͱ͑ DevOps ͷ 5 ͭͷப SRE ͷϓϥΫςΟεͱରԠͤ͞Δ͜ͱ͕Ͱ͖ΔDevOps SREReduce Organization Silos Share ownershipAccept Failure as Normal SLOs & Blameless PMsImplement Gradual Change Reduce costs of failureLeverage Tooling & Automation Automate this year's job awayMeasure Everything Measure toil and reliablity1 SRE vs. DevOps: competing standards or close friends?2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 15
ҙ༁DevOps SRE৫ͷαΠϩΛݮΒ͢ ʢ৫ؒͰʣॴ༗ݖΛڞ༗͢ΔΤϥʔͷൃੜΛલఏͱ͢Δ SLO Λఆٛ͠ɺඇΛΘͳ͍ϙετϞʔςϜΛߦ͏ஈ֊తʹมߋ͢Δ ࣦഊ࣌ͷίετΛݮΒ͢πʔϧͱࣗಈԽΛ׆༻͢Δ ͷલͷࣄͷࣗಈԽΛߦ͏શͯΛܭଌ͢Δ τΠϧͱ৴པੑͷܭଌΛߦ͏2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 16
ϋʔτϏʔπʹ͓͚Δ SRE ͷ࣮ફʙࣗࣾۀΛιϑτΣΞΤϯδχΞϦϯάͰ࠶ఆٛɾஔʙ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 17
ʑͷۀΛιϑτΣΞΤϯδχΞϦϯάͰվળ͕ඇৗʹଟ͍ҎԼͷۀΛιϑτΣΞΤϯδχΞϦϯάͰ࠶ఆٛɾஔ• ࢹɾϞχλϦϯάͷઃఆ࡞ۀ• ༷ॻ࡞2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 18
Before...• ࢹɾϞχλϦϯάͷઃఆ࡞ۀ• ࢹΤʔδΣϯτઃఆ: ֤αʔόϩάΠϯͯ͠ख࡞ۀͰઃఆهड़• ࢹ߲ݕ౼: ىಈϓϩηεΛ֬ೝͯ͠ࢹ߲ΛϦετΞοϓ• ࢹαʔόઃఆ: ࢹαʔόʹϩάΠϯͯ͠3ͭҎ্ͷઃఆϑΝΠϧΛߋ৽• ઃఆө: ֻ͚Λ͠ͳ͕ΒԹ͔Έͷ͋Δө࡞ۀ• ༷ॻ࡞• ϑΥʔϚοτ: Word• ૢ࡞: ͯ͢ख࡞ۀ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 19
happo• ࢹɾϝτϦΫεઃఆΛதԝཧɾҰ੍ׅޚ͢ΔΞʔΩςΫνϟ• ઃఆϑΝΠϧΛࣗಈੜɺYAMLʹͯཧ• ࢮ׆ࢹ͚ͩͰͳ͘ϝτϦΫεऩूߦ͏ΤʔδΣϯτϓϩάϥϜΛ2• Golang ͳͷͰόΠφϦΛஔ͚ͩ͘Ͱ࣮ߦՄೳ• ࢮ׆ࢹ Nagios ޓ• ΦʔτεέʔϦϯάʹରԠ• ϝτϦΫεऩू sensu-plugin ޓ => mackerel-agent-plugins ޓ2 https://github.com/heartbeatsjp/happo-agent2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 20
kinjiro• ςϯϓϨͱϢʔβࢦఆͷύϥϝʔλʹج͍ͮͯࢹ༷ॻͷࣗಈੜΛߦ͏• Markdown ϕʔεͰهड़• Git Ͱཧ• ίϛοτϑοΫͰࣗಈతʹ PDF ʹม=> Google Drive อଘ• ߋ৽ Gitlab ্ʹͯϓϧϦΫΤετϕʔεͰߦΘΕΔ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 21
kinjiro ೖྗ߲• ֤छҊ݅ใ• ར༻ج൫ʢAWS, Azure, GCP...ʣ• OS• Autoscaling ༗ແ• ϛυϧΣΞ• ...2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 22
ܶతϏϑΥʔΞϑλʔBefore AfterࢹΤʔδΣϯτઃఆ ֤αʔόϩάΠϯͯ͠ख࡞ۀͰઃఆهड़தԝཧͷͨΊෆཁࢹ߲ݕ౼ ىಈϓϩηεΛ֬ೝͯ͠ࢹ߲ΛϦετΞοϓେΛࣗಈੜࢹαʔόઃఆ ෳͷࢹαʔόͰෳͷઃఆϑΝΠϧΛ࡞େΛࣗಈੜઃఆө ֻ͚Λ͠ͳ͕ΒԹ͔Έͷ͋Δखॱʹج͍ͯөίϚϯυҰൃͰө༷ॻϑΥʔϚοτ Word Markdown༷ॻߋ৽ૢ࡞ ͯ͢ख࡞ۀ େΛࣗಈੜ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 23
ϋʔτϏʔπʹ͓͚Δ SRE ͷ࣮ફʙސ٬ͷΠϯϑϥڥʹ͓͚ΔιϑτΣΞΤϯδχΞϦϯάʙ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 24
ϋʔτϏʔπͰʑͷαʔϏεӡ༻Λߦ͍ͳ͕ΒطଘͷΠϯϑϥ՝ͷൃݟˠղܾʹऔΓΜͰ͍·͢ɻ͜Ε͔Βհ͢Δͷۙ1Ҏʹ͋ͬͨऔΓΈͷҰ෦Ͱ͢ɻ※ސ٬ͷΠϯϑϥڥͳͷͰৄࡉল͖·͢2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 25
ϦϦʔεΤϯδχΞϦϯάͷࢧԉ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 26
ϦϦʔεΤϯδχΞϦϯάͷࢧԉ• Aࣾ͞·: HBͷϚωʔδυαʔϏε͝ར༻લͷঢ়گ• ϓϥΠϕʔτΫϥυڥ• rsync ʹΑΔશखಈͷσϓϩΠ• සൃ͢ΔσϓϩΠىҼͷো• ϩʔϧόοΫ͢ΔʹҰۤ࿑• ίϯςϯπߋ৽ͷͨΊʹຖ 2 ࣌ؒఀࢭ• ॎׂΓͳ Dev ͱ Opsʢଞࣾʣ ͱͦΕΒΛݟकΔ͔͠ͳ͍ BizʢAࣾ͞·ʣ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 27
ϦϦʔεΤϯδχΞϦϯάͷࢧԉ• ϋʔτϏʔπͷ׆ಈ• BizɺDevɺOps ͷ3ऀʢ3ࣾʣ߹ಉͷϛʔςΟϯάΛઃఆ• ֤ʑͷࢹ͔Β՝Λચ͍ग़͠• ༏ઌॱҐ͚ɺ߹ҙܗΛͯ͠ํੑΛܾఆ• Dev ͱڠྗ͠ͳ͕ΒҎԼΛಋೖɾӡ༻• AWSɺCI/CDπʔϧɺBlue-Green σϓϩΠϝϯτɺηΩϡϦςΟιϦϡʔγϣϯ• σϓϩΠʹؔΘΔιϑτΣΞΛϋʔτϏʔπʹͯ։ൃ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 28
ϦϦʔεΤϯδχΞϦϯάࢧԉͷ݁ՌBefore Afterఀࢭϝϯςφϯε࣌ؒ ຖؒ 2 ࣌ؒ ͳ͠σϓϩΠͷ݅ ఀࢭϝϯςඞਢ ΦϯϥΠϯͰ࣮ࢪՄೳσϓϩΠαΠΫϧ ࠷େͰ11ճ 12ʙ3ճҎ্ఀࢭϝϯς͕ෆཁʹɻσϓϩΠαΠΫϧߴԽʂ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 29
ϩάੳج൫ͷઃܭɾߏங2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 30
ϩάੳج൫ͷઃܭɾߏங• Bࣾ͞·: HBͷϚωʔδυαʔϏε͝ར༻લͷঢ়گ• େͳϩάΛඇಉظͰੳج൫సૹ• ඇಉظͳͷͰ͙͢ʹϢʔβಈΛ֬ೝͰ͖ͳ͍• సૹࣗಈ͕ͩɺ࠶ૹखಈͰߦ͏ඞཁ͋Γ• ϩάྔ૿Ճʹ͍సૹ࣌ͷύϑΥʔϚϯε՝ʹ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 31
ϩάੳج൫ͷઃܭɾߏங• ϋʔτϏʔπͷ׆ಈ• ސ٬ͷ SREs ͱ։ൃνʔϜ͔ΒώΞϦϯάΛߦ͍՝Λநग़• ϩάϑΥʔϚοτɺจࣈίʔυసૹʹ͍ͬͯΔಠࣗϓϥάΠϯͳͲΛΨοπϦௐࠪ• αʔϏεαΠυͷطଘͷϫʔΫϑϩʔΛ֬ೝ• ৽ϩάੳج൫ͷఏҊɾߏஙɾӡ༻• ؊ͱͳΔϩάసૹʹHBʹͯ։ൃͨ͠ fluentd ϓϥάΠϯΛར༻2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 32
ϩάੳج൫վળͷ݁ՌBefore After࠶ૹॲཧ ΤϯδχΞʹΑΔखಈ࡞ۀ ࣗಈαʔό 9 5ϩάग़ྗ͔Βσʔλج൫ೖͷॴཁ࣌ؒ1࣌ؒ ϦΞϧλΠϜ݁Ռͱͯ͠ɺίετԽ͕࣮ݱ͞Εͨͱಉ࣌ʹɺΧελϚʔαϙʔτ୲ऀ༷͕ 1 ࣌ؒػ͢Δ͜ͱͳ͘ଈ͍߹ΘͤճՄೳʹ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 33
MSP ʹ͓͚Δ DevOps / SRE ͷ࣮ફ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 34
DevOps / SRE ࣮ફͷϙΠϯτ• ιϑτΣΞΤϯδχΞϦϯά• ར༻πʔϧ• ΧϧνϟʔʢϚΠϯυηοτʣ• MSP ͳΒͰͷಛ͋Γ2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 35
MSP ʹඞཁͳΧϧνϟʔͱ SRE ࣮ફͷ伴• MSP ͱΓͱΓ͢Δސ٬ Dev Ҏ֎ʹ BizɺOps SREs ͷ߹͋Δ• ʮΠϯϑϥҎ֎ݟ·ͤΜʂʯͰͳ͘ɺঢ়گʹԠͯ͡ΞϓϦαΠτͦͷͷʹ౿ΈࠐΉ• Ωʔϫʔυ ʮઌճΓʯʮओମੑʯʮೳಈੑʯ• MSPͷจ຺Ͱ͋ΒΏΔγʔϯͰ SRE ༗ޮ• ཱΘͣɺαʔϏεͷ৴པੑΛߴΊΔ͜ͱʹযΛͯͯɺओମతʹਂ͘ίϛοτ͍ͯ͘͜͠ͱ͕࣮ફͷ伴2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 36
͋Γ͕ͱ͏͍͟͝·ͨ͠2019/05/21ʢਆށ։࠵ʣ, 2019/05/27ʢ౦ژ։࠵ʣ αΠόʔ߈ܸʹඋ͑ΔʮDevOpsʯͱ͍͏બ | @nari_ex 37