クラウドネイティブアプリケーションの設計パターン「Beyond the Twelve-Factor App」の紹介
TheTwelveFactorApp12Cloud NATIVE APPLICATION PATTERNS2016.08.26Kazuya Takahashi@REALWORLDBeyond
View Slide
About meTheTwelveFactorApp12BeyondגࣜձࣾϦΞϧϫʔϧυ(.גࣜձࣾ3&"-'*/5&$)$50∁ڮΞδϟΠϧͰϑϧελοΫͳҙࣝߴ͍ΤϯδχΞݸਓͰ-*7&"(&ͱ͍͏Իָʷ8ͳूஂͷҰһͰ͢IUUQTMJWFBHFUPEBZ
the Twelve-Factor App)FSPLVͷதͷਓ͕ʹॻ͍ͨɺϞμϯͳΫϥυΞϓϦέʔγϣϯͷϕετϓϥΫςΟε͕ʮ5IF5XFMFWF'BDUPS"QQʯ࠷ۙɺ.BSUJO'PXMFSࢯͷϒϩάهࣄʮ4FSWFSMFTT"SDIJUFDUVSFTʯͰ/FU'MJYͷ"ESJBO$PDLDSPGUࢯͷʠΦʔέʔɺͦΕ͕Ͳ͏ͨ͠ɻ͠ࢲ͕༏लͳ'BDUPS"QQͷσϕϩούʔͳΒɺίʔυͷॻ͖ํʹԿͷҧ͍͕͋Δͷ͔ʡͱ͍͏ίϝϯτ͕৺ʹͬͨ͞ͷͰɺվΊͯ'BDUPSʹֶ͍ͭͯΜͰΈ·ͨ͠ɻTheTwelveFactorApp12Beyond
the Twelve-Factor App'BDUPS"QQΛௐͯݟ͚ͭͨͷ͕ʮ#FZPOEUIF5XFMWF'BDUPS"QQʯΦϦδφϧ'BDUPS"QQඇৗʹ༗༻͕ͩɺʹॻ͔ΕͨͷͰঢ়گ͕มΘ͖͍ͬͯͯΔɻಛʹ"84Λ࢝Ίͱͨ͠ΫϥυڥΛ׆༻ͨ͠ΫϥυωΠςΟϒΞϓϦέʔγϣϯͷ৽ͨͳϕετϓϥΫςΟεͱͯ͠ɺʹ1JWPUBM͕ࣾɺΦϦδφϧͷݸͷΨΠυϥΠϯͷΞοϓσʔτͱݸͷ৽ͨͳΨΠυϥΠϯΛՃͨ͠ͷ͕#FZPOEUIF'BDUPS"QQͰ͢ɻBeyondTheTwelveFactorApp12Beyond
01. One Codebase, One Applicationόʔδϣϯཧ͞Ε͍ͯΔͭͷίʔυϕʔεʹͭͷΞϓϦέʔγϣϯTheTwelveFactorApp12Beyond
01. One Codebase, One ApplicationΫϥυωΠςΟϒΞϓϦέʔγϣϯɺ୯ҰͷϦϙδτϦͰཧ͞ΕͨίʔυϕʔεΛ࣋ͪɺෳͷҟͳΔڥʹϦϦʔε͞ΕΔɻෳͷνʔϜ͕ɺಉ͡ϦϙδτϦͰҟͳΔػೳΛ։ൃ͢ΔͱɺͭͷΞϓϦέʔγϣϯͰͳ͘ͳͬͯ͠·͏ͨΊɺϚΠΫϩαʔϏεԽΛݕ౼͖͢Ͱ͋ΔɻʠΞʔΩςΫνϟ৫ʹ͕ͨ͠͏ɻ৫ΞʔΩςΫνϟʹ͕ͨ͠͏ʡʙίϯΣΠͷ๏ଇTheTwelveFactorApp12Beyond
02. API FirstαʔϏεͷߏங"1*ͷઃܭ͔Β࢝ΊΔTheTwelveFactorApp12Beyond
02. API FirstϞόΠϧϑΝʔετ͔Β"1*ϑΝʔετɻ"1*ͩͱෳαʔϏεͷ࿈ܞɺεϚϗΞϓϦͱ8ΞϓϦͷΑ͏ͳϚϧνσόΠεʹରԠͰ͖Δɻ"1*ͷઃܭ"1*υΩϡϝϯτ࡞πʔϧΛར༻͢Δɻ4XBHHFS"1*#MVFQSJOUͱ"QJBSZͱ͍ͬͨπʔϧΛ͑ɺ"1*υΩϡϝϯτ͔Βɺίʔυ4%,ɺϞοΫαʔόͳͲΛੜ͢Δ͜ͱ͕Ͱ͖Δɻ"1*ϑΝʔετͷγεςϜɺ༷͕໌֬ʹఆٛ͞Ε͍ͯΔͷͰɺςετ͕ॻ͖͘͢ɺ$*ڥͰγεςϜΛҡ͍࣋ͯ͘͠ࣄ͕Ͱ͖ΔɻTheTwelveFactorApp12Beyond
03. Dependency ManagementґଘؔΛ໌ࣔతʹએݴ͢͠ΔTheTwelveFactorApp12Beyond
03. Dependency ManagementϥΠϒϥϦͷཧɺ1)1ͷ$PNQPTFSɺ3VCZͷ(FNɺ/PEFKTͷOQNͳͲͷύοέʔδཧγεςϜΛར༻͢Δ͜ͱʹΑͬͯɺΞϓϦέʔγϣϯ͕ͲͷϥΠϒϥϦʹґଘ͍ͯ͠Δ͔͕໌֬ʹͳΓɺγεςϜ࣮ߦڥʹґଘ͠ͳ͍ɻγεςϜʹΠϯετʔϧ͞Ε͍ͯΔͰ͋Ζ͏DVSM*NBHF.BHJDLͳͲͷπʔϧΛ͏߹ɺকདྷҧ࣮ͬͨߦڥͰΘΕͨ߹ʹଘࡏ͍ͯ͠ͳ͍Մೳੑ͕͋ΔͷͰɺΞϓϦέʔγϣϯଆͰཧ͢Δ͖Ͱ͋ΔɻTheTwelveFactorApp12Beyond
04. Design, Build, Release, RunઃܭɺϏϧυɺϦϦʔεɺ࣮ߦTheTwelveFactorApp12Beyond
04. Design, Build, Release, RunઃܭɿΞϓϦέʔγϣϯࣄલʹશ෦ઃܭ͢ΔͷͰͳ͘ɺઃܭͱίʔσΟϯάΛখ͍͞୯ҐͰ܁Γฦ͠ߦ͍ͬͯ͘ɻϏϧυɿϦϙδτϦͰࢦఆ͞ΕͨίʔυϕʔεͷґଘؔΛղܾ͠ίϯύΠϧɻϩʔΧϧڥͰಉ༷ͷखॱΛߦ͑ϩʔΧϧͰಈ͍͕ͨຊ൪Ͱಈ͔ͳ͍ͱ͍͏ൃੜ͠ͳ͍ɻϦϦʔεɿϏϧυ͞ΕͨͷΛڥຖͷσϓϩΠઃఆͱ݁߹ͯ͠ϦϦʔεɻϦϦʔεඞͣҰҙͳ*%Λ࣋ͪɺϩʔϧόοΫͰ͖ΔΑ͏ʹ͢Δɻ$BQJTUSBOPͩͱλΠϜελϯϓΛͬͨσΟϨΫτϦɺ%PDLFSͩͱλάɻTheTwelveFactorApp12Beyond
04. Design, Build, Release, RunTheTwelveFactorApp12Beyond࣮ߦɿϦϦʔε͞ΕͨίϯςφͳͲͷϓϩηεΛىಈ࣮ͯ͠ߦɻϩʔΧϧͰϏϧυ࣮ͯ͠ߦͨ͠ͷ͕ɺ$*$%ύΠϓϥΠϯΛ௨ͯ͡ɺͦͷ··ෳͷΫϥυڥͰ࣮ߦ͞ΕΔɻ
05. Configuration, Credentials, and CodeઃఆΛڥมʹ֨ೲ͢ΔTheTwelveFactorApp12Beyond
05. Configuration, Credentials, and Codeઃఆೝূใίʔυ͔Β͖͢Ͱ͋ΓɺόʔδϣϯཧʹؚΉ͖Ͱͳ͍ɻ·ͨɺڥ͝ͱʢEFW QSPEʜʣʹઃఆΛάϧʔϐϯά͖͢Ͱͳ͍ɻڥແݶʹ૿͍͑ͯ͘Մೳੑ͕͋ΔɻઃఆΛ͢ΔҰ൪ͷํ๏ڥมͷ֨ೲͰ͋Δɻίʔυमਖ਼͢Δ͜ͱͳ͘σϓϩΠ͝ͱʹ؆୯ʹมߋͰ͖ɺݴޠ04ʹґଘ͠ͳ͍ϑΥʔϚοτɻઃఆͱίʔυ͕Ͱ͖͍ͯΔ͔ͷ֬ೝɺࠓ͙͢ʹͰίʔυΛΦʔϓϯιʔεԽͰ͖Δ͔Ͳ͏͔ͰΘ͔ΔɻTheTwelveFactorApp12Beyond
06. LogsϩάΛΠϕϯτετϦʔϜͱͯ͠ѻ͏TheTwelveFactorApp12Beyond
06. LogsΫϥυωΠςΟϒΞϓϦέʔγϣϯαʔό͕؆୯ʹ૿ݮͨ͠ΓɺҰ࣌తͳετϨʔδ͔͠ͳ͍߹͋ΔͷͰɺϑΝΠϧγεςϜʹґଘ͠ͳ͍Α͏ʹɺϩάͷग़ྗઌετϨʔδʹ͍ͭͯҰؔͤͣɺ࣮ߦதͷϓϩηεΠϕϯτετϦʔϜΛඪ४ग़ྗʹॻ͖ग़͠ɺ࣮ߦڥͰετϦʔϜΛॲཧ͢ΔqVFOUE$MPVE8BUDI-PHTͳͲͰॲཧ͢ΔɻϩάΛूͨ͠Γੳ͍ͨ͠߹ɺ5SFBTVSF%BUB&-,ελοΫ&MBTUJD4FBSDI -PHTUBTI BOE,JCBOBͳͲΛར༻͢ΔɻTheTwelveFactorApp12Beyond
07. DisposabilityߴͳىಈͱάϨʔεϑϧγϟοτμϯͰݎ࿚ੑΛ࠷େԽ͢ΔTheTwelveFactorApp12Beyond
07. DisposabilityΫϥυωΠςΟϒΞϓϦέʔγϣϯͷϓϩηεഇغ༰қੑʢߴͳϓϩηεͷىಈͱऴྃʣ͕େͰ͋Δɻ"84-BNCEBͳͲϦΫΤετ͝ͱʹҰ࣌తͳϓϩηε͕ىಈͯ͠ॲཧ͢ΔͨΊىಈ࣌ؒͷॖॏཁͰ͋Δɻ·ͨىಈ͕͍࣌ؒͱɺϦϦʔε࡞ۀεέʔϧΞοϓૉૣ͘ߦ͑ΔΑ͏ʹͳΓɺ։ൃϓϩηεߴԽ͢ΔɻTheTwelveFactorApp12Beyond
08. Backing servicesόοΫΤϯυαʔϏεΛΞλον͞ΕͨϦιʔεͱͯ͠ѻ͏TheTwelveFactorApp12Beyond
08. Backing servicesσʔλϕʔεϝʔϧαʔόͳͲͷόοΫΤϯυͷαʔϏεɺαʔυύʔςΟͷαʔϏεΛ"1*ͳͲΛ௨ͯ͡ར༻͢Δࣄ͕૿͍͑ͯΔͷͰɺΞλον͞ΕͨϦιʔεͱͯ͠ѻ͍ɺ؆୯ʹΓସ͑ͯར༻Ͱ͖ΔΑ͏ʹ͢ΔɻTheTwelveFactorApp12Beyondσʔλϕʔεͷ"NB[PO3%4ɺ4.51ͷ1PTUpYͱ$VFOPUF4344FOE(SJEɺΩϡʔͷ#FBOTUBMLEͱ424ͳͲɻ
08. Backing servicesαʔυύʔςΟͷαʔϏεΛ͏߹ɺαʔϏε͕μϯ͢ΔͱίωΫγϣϯͷλΠϜΞτ͕ͪൃੜͯ͠ɺଞͷॲཧμϯͯ͠͠·͏Մೳੑ͕͋ΔͨΊɺ$JSDVJU#SFBLFSύλʔϯΛ࠾༻͢ΔͱΑ͍ɻTheTwelveFactorApp12Beyond$JSDVJU#SFBLFSύλʔϯͱɺϦϞʔτΞΫηεͷޭʗࣦഊΛΧϯτ͠ɺΤϥʔ͕ᮢΛ͑ͨͱ͖ʹࣗಈతʹΞΫηεΛःஅ͢ΔΈɻWJBࢄαʔϏεڥͷ$JSDVJU#SFBLFSͷద༻-*/&&OHJOFFST#MPH
09. Environment Parityͯ͢ͷڥΛͰ͖Δ͚ͩҰகͤͨ͞ঢ়ଶΛอͭTheTwelveFactorApp12Beyond
09. Environment Parity։ൃڥɾεςʔδϯάڥɾຊ൪ڥͳͲͷෳͷڥͰ͖Δ͚ͩΪϟοϓΛ࡞ΒͣʹҰகͤ͞Δɻڥ͝ͱʹΪϟοϓ͕࡞ΒΕΔཁҼओʹʮ࣌ؒʯʮਓʯʮϦιʔεʢόοΫΤϯυαʔϏεʣʯͷͭɻ࣌ؒɿຊ൪ڥͷϦϦʔεग़དྷΔݶΓظؒʢ࣌ؒ୯ҐʣͰߦ͏ɻਓɿίʔυΛॻ͘ਓͱσϓϩΠ͢Δਓಉ͡ਓ͕୲͢Δɻͦͯ͠σϓϩΠΞΫγϣϯͰ؆୯ʹͰ͖ΔΑ͏ʹ͢ΔɻTheTwelveFactorApp12Beyond
09. Environment ParityϦιʔεɿϩʔΧϧڥͱຊ൪ڥ$IFG%PDLFSͳͲΛར༻ͯ͠ग़དྷΔݶΓҰகͨ͠όοΫΤϯυαʔϏεΛ͏ɻຊ൪.Z42-ͰϩʔΧϧ42-JUFɺຊ൪NFNDBDIFEͰϩʔΧϧΠϯϝϞϦͳͲͱ͍͏Ϊϟοϓ࡞Βͳ͍ɻڥͷҰக࣌ؒͱखؒΛ͔͚ͯͰߦ͏͖Ͱ͋ΔɻશͯͷίϛοτσϓϩΠީิͱͯ͠ɺͲͷڥͰಈ͘Α͏ʹ৺͕͚ΔɻTheTwelveFactorApp12Beyond
10. Administrative ProcessesཧλεΫΞϓϦέʔγϣϯ͔Β͢ΔTheTwelveFactorApp12Beyond
10. Administrative ProcessesΦϦδφϧ'BDUPS"QQͰཧλεΫΛΞϓϦέʔγϣϯʹ࣮ɺ͘͠3&1-ʢ3BJMTͷQSZ-BSBWFMͷUJOLFSͳͲʣΛ׆༻͢Δͱͳ͍ͬͯΔ͕ɺ#FZPOE൛ͰҟΛএ͍͑ͯΔɻΞϓϦέʔγϣϯͱҰॹͩͱεέʔϧΞτ࣌ʹແͷཧλεΫ͕ىಈͯ͠͠·͏͔͠Εͳ͍ɻ·ͨΫϥυωΠςΟϒͳΞϓϦέʔγϣϯDSPOͳͲͷσʔϞϯ͕͑ͳ͍࣌͋Δɻ 4Ͱ੩తαΠτɺ-BNCEBͰνϟοτϘοτͱ͔·ͨɺΞϓϦέʔγϣϯͷཧλεΫͷηΩϡϦςΟΛߟ͑ͳ͍ͱ͍͚ͳ͍ɻTheTwelveFactorApp12Beyond
10. Administrative ProcessesཧλεΫΞϓϦέʔγϣϯ෦Ͱ࣮ͤͣʹɺ"84-BNCEBͳͲͰཧλεΫઐ༻ͷΫϥυωΠςΟϒΞϓϦέʔγϣϯΛ࡞Δ͖Ͱ͋ΔɻηΩϡϦςΟͷߟྀ͕ݶఆతͱͳΓɺΞϓϦέʔγϣϯ͕ͲΜͳʹεέʔϧΞτͯ͠ӨڹΛ͏͚ͳ͍ɻTheTwelveFactorApp12Beyond
11. Port bindingϙʔτόΠϯσΟϯάΛΊͯίϯςφͱͯ͠αʔϏεΛެ։͢ΔTheTwelveFactorApp12Beyond
11. Port bindingΦϦδφϧ'BDUPS"QQͰΞϓϦέʔγϣϯΛϙʔτΛόΠϯυͯ͠αʔϏεͱͯ͠ެ։͢Δͱͳ͍ͬͯΔ͕ɺΫϥυωΠςΟϒΞϓϦέʔγϣϯίϯςφ୯ҐͰαʔϏεͱͯ͠ެ։͢Δɻ·ͨϩʔΧϧͰMPDBMIPTUɺຊ൪ڥͰBQQFYBNQMFDPNͱڥʹΑͬͯϙʔτΛόΠϯυ͢Δ߹ڥมʹΑͬͯมߋ͕Ͱ͖ΔΑ͏ʹ͢ΔɻTheTwelveFactorApp12Beyond
12. Stateless ProcessesγΣΞʔυφογϯάύλʔϯʹΑΔεςʔτཧTheTwelveFactorApp12Beyond
12. Stateless ProcessesΞϓϦέʔγϣϯͷϓϩηεશͯεςʔτϨεͱͳΓɺηογϣϯͳͲͷঢ়ଶཧʹγΣΞʔυφογϯάͳόοΫΤϯυαʔϏεΛར༻͢ΔɻΫϥυωΠςΟϒΞϓϦέʔγϣϯͷϑΝΠϧγεςϜҰ࣌తͳͷϦʔυΦϯϦʔͷ߹͋ΔͨΊόοΫΤϯυαʔϏεͱͯ͠༻͖͢Ͱͳ͍ɻ·ͨΠϯϝϞϦΩϟογϡɺϓϩηεىಈ࣌ʹϝϞϦΩϟογϡ͢Δͱϓϩηεഇغ༰қੑͰड़ͨΞϓϦέʔγϣϯͷϓϩηεىಈߴԽΛ્͢ΔͨΊɺ3FEJTͳͲͷΩϟογϡαʔϏεΛ͏͖Ͱ͋ΔɻTheTwelveFactorApp12Beyond
13. ConcurrencyεέʔϧΞοϓͰͳ͘εέʔϧΞτͰϓϩηεΛ૿͢TheTwelveFactorApp12Beyond
13. ConcurrencyεςʔτϨε͔ͭγΣΞʔυφογϯάͰഇغ༻ҙͳϓϩηεΛ࣋ͭΫϥυωΠςΟϒΞϓϦέʔγϣϯɺෳͷΠϯεϯεΛ্ཱͪ͛ͯεέʔϧΞτ͢Δ͜ͱ͕ɺ$16Λ্͛ͨΓϝϞϦΛ૿ͨ͠Γ͢ΔεέʔϧΞοϓΑΓ؆୯ͰޮՌతͰ͋ΔɻTheTwelveFactorApp12Beyond
14. TelemetryେͳΫϥυͰͷϦϞʔτࢹTheTwelveFactorApp12Beyond
14. TelemetryΦϦδφϧͷ'BDUPS"QQʹແ͍߲ɻࢹʹ"1. ύϑΥʔϚϯεɺ,1* Ϗδωεࢦඪɺࢮ׆ࢹͷ͕ͭඞཁɻΫϥυωΠςΟϒΞϓϦέʔγϣϯ༷ʑͳΠϯεϯεʗόοΫΤϯυαʔϏεʗαʔυύʔςΟαʔϏεͰߏ͞ΕΔͨΊࢹ͕ෳࡶ໘ʹͳͬͯ͠·͏ͷͰɺઃܭஈ֊͔Βࢹํ๏Λݕ౼͖͢Ͱ͋Δɻ"1.ɿ/FX3FMJD (BOHMJB %BUB%PH,1*ɿ(PPHMF"OBMZUJDT 5SFBTVSF%BUB 3FETIJGUࢮ׆ࢹɿ/BHJPT $MPVE8BUDI $MPVE5SBJMTheTwelveFactorApp12Beyond
15. Authentication and AuthorizationϩʔϧϕʔεͷೝূͱೝՄTheTwelveFactorApp12Beyond
15. Authentication and AuthorizationΦϦδφϧͷ'BDUPS"QQʹແ͍߲ɻΫϥυωΠςΟϒΞϓϦέʔγϣϯͷηΩϡϦςΟରࡦ3#"$ 3PMF#BTF"DDFTT$POUSPMM͕ద͍ͯ͠ΔɻΞϓϦέʔγϣϯͲͷϢʔβʔ͕ϦΫΤετ͍ͯ͠Δͷ͔Λೝূ͠ɺͦͷϢʔβʔ͕ଐ͍ͯ͠Δϩʔϧ͔Β࣮ߦͰ͖ΔॲཧΛೝՄ͢ΔɻैདྷͷόοΫΤϯυαʔϏεͱͷଓͰ*1Ͱͷ੍ݶ͕ଟ͍͕ɺΠϯελϯε͕૿ݮͨ͠ΓҰ࣌తͳͷͰ͋Δ߹*1ཧ͕͍ͨ͠ΊɺϢʔβʔͱಉ༷ʹ3#"$͕༗ޮͰ͋ΔɻTheTwelveFactorApp12Beyond