ã¯ããã«
æåãªVagrantã§ããHashicorpã®åµèšè ã§ããMitchell Hashimotoã®æåã®è£œåã¯ãéçºããã»ã¹ã®èªååãšããã°ã©ã ã®å±éã®ããã®é«å質補åã®ãã§ãŒã³å šäœã®åºç€ãç¯ããŸããã Packerã¯ãVirtualBoxãDockerãGoogle Cloudãªã©ãä»®æ³ãã·ã³ã®æçµã€ã¡ãŒãžã®äœæãæ¯æŽããŸãã Terraformã¯ãç¹å®ã®ãããã€ããŒãåç §ããã«ãã¯ã©ãŠãã§ã€ã³ãã©ã¹ãã©ã¯ãã£å šäœãæ§ç¯ããè€éãªããã»ã¹ãäœæããæ§æã¬ãã«ã«ãããããŸãã ConsulãšSerfã¯ãã¯ã©ãŠãã§ã®éä¿¡ïŒãµãŒãã¹ã®çºèŠãã¯ã©ãã·ã¥ã®ç£èŠãªã©ïŒãæ åœããŸãã Vaultã¯ãç§å¯ããã¹ã¯ãŒããæ©å¯ããŒã¿ã®ä¿¡é Œæ§ã®é«ãåæ£ãªããžããªã§ãããç£æ»ãã¢ã¯ã»ã¹å¶åŸ¡ãããŒã®åãæ¶ããå¯èœã§ãã
ãããã®è£œåã¯ãã¹ãŠãªãŒãã³ãœãŒã¹ã§ãããGoã§èšè¿°ãããçŽæçãªã€ã³ã¿ãŒãã§ã€ã¹ãšAPIãåããäœæãããã¿ã¹ã¯ãé©åã«å®è¡ãããããéåžžã«ããæžãããææžåãããã€ã³ã¹ããŒã«ãç°¡åã§ãã æ£ãã䜿çšããã°ãããããçµã¿åãããŠäœ¿çšââããããšã§ããã€ã¯ããµãŒãã¹ãã¯ã©ãŠããä»®æ³ãã·ã³ãã³ã³ãããŒãæ±ãçŸä»£ã®éçºè ã®ç掻ãå€§å¹ ã«ä¿é²ãããŸãã
éçºè ã¯ãã¯ã©ãŠãã§ç°¡åãªããšãããããã«devops-prosã§ããå¿ èŠã¯ãããããŸãããäžèšã®ããã°ã©ã ã¯ãèªåèªèº«ã®äž»ãªé çã®çš®ãåããå¥ã®devops-departmentã«ç§»è¡ããããšããŸãã ããã§ãããããã¯ãã¹ã¿ãŒããå¿ èŠããã6ã€ã®åå¥ã®ããã°ã©ã ã§ãããããã¥ã¡ã³ããèªãã§åŠç¿ããŸãã ããã¯ãã[ruby / php / etc]ã[aws / gae / do / etc]ã«ãããã€ããæ¹æ³ããšãããªã¯ãšã¹ããçºè¡ããGoogleã®æåã®ããŒãžããã®æãªããã®ã³ããŒããŒã¹ãããã¹ã¿ãã¯ã®ã¯ã©ãŠãã«ãããã€ããæãäžè¬çãªæ¹æ³ã§ãããšããäºå®ã«ã€ãªãããŸãã
ããã«ãã³ããŒããŒã¹ãã§ã誰ãã®Packer / Terraform-configãŸãã¯Vagrantfileã§ããããŒãžã§ã³ã®å€æŽãURLã®å€æŽãæ°ãããããã³ã«ãžã®åãæ¿ããªã©ãé ããæ©ãããããã¯ãã¹ãŠå»æ¢ãããŸãã ããã«ãæåã®ããŒãžã§ã³ã®VagrantãŠãŒã¶ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãå±éããæ©èœã®è¿œå ãæ±ããŠããŸãã ããããVagrantfileã¯ãã®ãããªããšãèšè¿°ããããã®å®å šã«ç°ãªãã¬ãã«ã®æœè±¡åã§ãã
ããããã¹ãŠã«ããããã·ã³ãŒãã¯åé¡ã«å¯Ÿããæ°ããã¢ãããŒããå¿ èŠã§ãããšããèªèã«è³ããŸããã
ã³ãŒãåvs. åç³å
ãããã®çšèªãæ£ãã翻蚳ããæ¹æ³ã¯ããããŸããããããã€ã©åãã«å¯ŸããŠãã³ãŒãã£ã³ã°ãããããŠãã ããã HashiconfäŒè°ã§äž¡æ¹ã®è£œåãçºè¡šãããŠããæ°æ¥åŸããã¥ãŒãšãŒã¯ã®DigitalOceanãªãã£ã¹ã§OttoïŒããã³Hashicorpã®ã·ã§ããŒã§ããNomad ïŒã®ãã¬ãŒã³ããŒã·ã§ã³ã«åå ã§ããããšã¯å¹žéã§ããã
VagrantãPackerãTerraformãè¡ãããšã¯ãéçºç°å¢ããã€ã©åããããšã§ãã ããã°ã©ã ã®éçºã«å¿ èŠãªãã¹ãŠã®ãã®ããã¹ãŠã®èšå®ããªã³ã¯ãããã³ã³ãã³ããèŠå®ããŸããããã«ããã10幎çµã£ãŠããéçºè ã¯çŸåšãšåãéçºç°å¢ã1察1ã§éçºã§ããŸãã
ãããã10幎åŸã«ãã³ã³ãã€ã©ãŸãã¯ãã¬ãŒã ã¯ãŒã¯ã®å ã®URLãæ¢ã«å€æŽãããŠããå Žåã¯ã©ãã§ããããïŒ ãŸãã¯ãäžçã¯æ°ããYTTP3ãããã³ã«ã«åãæ¿ããŸãããïŒ å šå¡ãVagrantãã¡ã€ã«ãæŽæ°ããå¿ èŠããããŸãã ããã§ãPackerã¯ç»åãAmazonããã³DigitalOceanã«ã¢ããããŒãããæ¹æ³ãšVPCãäœæããæ¹æ³ãç¥ã£ãŠããã®ã§ããããæ éã«èŠå®ããŠããŸããã1幎ã§AmazonãAPIãå€æŽãããããã¯ãŒã¯å ã«æ°ããã»ãã¥ãªãã£ã¢ãã«ãå°å ¥ããããPackerãèªåçã«è¡ããã®ä»ã®ã€ãããŒã·ã§ã³ãè¿œå ããå Žå/ terraformãã¡ã€ã«ã¯å»æ¢ãããŠããŸããïŒ
Ottoã¯ããã®åé¡ã«å¯ŸããæŠå¿µçã«æ°ããã¢ãããŒããæäŸããŸããããã¯ãéçºç°å¢ãšå±éãäœæããããã»ã¹ããã³ãŒãã£ã³ã°ãããŠããŸãã ãªãããŒã«äœããããããäŒããŸãïŒãGoã®ç§ã®ã¢ããªã±ãŒã·ã§ã³ã¯AWSã§å®è¡ããmysql-baseãšéä¿¡ããããŒããããèŠãå¿ èŠããããŸããïŒããªãããŒã¯ããã«ããã¹ãŠã®éæ³ãå®è¡ããŸããæ£ããããšãããŠãã ããã
æãã§ããã ããèŠãŠã¿ãŸãããã
詳现
ãã³ãããã®äžã§ã¯ããªãããŒã¯åãVagrantãPackerãTerraformãConsulãVaultã䜿çšããŠãããå®éããããã®ååšãç¥ãå¿ èŠãããããŸããã äœããã€ã³ã¹ããŒã«ãããŠããªãå Žå-䟿å©ãªåœ¢åŒã®ãªãããŒã¯ãããããããŠã³ããŒãããŠã€ã³ã¹ããŒã«ãããã©ãããå°ããŸãã
ããã«ãæšæºã®ã¯ãŒã¯ãããŒã¯Vagrantã§ã®äœæ¥ãšéåžžã«äŒŒãŠããŸãã
- ãªãããŒã³ã³ãã€ã«
- otto dev
- otto dev ssh
Ottoã¯1ã€ã®ãã¡ã€ã«ã®ã¿ã䜿çšããŸã-åçŽãªã±ãŒã¹ã§ã¯ããªãããŒã¯ãããžã§ã¯ãã®ã¿ã€ããæšæž¬ã§ãããªã©ãåçŽãªå Žåã§ãå¿ èŠãªãAppfileã§ãã ãã¡ã€ã«åœ¢åŒã¯Hashikorp HCLã§ãèªã¿åããšæžã蟌ã¿ãç°¡åã§ãã ã¢ããªãã¡ã€ã«ã®äŸïŒ
application { name = "otto-getting-started" type = "ruby" } project { name = "otto-getting-started" infrastructure = "otto-getting-started" } infrastructure "otto-getting-started" { type = "aws" flavor = "simple" }
otto ã³ã³ãã€ã«ãã§ãŒãºã¯Appfileãèªã¿åãã次ã®ãããª.ottoãµããã£ã¬ã¯ããªãïŒåïŒäœæããŸãã
ããã¯ããã³ãŒãã£ã³ã°ããšããã€ã©åãã®éããåæ ããéèŠãªãã€ã³ãã§ãã Appfileãå€æŽããããããªãããŒãæŽæ°ããããã³ã«ã ãªãããŒã»ã³ã³ãã€ã«ã»ã³ãã³ãã¯ããããã¹ãŠã®ããŒãå éšãæŽæ°ããVagrantãPackerãããã³Terraformã«å¿ èŠãªæ§æãäœæããŸãã äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŠç°å¢ãæºåããæ¹æ³ã®ããã¹ããã©ã¯ãã£ã¹ããå€æŽãããå Žåãã³ã³ãã€ã«æ®µéã§otto-environmentãæŽæ°ãããŸãã ã³ã³ãã€ã«ã³ãã³ããå®è¡ããªãå Žåãottoã¯ã³ã³ãã€ã«æžã¿ã®Appfileã®ããŒãžã§ã³ã§åäœããŸãã
ç°å¢ãæºåãã段éïŒ ãªãããŒéçº è ïŒã¯ãå®éã«ã¯ã 浮浪è ã®åæåãšæµ®æµªè ã眮ãæããŸã ã ä»®æ³ãã·ã³ãäžæããŸãïŒãããŸã§ã®ãšããUbuntu hashicorp / precise64ã®ã¿ã§ãããå°æ¥OSã«ãéžæè¢ããããŸãïŒããããã¯ãŒã¯ãæ§æãããSSHããŒãäŸåé¢ä¿ãããã³å¿ èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ãããŸã-äžè¬çã«ããããžã§ã¯ããžã®æ°èŠåå ¥è ãç°¡åã«å®è¡ã§ããããã«ãããã¹ãŠã®éæ³otto dev sshã³ãã³ããå®è¡ããŠãéçºç°å¢ã«å ¥ããŸãã
ããã°ã©ã ã®æºåãã§ãããããªãããŒã¯ã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãŠãã«ãããã€ããã¿ã¹ã¯ãåŒãåããããšãã§ããŸãã éçºè ã¯ãWebãµãŒããŒãä»®æ³ãã©ã€ããŒããããã¯ãŒã¯ãããã³ãã®ä»ã®è©³çŽ°èšå®ã®è€éãããã¹ãŠç¥ãå¿ èŠããªããªããŸããã ãªãããŒã䜿çšããå±éãµã€ã¯ã«ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ§ç¯ãã¢ããªã±ãŒã·ã§ã³ã€ã¡ãŒãžã®æ§ç¯ãããã³å®éã®å±éãšãã3ã€ã®ã¹ãããã§æ§æãããŸãã
- ãªãããŒã€ã³ãã©
- ãªãããŒãã«ã
- ãªãããŒãããã€
ããã§ã®ãã€ã³ãã©ã¹ãã©ã¯ãã£ããšã¯ãã¯ã©ãŠããµãŒãã¹ã®ç¹å®ã®åãããã€ããŒã«é¢é£ä»ãããããã¹ãŠã®ãªãœãŒã¹ãæå³ããŸãã otto infraã¯ããµãããããäœæããã«ãŒãã£ã³ã°ãèŠå¡ãã¹ããã²ãŒããŠã§ã€ãVPCãªã©ãæ§æããŸãããããã¯éåžžãå€ãã®ããšãèªãã§ãã©ã®ããã«æ©èœããããç解ããã®ã«é·æéå¿ èŠã§ãã Ottoã¯ãã®ãã¹ãŠã®è² è·ãèªåã§è² æ ããŸãã圌ã¯ãã¹ãŠã®ãã¹ããã©ã¯ãã£ã¹ãé å®ããŠãããããã¹ãŠãåŠçããæ¹æ³ããç¥ã£ãŠããããæé©ãªæ¹æ³ã§ãããå®è¡ããŸãã ããŸããŸãªã€ã³ãã©ã¹ãã©ã¯ãã£ãªãã·ã§ã³ã¯ããã¬ãŒããŒããšåŒã°ããããŸããŸãªãªãã·ã§ã³ã説æããŸã-ãSSHã¢ã¯ã»ã¹ãåããã¯ã©ãŠãå ã®åçŽãªãã·ã³ãããIPãå€åãã®ãã©ã€ããŒããããã¯ãŒã¯ããªã©ã å éšã§ã¯ãTerraformããã¹ãŠãå®è¡ããŸãã
次ã®ã¹ããããotto buildããšãotto deployãã¯ãã¯ã©ãŠãã§å®è¡ããæºåãã§ããŠããã€ã¡ãŒãžãåéããã€ã³ã¹ã¿ã³ã¹ãèµ·åããŸãã AMIã³ã³ãããŸãã¯Dockerã³ã³ããããŸãã¯ottoãå°æ¥ãµããŒãããä»ã®ããããã³ã³ããã§ãã
ãšãŠãç°¡åã§ãã ããã§ãPHPã®Webãµã€ããã¶ã€ããŒã§ããããããžã§ã¯ãã®åæããªãããŒã®èµ·åãã¯ã©ãŠãã§ã®Webãµã€ãã®èµ·åãå¯èœã«ãªããŸããã
ããŠãå žåçãªéçºè ã¯ãŒã¯ãããŒã®æåŸã¯ã `destroy`ã³ãã³ãã§ãã
- ãªãããããã€ç Žå£
- ãªãããŒã€ã³ãã©ç Žå£
- otto dev destroy
ç¹°ãè¿ããŸããããªãããŒã¯ã¯ã©ãŠããã¯ãããžãŒãèšèªãããã³ãã¬ãŒã ã¯ãŒã¯ã®éçºããã³å€æŽã«äŒŽãé²åããŸããããªãããŒãæäœããããã®äžé£ã®ã¢ã¯ã·ã§ã³ãšã¢ã«ãŽãªãºã ã¯å€æŽãããŸããã
ãã€ã¯ããµãŒãã¹
çŸä»£ã®ã¯ã©ãŠãã¢ããªã±ãŒã·ã§ã³ã¯ãå€ãã®å Žåãäœããã®åœ¢ã§ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã䜿çšããåã¢ããªã±ãŒã·ã§ã³ã¯ä»ã®ã¢ããªã±ãŒã·ã§ã³ã«äŸåããŠããããšãå€ãããã¹ãŠã®äŸåé¢ä¿ãæ£ããäžããããšã¯éåžžã«å°é£ã§ãã Ottoããã®åé¡ã«åãçµã¿ãäŸåé¢ä¿ã®æŠå¿µã䜿çšããŸããäŸåé¢ä¿ã®æŠå¿µã¯Appfileã«èšè¿°ãããäŸåé¢ä¿URLã®åœ¢åŒãæã¡ãããããŸãottoãããžã§ã¯ãã§ãã ããšãã°ããããžã§ã¯ããMongoDBã«äŸåããŠããå ŽåïŒ
application { name = "otto-getting-started" type = "ruby" dependency { source = "github.com/hashicorp/otto/examples/mongodb" } }
éçºç°å¢ã«ãã°ã€ã³ããããšã§ãDNSã¢ãã¬ã¹ ` mongodb.service.consul`ã§mongodbã«ã¢ã¯ã»ã¹ã§ããŸãã
ããã¯ãã¹ãŠãçè«çã«ã¯ãå€ãã®è€éãªäŸåé¢ä¿ãæã€ãµãŒãã¹ã®éçºãå€§å¹ ã«ç°¡çŽ åããã¯ãã§ãã
çŸåšã®å¶é
Ottoã¯1é±éåã«ãªãªãŒã¹ãããããŒãžã§ã³0.1ã§ããããããŸã§ã®ãšããå€ãã®ããšããµããŒãããŠããŸããã çŸæç¹ã§ã¯ãGoïŒPHPïŒãDockerïŒäŸåé¢ä¿ïŒãNode.jsãRubyã®ãµããŒãïŒããžãã¯ïŒãå®è£ ãããŠããŸããããããéåžžã«å¶éãããŠããŸãã çŸåšããããã€ã¯Amazonã§ã®ã¿ãµããŒããããŠããŸãããä»ã®ãããã€ããŒã¯ãŸããªãè¿œå ãããŸãã ãªãããŒèªäœã¯ãããè¡ãããAzureãCloudFlareãDigitalOceanãGAEãHerokuãOpenStackãªã©ããµããŒãããTerraformãšPackerã䜿çšãããããããã§ã¯æ¥œèŠ³çã«ãªããŸãã
ã©ãã§ãã«ã¹ã¿ã VagrantfileãŸãã¯Terraform-configsãæå®ããããšãã§ããŸããããã«ãããéåžžã«ç°¡åã§æ¡åŒµæ§ãé«ããéåžžã«éæšæºã§æŽç·Žãããã¹ããŒã ã«ãé©çšã§ããŸãã
çµè«
ãã®èšäºãæžããŠããæç¹ã§ã¯ããªãããŒã¯ãŸã 奜å¥å¿ãããã£ãŠããŸããããã³ãããã®äžã®ãã³ãããã®äžã§éåžžã«ãããã¹ããããããŒã«ã䜿çšããŠããŸãã ãªãããŒèªäœã®ã¢ã€ãã¢ã«é¢ããŠã¯ãéçºè åãã®éæ³ã®DevOpsã¢ã·ã¹ã¿ã³ããããèªäœã蚌æããæéãçµãŠã°ãããã§ãããã
å人çã«ã¯ããã·ã³ãŒãã®æŽ»åã¯ãé·ãéç§ã«äžã€ã®å°è±¡ãäžããŸããã圌ãã¯äœãããŠããããç¥ã£ãŠããŠããã£ããã§ãã確å®ã«ãã®ç®æšã«åãã£ãŠåããŸãã ãããã§ã«ã¯ã¹ããŒãã®äžã§ããªãããŒã®ã¢ã€ãã¢ã¯é·ãéãããšèšã£ãŠããŸãããããã®ã¬ãã«ã®ãããžã§ã¯ãããŒãããäœæããããšã¯ã§ããªããšç解ããŠããŸããã ãããã£ãŠãæ¯å¹Žããã®å®è£ ã®ããã«å°é¢ããã¥ãŒããæºåããŸããã ãšããã§ã éç§æ°ããããã®ãµã€ã³ãã®1ã€ã§ããããŸããªããªãããŒã§ããµããŒããããŸãã
ããã«ãéçºã¯éåžžã«æŽ»çºã§ãããHashicorpã®ã³ãŒãã¯éåžžã«é«å質ã§ãããHashimotoã®çç£æ§ã«é¢ããäŒèª¬ã¯äººæ°ããããéå»æ°å¹Žã§çŽ æŽãããé²æ©ãèŠããŠããŸãã Hashicorpã¯ãã¯ã©ãŠãã§ã®äœæ¥ã®å©äŸ¿æ§ã®ããã«ãšã³ã·ã¹ãã å šäœãäœæããŸãã
ãã®ãããæããã«ã¹ã«åãããŠãã ããã
åç §è³æ
Ottoã«ã¯åªããWebãµã€ããšããã¥ã¡ã³ãããããŸãïŒ www.ottoproject.io
Hashicorp Webãµã€ãïŒ hashicorp.com