å€ãã®äººã Terraform ãç¥ã£ãŠãããæ¥åžžæ¥åã§äœ¿çšããŠããŸããããã®ãã¹ã ãã©ã¯ãã£ã¹ã¯ãŸã 確ç«ãããŠããŸããã åããŒã ã¯ç¬èªã®ã¢ãããŒããšæ¹æ³ãçºæããå¿ èŠããããŸãã
ã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãã»ãšãã©ã®å Žåãå°æ°ã®ãªãœãŒã¹ãšå°æ°ã®éçºè ãšããåçŽãªãã®ããå§ãŸããŸãã æéãçµã€ã«ã€ããŠãããã¯ããããæ¹åã«æé·ããŸãã ãªãœãŒã¹ã Terraform ã¢ãžã¥ãŒã«ã«ã°ã«ãŒãåããæ¹æ³ãã³ãŒãããã©ã«ããŒã«æŽçããæ¹æ³ããã®ä»ã«åé¡ãçºçããå¯èœæ§ã®ãããã®ã¯ãããŸãã? ïŒæåãªæåŸã®èšèïŒ
æéãçµã€ãšãã€ã³ãã©ã¹ãã©ã¯ãã£ãæ°ãããããã«ãªã£ãããã«æããŸããããªãã§ãããã? ã€ã³ãã©ã¹ãã©ã¯ãã£ã®äžå¯è§£ãªå€æŽãå¿é ããã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ãŒãã«è§Šããã®ãæããŸãããã®çµæãæ°ããæ©èœãé ããããå質ãäœäžãããããããšã«ãªããŸã...
Github äžã§ AWS ã® Terraform ã³ãã¥ãã㣠ã¢ãžã¥ãŒã«ã®ã³ã¬ã¯ã·ã§ã³ã管çããå®çšŒåç°å¢ã§ Terraform ãé·æä¿å®ããŠãã XNUMX 幎éãçµãŠãAnton Babenko ãèªèº«ã®çµéšãå ±æããæºåãã§ããŸãããå°æ¥çã«åé¡ããªããã TF ã¢ãžã¥ãŒã«ãäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã
è¬æŒãçµãããŸã§ã«ãåå è ã¯ãTerraform ã®ãªãœãŒã¹ç®¡çååãTerraform ã®ã¢ãžã¥ãŒã«ã«é¢é£ãããã¹ã ãã©ã¯ãã£ã¹ãããã³ã€ã³ãã©ã¹ãã©ã¯ãã£ç®¡çã«é¢é£ããç¶ç¶ççµ±åã®ååã«ã€ããŠããã«ç解ã§ããããã«ãªããŸãã
å 責äºé ïŒ ãã®ã¬ããŒãã®æ¥ä»ã¯ 2018 幎 2 æã§ããããšã«æ³šæããŠãã ããããã§ã« 0.11 幎ãçµéããŠããŸãã ã¬ããŒãã§èª¬æãããŠãã Terraform 2 ã®ããŒãžã§ã³ã¯ãµããŒããããªããªããŸããã éå» 2 幎éã«ãå€ãã®é©æ°ãæ¹åãå€æŽãå«ã XNUMX ã€ã®æ°ãããªãªãŒã¹ããªãªãŒã¹ãããŸããã ãã®ç¹ã«æ³šæããŠããã¥ã¡ã³ãã確èªããŠãã ããã
ãªã³ã¯ïŒ
terraform ã³ãã¥ãã㣠ã¢ãžã¥ãŒã« +terraform-aws-ã¢ãžã¥ãŒã« antonbabenko/pre-commit-terraform â ã³ãŒããšããã¥ã¡ã³ãã®èªåãã©ãŒãããã¢ã³ãã³ããã³ã³/ã¹ããã³ â Terraform ã¢ãžã¥ãŒã« (WIP) ã®ãžã§ãã¬ãŒã¿ãŒantonbabenko/modules.tf-lambda â ããžã¥ã¢ã« ãã€ã¢ã°ã©ã ããã® Terraform ã³ãŒã ãžã§ãã¬ãŒã¿ãŒ (WIP)- www.terraform-bââest-practices.com
Medium.com/@anton.babenko (æ°ããæçš¿ã¯ç§ã®å人ãŠã§ããµã€ã www.antonbabenko.com/ ã«ãããŸã)- @antonbabenko - Twitterãããã³ããŸããŸãª Slacks
ç§ã®ååã¯ã¢ã³ãã³ã»ããã³ã³ã§ãã ãããããç§ãæžããã³ãŒãã䜿çšãã人ãããã§ãããã ç§ã¯çµ±èšã«ã¢ã¯ã»ã¹ã§ããã®ã§ããããŸã§ä»¥äžã«èªä¿¡ãæã£ãŠãã®ããšã«ã€ããŠè©±ããŸãã
ç§ã¯ Terraform ã«åãçµãã§ããã2015 幎以æ¥ãTerraform ãš Amazon ã«é¢é£ããå€æ°ã®ãªãŒãã³ãœãŒã¹ ãããžã§ã¯ãã«ç©æ¥µçã«åå ããè²¢ç®ããŠããŸããã
ãã以æ¥ãç§ã¯ãããèå³æ·±ãæ¹æ³ã§è¡šçŸããã®ã«ååãªã³ãŒããæžããŸããã ãããŠãä»ããããã«ã€ããŠã話ãããããšæããŸãã
Terraform ã®æäœã®è€éããšè©³çŽ°ã«ã€ããŠèª¬æããŸãã ããããããã¯å®éã® HighLoad ã®äž»é¡ã§ã¯ãããŸããã ãããŠä»ãããªãã¯ãã®çç±ãç解ããã§ãããã
æéãçµã€ã«ã€ããŠãTerraform ã¢ãžã¥ãŒã«ãæžãå§ããŸããã ãŠãŒã¶ãŒã質åãæžããã®ã§ãç§ããããæžãçŽããŸããã 次ã«ãã³ãããåããã¯ãªã©ã䜿çšããŠã³ãŒãããã©ãŒãããããããã®ããŸããŸãªãŠãŒãã£ãªãã£ãäœæããŸããã
èå³æ·±ããããžã§ã¯ãããããããããŸããã ç§ã¯ã³ãŒãçæã奜ãã§ããç§ãšããã°ã©ããŒã®ããã«ã³ã³ãã¥ãŒã¿ãŒãã©ãã©ãäœæ¥ãè¡ã£ãŠãããã®ã奜ããªã®ã§ãçŸåšã¯ããžã¥ã¢ã« ãã€ã¢ã°ã©ã ãã Terraform ã³ãŒã ãžã§ãã¬ãŒã¿ãŒã®éçºã«åãçµãã§ããŸãã ããããããèŠãããšãããæ¹ããããããããŸããã ç¢å°ã®ä»ããçŸããç®±ã§ãã ããšã¯ã¹ããŒãããã¿ã³ãã¯ãªãã¯ããŠããã¹ãŠãã³ãŒããšããŠååŸã§ããã°çŽ æŽããããšæããŸãã
ç§ã¯ãŠã¯ã©ã€ãåºèº«ã§ãã ç§ã¯ãã«ãŠã§ãŒã«é·å¹Žäœãã§ããŸãã
ãŸãããã®ã¬ããŒãã®æ å ±ã¯ãç§ã®ååãç¥ã£ãŠããŠããœãŒã·ã£ã« ãããã¯ãŒã¯ã§ç§ãèŠã€ãã人ã ããåéããŸããã ã»ãŒãã€ãåããã åãã€ããŠããŸãã
åè¿°ããããã«ãç§ã¯ Terraform AWS ã¢ãžã¥ãŒã«ã®ã¡ã€ã³ã¡ã³ãããŒã§ããTerraform AWS ã¢ãžã¥ãŒã«ã¯ãVPCãèªåã¹ã±ãŒãªã³ã°ãRDS ãªã©ã®æãäžè¬çãªã¿ã¹ã¯ã®ã¢ãžã¥ãŒã«ããã¹ããã GitHub äžã®æ倧ã®ãªããžããªã® XNUMX ã€ã§ãã
ãããŠãä»èããããšã¯æãåºæ¬çãªãã®ã§ãã Terraform ãäœãªã®ããç解ããŠãããã©ããçåãããå Žåã¯ãå¥ã®å Žæã«æéãè²»ãããã»ããããã§ãããã ããã§ã¯å°éçšèªãããããåºãŠããŸãã ãããŠç§ã¯ãã¬ããŒãã®ã¬ãã«ãæé«ã§ãããšæèšããããšã«èºèºããŸããã§ããã ããã¯ãå€ãã®èª¬æãªãã§ãèãããããã¹ãŠã®çšèªã䜿çšããŠè©±ãããšãã§ããããšãæå³ããŸãã
Terraform ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ãŒããšããŠäœæãèšç»ã管çã§ãããŠãŒãã£ãªãã£ãšã㊠2014 幎ã«ç»å ŽããŸããã ããã§ã®éèŠãªæŠå¿µã¯ãã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãã§ãã
å
ã»ã©ãèšã£ãããã«ããã¹ãŠã®ããã¥ã¡ã³ãã¯æ¬¡ã®ããã«æžãããŠããŸãã
éåžžã® Terraform æ§æãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸããæåã«ããã€ãã®å€æ°ãå®çŸ©ããŸãã
ä»åã¯ãaws_regionããå®çŸ©ããŸãã
次ã«ãã©ã®ãããªãªãœãŒã¹ãäœæãããã説æããŸãã
äŸåé¢ä¿ãšãããã€ããŒãèªã¿èŸŒãããã«ãããã€ãã®ã³ãã³ããç¹ã«ãterraform initããå®è¡ããŸãã
ãããŠããterraform applyãã³ãã³ããå®è¡ããŠãæå®ããæ§æãäœæãããªãœãŒã¹ãšäžèŽãããã©ããã確èªããŸãã ãããŸã§äœãäœæããŠããªããããTerraform ã¯ãããã®ãªãœãŒã¹ãäœæããããã«æ±ããŸãã
ããã確èªããŸãã ãããã£ãŠãseasnail ãšåŒã°ãããã±ããäœæããŸãã
åæ§ã®ãŠãŒãã£ãªãã£ãããã€ããããŸãã Amazon ã䜿çšããŠãã人ã®å€ãã¯ãAWS CloudFormationãGoogle Cloud Deployment ManagerããŸã㯠Azure Resource Manager ãç¥ã£ãŠããŸãã ããããã®ãããªã㯠ã¯ã©ãŠã ãããã€ããŒã«ã¯ãããããã®ãããªã㯠ã¯ã©ãŠã ãããã€ããŒå
ã®ãªãœãŒã¹ã管çããããã®ãããçš®ã®ç¬èªã®å®è£
ããããŸãã Terraform ã¯ã100 ãè¶
ãããããã€ããŒã管çã§ãããããç¹ã«äŸ¿å©ã§ãã (詳现ã¯ãã¡ã
Terraform ãåœåããè¿œæ±ããŠããç®æš:
- Terraform ã¯ããªãœãŒã¹ã®åäžãã¥ãŒãæäŸããŸãã
- ãã¹ãŠã®ææ°ã®ãã©ãããã©ãŒã ããµããŒãã§ããŸãã
- ãããŠãTerraform ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãå®å šãã€äºæž¬ã©ããã«å€æŽã§ããããã«ãããŠãŒãã£ãªãã£ãšããŠæåããèšèšãããŸããã
2014 幎ããã®æèã§ã¯ãäºæž¬å¯èœããšããèšèã¯éåžžã«çãããã®ã«èãããŸããã
Terraform ã¯æ±çšãŠãŒãã£ãªãã£ã§ãã API ãããå Žåã¯ããã¹ãŠãå®å šã«å¶åŸ¡ã§ããŸãã
- 120 ãè¶ ãããããã€ããŒã䜿çšããŠãå¿ èŠãªãã®ãã¹ãŠã管çã§ããŸãã
- ããšãã°ãTerraform ã䜿çšã㊠GitHub ãªããžããªãžã®ã¢ã¯ã»ã¹ãèšè¿°ããããšãã§ããŸãã
- Jira ã§ãã°ãäœæããŠéããããšãã§ããŸãã
- New Relic ã¡ããªã¯ã¹ã管çã§ããŸãã
- æ¬åœã«å¿ èŠãªå Žåã¯ãDropbox ã«ãã¡ã€ã«ãäœæããããšãã§ããŸãã
ããã¯ãã¹ãŠãGo ã§èšè¿°ã§ãããªãŒãã³ API ãåãã Terraform ãããã€ããŒã䜿çšããŠå®çŸãããŸãã
åã®ã¹ã©ã€ãã§ç€ºããããã«ãTerraform ã䜿ãå§ãããµã€ãäžã®ããã¥ã¡ã³ããèªã¿ããããªãèŠãŠãmain.tf ãæžãå§ãããšããŸãã
VPC ãäœæãããã¡ã€ã«ãã§ããŸããã
VPC ãäœæããå Žåã¯ãçŽ 12 è¡ãæå®ããŸãã ã©ã®ãªãŒãžã§ã³ã«äœæããããIP ã¢ãã¬ã¹ã®ã©ã® cidr_block ã䜿çšããããèšè¿°ããŸãã ããã ãã§ãã
åœç¶ããããžã§ã¯ãã¯åŸã ã«æé·ããŠãããŸãã
ãããŠãããã«ããããã®æ°ãããã®ãè¿œå ããããšã«ãªããŸã: ãªãœãŒã¹ãããŒã¿ ãœãŒã¹ãæ°ãããããã€ããŒãšçµ±åããããšãçªç¶ Terraform ã䜿çšã㊠GitHub ã¢ã«ãŠã³ãå ã®ãŠãŒã¶ãŒã管çããããšãªã©ãå¿ èŠã«ãªããŸãã DNS ãããã€ããŒã¯ãããããã®ã«å¯Ÿå¿ããŸãã Terraform ã䜿çšãããšãããç°¡åã«ãªããŸãã
次ã®äŸãèŠãŠã¿ãŸãããã
VPC ã®ãªãœãŒã¹ã«ã€ã³ã¿ãŒãããã«ã¢ã¯ã»ã¹ã§ããããã«ãããããinternet_gateway ãåŸã ã«è¿œå ããŸãã ããã¯è¯ãã¢ã€ãã¢ã§ããã
çµæã¯æ¬¡ã® main.tf ã«ãªããŸãã
ãã㯠main.tf ã®å é éšåã§ãã
ãã㯠main.tf ã®äžéšã§ãã
次ã«ããµãããããè¿œå ããŸãã NAT ã²ãŒããŠã§ã€ãã«ãŒããã«ãŒãã£ã³ã° ããŒãã«ããã®ä»ã®ãµãããããè¿œå ããæç¹ã§ã¯ã38 åç·ã§ã¯ãªããçŽ 200 ïœ 300 åç·ã«ãªããŸãã
ã€ãŸããmain.tf ãã¡ã€ã«ã¯åŸã ã«å€§ãããªããŸãã ãããŠãå€ãã®å Žåããã¹ãŠã 10 ã€ã®ãã¡ã€ã«ã«å ¥ãã人ãããŸãã main.tf ã«ã¯ 20 ïœ 10 Kb ã衚瀺ãããŸãã 20 ïœ 10 Kb ãããã¹ã ã³ã³ãã³ãã§ãããšæ³åããŠãã ããã ãããŠããã¹ãŠã¯ãã¹ãŠãšã€ãªãã£ãŠããŸãã ããã§ã¯åŸã ã«äœæ¥ãå°é£ã«ãªã£ãŠããŸãã 20 ïœ XNUMX KB ãé©åãªãŠãŒã¶ãŒ ã±ãŒã¹ã§ãããå Žåã«ãã£ãŠã¯ãã以äžã§ãã ãããŠã人ã ã¯å¿ ããããããæªããšã¯èããŸããã
ã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã§ã¯ãªããéåžžã®ããã°ã©ãã³ã°ãšåæ§ã«ãç§ãã¡ã¯ããŸããŸãªã¯ã©ã¹ãããã±ãŒãžãã¢ãžã¥ãŒã«ãã°ã«ãŒãã䜿çšããããšã«æ £ããŠããŸãã Terraform ã䜿çšãããšãã»ãŒåãããšãã§ããŸãã
- ã³ãŒãã¯å¢ãç¶ããŠããŸãã
- ãªãœãŒã¹éã®äŸåé¢ä¿ãå¢å€§ããŠããŸãã
ãããŠãç§ãã¡ã«ã¯å€§ããªããŒãºããããŸãã ç§ãã¡ã¯ããããã®ããã«ã¯çããŠãããªãããšãç解ããŠããŸãã ç§ãã¡ã®ã³ãŒãã¯èšå€§ãªãã®ã«ãªã£ãŠããŠããŸãã ãã¡ããã10 ïœ 20 Kb ã¯ããã»ã©åºå€§ã§ã¯ãããŸããããããã§ã¯ãããã¯ãŒã¯ ã¹ã¿ãã¯ã«ã€ããŠã®ã¿è©±ããŸããã€ãŸãããããã¯ãŒã¯ ãªãœãŒã¹ãè¿œå ããã ãã§ãã ããã§è©±ããŠããã®ã¯ã100 Kb ãç°¡åã«çµã¿èŸŒãããšãã§ãã Application Load Balancerããããã€ã¡ã³ã ES ã¯ã©ã¹ã¿ãŒãKubernetes ãªã©ã®è©±ã§ã¯ãããŸããã ããããã¹ãŠæžãçãããšãTerraform ã Terraform ã¢ãžã¥ãŒã«ãæäŸããŠããããšãããã«ããããŸãã
Terraform ã¢ãžã¥ãŒã«ã¯ãã°ã«ãŒããšããŠç®¡çãããèªå·±å®çµåã® Terraform æ§æã§ãã Terraform ã¢ãžã¥ãŒã«ã«ã€ããŠç¥ã£ãŠããå¿ èŠãããã®ã¯ããã ãã§ãã ãããã¯ãŸã£ããã¹ããŒãã§ã¯ãªããäœãã«äŸåããŠè€éãªæ¥ç¶ãè¡ãããšã¯ã§ããŸããã ããã¯ãã¹ãŠéçºè ã®è©ã«ããã£ãŠããŸãã ã€ãŸããããã¯ãã§ã«äœæãããã皮㮠Terraform æ§æã«ãããŸããã ãŸãããããã°ã«ãŒããšããŠåŒã³åºãããšãã§ããŸãã
ãããã£ãŠã10 ïœ 20 ïœ 30 Kb ã®ã³ãŒããã©ã®ããã«æé©åããããç解ããããšããŠããŸãã ããã€ãã®ã¢ãžã¥ãŒã«ã䜿çšããå¿ èŠãããããšã«åŸã ã«æ°ã¥ãå§ããŠããŸãã
æåã«ééããã¢ãžã¥ãŒã«ã®ã¿ã€ãã¯ãªãœãŒã¹ ã¢ãžã¥ãŒã«ã§ãã 圌ãã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãäœã§ããããããžãã¹ãäœã§ããããå Žæãšç¶æ³ãäœã§ããããç解ããŠããŸããã ãããã¯ãŸãã«ãç§ããªãŒãã³ãœãŒã¹ ã³ãã¥ããã£ãšååããŠç®¡çããã€ã³ãã©ã¹ãã©ã¯ãã£ã®æåã®æ§æèŠçŽ ãšããŠææ¡ããã¢ãžã¥ãŒã«ã§ãã
ãªãœãŒã¹ã¢ãžã¥ãŒã«ã®äŸã
ãªãœãŒã¹ ã¢ãžã¥ãŒã«ãåŒã³åºããšãã¯ããã®ã³ã³ãã³ããã©ã®ãã¹ããããŒãããããæå®ããŸãã
ã©ã®ããŒãžã§ã³ãããŠã³ããŒãããããæå®ããŸãã
ããã«å€§éã®åŒæ°ãæž¡ããŸãã ããã ãã§ãã ãã®ã¢ãžã¥ãŒã«ã䜿çšãããšãã«ç¥ã£ãŠããå¿ èŠãããã®ã¯ããã ãã§ãã
ææ°ããŒãžã§ã³ã䜿çšããã°ãã¹ãŠãå®å®ãããšå€ãã®äººãèããŠããŸãã ããããããã§ã¯ãããŸããã ã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ããŒãžã§ã³ç®¡çããå¿ èŠãããããã®ã³ã³ããŒãã³ããŸãã¯ãã®ã³ã³ããŒãã³ããã©ã®ããŒãžã§ã³ã«ãããã€ãããããæ確ã«çããå¿ èŠããããŸãã
ãã®ã¢ãžã¥ãŒã«å ã®ã³ãŒãã¯æ¬¡ã®ãšããã§ãã ã»ãã¥ãªãã£ã°ã«ãŒãã¢ãžã¥ãŒã«ã ããã§ã¹ã¯ããŒã«ã¯ 640 è¡ç®ãŸã§é²ã¿ãŸãã èããããããããæ§æ㧠Amazon ã«ã»ãã¥ãªã㣠ã°ã«ãŒã ãªãœãŒã¹ãäœæããããšã¯ãéåžžã«ç°¡åãªäœæ¥ã§ã¯ãããŸããã åã«ã»ãã¥ãªã㣠ã°ã«ãŒããäœæããããã«æž¡ãã«ãŒã«ãæ瀺ããã ãã§ã¯ååã§ã¯ãããŸããã ããã¯ãšãŠãç°¡åãªããšã§ãããã Amazon å ã«ã¯äœçŸäžãã®ç°ãªãå¶éããããŸãã ããšãã°ã次ã®ããã«äœ¿çšãããšã VPCãšã³ããã€ã³ãããã¬ãã£ãã¯ã¹ãªã¹ããåçš®API ããããã¹ãŠãä»ã®ãã¹ãŠãšçµã¿åãããããšãããšãTerraform ã§ã¯ãããå®è¡ã§ããŸããã ãŸããAmazon API ã§ã¯ãããèš±å¯ãããŠããŸããã ãããã£ãŠããã®æãããããžãã¯ããã¹ãŠã¢ãžã¥ãŒã«ã«é ãã次ã®ãããªã³ãŒãããŠãŒã¶ãŒã«æäŸããå¿ èŠããããŸãã
ãŠãŒã¶ãŒã¯å éšã§ã©ã®ããã«äœãããŠããããç¥ãå¿ èŠã¯ãããŸããã
ãªãœãŒã¹ ã¢ãžã¥ãŒã«ã§æ§æããã 0.11 çªç®ã®ã¿ã€ãã®ã¢ãžã¥ãŒã«ã¯ãããžãã¹ã«ããé©çšå¯èœãªåé¡ããã§ã«è§£æ±ºããŠããŸãã å€ãã®å Žåããã㯠Terraform ã®æ¡åŒµæ©èœã§ãããäŒç€Ÿã®æšæºã«åãããŠã¿ã°ã«ããã€ãã®å³å¯ãªå€ãèšå®ããå Žæã§ãã Terraform ã§çŸåšäœ¿çšãèš±å¯ãããŠããªãæ©èœãããã«è¿œå ããããšãã§ããŸãã ãããä»ã§ãã çŸåšãããŒãžã§ã³ XNUMX ã¯éå»ã®ãã®ã«ãªãã€ã€ãããŸãã ããã§ããããªããã»ããµãjsonnetãcookiecutterããã®ä»å€æ°ã®ãã®ã¯ãæ¬æ Œçãªäœæ¥ã«äœ¿çšããå¿ èŠãããè£å©ã¡ã«ããºã ã§ãã
次ã«ããã®äŸãããã€ã瀺ããŸãã
ã€ã³ãã©ã¹ãã©ã¯ã㣠ã¢ãžã¥ãŒã«ã¯ãŸã£ããåãæ¹æ³ã§åŒã³åºãããŸãã
ã³ã³ãã³ããããŠã³ããŒããããœãŒã¹ã瀺ãããŸãã
äžé£ã®å€ãæž¡ããããã®ã¢ãžã¥ãŒã«ã«æž¡ãããŸãã
次ã«ããã®ã¢ãžã¥ãŒã«å ã§ãVPC ãŸã㯠Application Load Balancer ãäœæããããããŸãã¯ã»ãã¥ãªã㣠ã°ã«ãŒããŸã㯠Elastic Container Service ã¯ã©ã¹ã¿ãŒçšã®äœæããããã«ãäžé£ã®ãªãœãŒã¹ ã¢ãžã¥ãŒã«ãåŒã³åºãããŸãã
ã¢ãžã¥ãŒã«ã«ã¯ XNUMX çš®é¡ãããŸãã ãã®ã¬ããŒãã§ã°ã«ãŒãåããæ å ±ã®ã»ãšãã©ã¯ããã¥ã¡ã³ãã«èšèŒãããŠããªãããããããç解ããããšãéèŠã§ãã
ãããŠãçŸåšã® Terraform ã®ããã¥ã¡ã³ãã«ã¯ããããã®æ©èœãããã䜿çšã§ãããšã ãæžãããŠãããããéåžžã«åé¡ããããŸãã ãããã圌女ã¯ãããã®æ©èœã®äœ¿ãæ¹ãããªããããã䜿ã£ãã»ããè¯ãã®ãã«ã€ããŠã¯èªã£ãŠããŸããã ãããã£ãŠãéåžžã«å€ãã®äººãèããããªãããšãæžããŠããŸãã
次ã«ããããã®ã¢ãžã¥ãŒã«ã®äœææ¹æ³ãèŠãŠã¿ãŸãããã 次ã«ãããããåŒã³åºãæ¹æ³ãšã³ãŒããæäœããæ¹æ³ãèŠãŠãããŸãã
Terraform ã¬ãžã¹ã㪠-
ãã³ã #0 ã¯ããªãœãŒã¹ ã¢ãžã¥ãŒã«ãäœæããªãããšã§ãã ãããã®ã¢ãžã¥ãŒã«ã®ã»ãšãã©ã¯ãã§ã«äœæãããŠããŸãã å ã»ã©ãè¿°ã¹ãããã«ããããã¯ãªãŒãã³ãœãŒã¹ã§ãããããžãã¹ ããžãã¯ã¯å«ãŸããŠããããIP ã¢ãã¬ã¹ããã¹ã¯ãŒããªã©ã®ããŒãã³ãŒããããå€ããããŸããããã®ã¢ãžã¥ãŒã«ã¯éåžžã«æè»ã§ãã ãããŠããã¯ãããããã§ã«æžãããŠããã§ãããã Amazon ã®ãªãœãŒã¹ã«ã¯å€ãã®ã¢ãžã¥ãŒã«ããããŸãã çŽ650ããã®ã»ãšãã©ãé«å質ã§ãã
ãã®äŸã§ã¯ã誰ããããªãã®ãšããã«æ¥ãŠããèšããŸããããããŒã¿ããŒã¹ã管çã§ããããã«ãªãããã§ãã ããŒã¿ããŒã¹ãäœæã§ããããã«ã¢ãžã¥ãŒã«ãäœæããŠãã ãããã ãã®äººã¯ Amazon ã Terraform ã®å®è£ ã®è©³çŽ°ãç¥ããŸããã 圌ã¯åã«ãMSSQL ã管çãããããšèšããŸããã ã€ãŸããã¢ãžã¥ãŒã«ãåŒã³åºããããã«ãšã³ãžã³ ã¿ã€ããæž¡ããã¿ã€ã ãŸãŒã³ã瀺ãããšãæå³ããŸãã
ãããŠããã®ã¢ãžã¥ãŒã«å ã« 0.11 ã€ã®ç°ãªããªãœãŒã¹ãäœæããããšã人ã¯ç¥ããªãã¯ãã§ããXNUMX ã€ã¯ MSSQL çšããã XNUMX ã€ã¯ãã®ä»ãã¹ãŠçšã§ããããã¯ãTerraform XNUMX ã§ã¯ã¿ã€ã ãŸãŒã³å€ããªãã·ã§ã³ãšããŠæå®ã§ããªãããã§ãã
ãããŠããã®ã¢ãžã¥ãŒã«ã®çµäºæã«ã人ã¯åã«ã¢ãã¬ã¹ãåãåãããšãã§ããŸãã 圌ã¯ãã©ã®ããŒã¿ããŒã¹ãã©ã®ãªãœãŒã¹ããããããã¹ãŠãå éšã§äœæããŠããã®ããç¥ããŸããã ããã¯é èœã®éåžžã«éèŠãªèŠçŽ ã§ãã ãããŠãããã¯ãªãŒãã³ãœãŒã¹ã§å ¬éãããŠããã¢ãžã¥ãŒã«ã ãã§ãªãããããžã§ã¯ããããŒã å ã§äœæããã¢ãžã¥ãŒã«ã«ãåœãŠã¯ãŸããŸãã
ãã㯠XNUMX çªç®ã®åŒæ°ã§ãããTerraform ããã°ãã䜿çšããŠããå Žåã«ã¯éåžžã«éèŠã§ãã äŒç€Ÿã®ãã¹ãŠã® Terraform ã¢ãžã¥ãŒã«ãé 眮ãããªããžããªããããŸãã ãããŠãæéã®çµéãšãšãã«ããã®ãããžã§ã¯ãã®ãµã€ãºã XNUMX ã¡ã¬ãã€ããŸã㯠XNUMX ã¡ã¬ãã€ãã«å¢å ããã®ã¯ããæ®éã®ããšã§ãã ããã§å€§äžå€«ã§ãã
ããããåé¡ã¯ãTerraform ããããã®ã¢ãžã¥ãŒã«ãã©ã®ããã«åŒã³åºããã§ãã ããšãã°ãã¢ãžã¥ãŒã«ãåŒã³åºããŠåãŠãŒã¶ãŒãäœæãããšãTerraform ã¯ãŸããªããžããªå šäœãããŒããã次ã«ãã®ç¹å®ã®ã¢ãžã¥ãŒã«ãé 眮ãããŠãããã©ã«ããŒã«ç§»åããŸãã ãã®æ¹æ³ã§ã¯ãæ¯å 100 ã¡ã¬ãã€ããããŠã³ããŒãããããšã«ãªããŸãã 200 人ãŸã㯠100 人ã®ãŠãŒã¶ãŒã管çããŠããå Žåã¯ã200 ã¡ã¬ãã€ããŸã㯠XNUMX ã¡ã¬ãã€ããããŠã³ããŒãããŠããã®ãã©ã«ããŒã«ç§»åããŸãã ãããã£ãŠãåœç¶ã®ããšãªããããTerraform initããæŒããã³ã«å€§éã®ãã®ãããŠã³ããŒãããå¿ èŠã¯ãããŸããã
ãã®åé¡ã«ã¯ XNUMX ã€ã®è§£æ±ºçããããŸãã XNUMX ã€ç®ã¯ãçžå¯Ÿãã¹ã䜿çšããããšã§ãã ãã®ããã«ããŠãã³ãŒãå ã§ãã©ã«ããŒãããŒã«ã« (./) ã§ããããšã瀺ããŸãã ãããŠãäœããèµ·åããåã«ããã®ãªããžããªã® Git ã¯ããŒã³ãããŒã«ã«ã§äœæããŸãã ãã®æ¹æ³ãªãäžåºŠã§æžã¿ãŸãã
ãã¡ãããæ¬ ç¹ããããããããŸãã ããšãã°ãããŒãžã§ã³ç®¡çã¯äœ¿çšã§ããŸããã ãããŠãããã¯æã«ã¯çããŠããã®ãé£ããããšã§ãã
3çªç®ã®è§£æ±ºçã å€æ°ã®ãµãã¢ãžã¥ãŒã«ããããäœããã®ç¢ºç«ããããã€ãã©ã€ã³ããã§ã«ããå Žåã¯ãã¢ããªããžããªããããŸããŸãªããã±ãŒãžãåéã㊠S1.0.0 ã«ã¢ããããŒãã§ãã MBT ãããžã§ã¯ãããããŸãã ããã¯ãšãŠãè¯ãæ¹æ³ã§ãã ãããã£ãŠããã®ãªãœãŒã¹ãäœæããã³ãŒãã¯éåžžã«å°ãããããiam-user-1.zip ãã¡ã€ã«ã®éãã¯ããã XNUMX KB ã«ãªããŸãã ãããŠãããã¯ã¯ããã«éãåäœããŸãã
ã¢ãžã¥ãŒã«ã§äœ¿çšã§ããªããã®ã«ã€ããŠèª¬æããŸãããã
ãªããããã¢ãžã¥ãŒã«ã«æªåœ±é¿ãäžããã®ã§ãããã? ææªãªã®ã¯ãŠãŒã¶ãŒãæ³å®ããããšã§ãã user ã¯ãããŸããŸãªäººã䜿çšã§ãããããã€ããŒèªèšŒãªãã·ã§ã³ã§ãããšæ³å®ããŸãã ããšãã°ãç§ãã¡ã¯å šå¡ã§ãã®åœ¹å²ãååããŸãã ã€ãŸããTerraform ããã®åœ¹å²ãæ ãããšã«ãªããŸãã ãããŠããã®ããŒã«ã䜿çšããŠä»ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
ãããŠãåé¡ã¯ãVasya ãããã©ã«ãã®ç°å¢å€æ°ã䜿çšãããªã©ãäžæ¹ã®æ¹æ³ã§ Amazon ã«æ¥ç¶ããããšã奜ã¿ãPetya ãç§å¯ã®å Žæã«ããå ±æããŒã䜿çšããããšã奜ãå Žåãäž¡æ¹ãæå®ããããšã¯ã§ããªãããšã§ãããã©ãã©ãŒã ã ãããŠã圌ããèŠãã¿ãçµéšããªãããã«ãã¢ãžã¥ãŒã«å ã§ãã®ãããã¯ã瀺ãå¿ èŠã¯ãããŸããã ããã¯ããé«ãã¬ãã«ã§ç€ºãå¿ èŠããããŸãã ã€ãŸãããªãœãŒã¹ ã¢ãžã¥ãŒã«ãã€ã³ãã©ã¹ãã©ã¯ã㣠ã¢ãžã¥ãŒã«ãããã³ãã®äžã«ã³ã³ããžã·ã§ã³ããããŸãã ãããŠãããã¯ã©ããé«ããšããã«ç€ºãããã¹ãã§ãã
XNUMXçªç®ã®æªã¯ãããã·ã§ããŒã§ãã ããã§ã®æªäºã¯ããã»ã©ç°¡åã§ã¯ãããŸããããªããªããã³ãŒããæžããŠãããããŸãæ©èœããã®ã§ããã°ããããæ©èœããã®ã§ããã°ããªããããå€æŽããå¿ èŠããããšèãããããããªãããã§ãã
åé¡ã¯ããŸãããã®ããããžã§ããŒããã€èµ·åããããåžžã«å¶åŸ¡ã§ããããã§ã¯ãªãããšã§ãã ãããŠç¬¬äºã«ãaws ec2 ãäœãæå³ããã®ããå¶åŸ¡ããããšã¯ã§ããŸãããã€ãŸããä»è©±ããŠããã®ã¯ Linux ãªã®ã Windows ãªã®ãã ãããã£ãŠãç°ãªããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãç°ãªããŠãŒã¶ãŒ ã±ãŒã¹ã§ãåãããã«åäœãããã®ãæžãããšã¯ã§ããŸããã
æãäžè¬çãªäŸã¯ãå ¬åŒããã¥ã¡ã³ãã«ã瀺ãããŠããŸãããaws_instance ãèšè¿°ããŠå€æ°ã®åŒæ°ãæå®ããå Žåãããã§ããããžã§ããŒãlocal-execããæå®ã㊠ansible ãå®è¡ããã°åé¡ã¯ãããŸããããã¬ã€ããã¯ã
å®éãã¯ããããã¯äœãåé¡ãããŸããã ãããæåéãããã«ããã® local-exec ãšãããã®ããããšãã° launch_configuration ã«ã¯ååšããªãããšã«æ°ã¥ãã§ãããã
ãŸããlaunch_configuration ã䜿çšããXNUMX ã€ã®ã€ã³ã¹ã¿ã³ã¹ããèªåã¹ã±ãŒãªã³ã° ã°ã«ãŒããäœæããå Žåãlaunch_configuration ã«ã¯ãããããžã§ããŒãã®æŠå¿µããããŸããã ããŠãŒã¶ãŒããŒã¿ããšããæŠå¿µããããŸãã
ãããã£ãŠãããæ®éçãªè§£æ±ºçã¯ããŠãŒã¶ãŒ ããŒã¿ã䜿çšããããšã§ãã ãããŠãã€ã³ã¹ã¿ã³ã¹ããªã³ã«ãªã£ããšãã«ã€ã³ã¹ã¿ã³ã¹èªäœã§èµ·åãããããèªåã¹ã±ãŒãªã³ã° ã°ã«ãŒãããã® launch_configuration ã䜿çšãããšãã«åããŠãŒã¶ãŒ ããŒã¿å ã§èµ·åãããŸãã
ããããžã§ããŒã¯æ¥çã³ã³ããŒãã³ãã§ãããããããã§ãããããžã§ããŒãå®è¡ãããå Žåã¯ããªãœãŒã¹ã XNUMX ã€äœæãããæç¹ã§ããããžã§ããŒãã³ãã³ããå®è¡ããå¿ èŠããããŸãã ããããç¶æ³ã¯ãããããããŸãã
ãããŠãããã«æãæ£ãããªãœãŒã¹ã¯ null_resource ãšåŒã°ããŸãã Null_resource ã¯ãå®éã«ã¯äœæãããªããããŒã®ãªãœãŒã¹ã§ãã API ãèªåã¹ã±ãŒãªã³ã°ãªã©ãäœã圱é¿ããŸããã ãã ããã³ãã³ãããã€å®è¡ããããå¶åŸ¡ã§ããŸãã ãã®å Žåãã³ãã³ãã¯äœæäžã«å®è¡ãããŸãã
ãªã³ã¯
ããã€ãã®å åããããŸãã ãã¹ãŠã®å åã«ã€ããŠè©³ãã説æããã€ããã¯ãããŸããã ããã«é¢ããèšäºããããŸãã ããããTerraform ã䜿çšããããä»ã®äººã®ã¢ãžã¥ãŒã«ã䜿çšãããããããšãããå Žåã¯ããªãŒãã³ ãœãŒã¹ã®ã»ãšãã©ã®ã³ãŒããšåæ§ã«ãå€ãã®ã¢ãžã¥ãŒã«ãåèªã®ããŒãºã«åãããŠäººã ã«ãã£ãŠäœæãããŠããããšã«ããæ°ã¥ããŸãã ããç·ããããæžããŠåé¡ã解決ããã GitHub ã«ä¿åããŠããã®ãŸãŸã«ããŠãããŸããã ããã¯åç¶ããŸãããããã«ããã¥ã¡ã³ãããµã³ãã«ããªããã°ã誰ãããã䜿çšããŸããã ãããŠãç¹å®ã®ã¿ã¹ã¯ä»¥å€ã®ããšã解決ã§ããæ©èœããªããã°ã誰ãããã䜿çšããŸããã ãŠãŒã¶ãŒã倱ãæ¹æ³ã¯ãããããããŸãã
人ã ã«äœ¿ã£ãŠããããããã«äœããæžãããå Žåã¯ã次ã®æšèã«åŸãããšããå§ãããŸãã
圌ãã¯ä»¥äžã®ãšããã§ãã
- ããã¥ã¡ã³ããšäŸã
- å®å šãªæ©èœã
- 劥åœãªããã©ã«ãã
- ã¯ãªãŒã³ãªã³ãŒãã
- ãã¹ãã
ãã¹ãã¯æžãã®ãéåžžã«é£ãããããç¶æ³ã¯ç°ãªããŸãã ç§ã¯ããã¥ã¡ã³ããšäŸããã£ãšä¿¡ããŠããŸãã
ããã§ãã¢ãžã¥ãŒã«ã®æžãæ¹ãæ€èšããŸããã åŒæ°ã¯ XNUMX ã€ãããŸãã XNUMX ã€ç®ã¯ããããæãéèŠã§ãããã§ããããšãªãæžããªãããšã§ãããªããªããå€ãã®äººããã§ã«ãããã®ã¿ã¹ã¯ãããªãããåã«è¡ã£ãŠããããã§ãã 次ã«ãããã§ã決å®ããå Žåã¯ãã¢ãžã¥ãŒã«ãšããããžã§ããŒã§ãããã€ããŒã䜿çšããªãããã«ããŠãã ããã
ããã¯ããã¥ã¡ã³ãã®ç°è²ã®éšåã§ãã ããªãã¯ä»ããèããŠãããããããŸããã çŽåŸãããªããã ããããXNUMXãæ以å ã«ããããŸãã
次ã«ããããã®ã¢ãžã¥ãŒã«ãåŒã³åºãæ¹æ³ã«ã€ããŠèª¬æããŸãã
ç§ãã¡ã¯ã³ãŒããæéã®çµéãšãšãã«å¢å€§ããããšãç解ããŠããŸãã ãã¡ã€ã«ã¯ 20 ã€ã§ã¯ãªãããã§ã« XNUMX åãããŸãã ãããã¯ãã¹ãŠ XNUMX ã€ã®ãã©ã«ããŒå ã«ãããŸãã ããã㯠XNUMX ã€ã®ãã©ã«ããŒãããããŸããã ãããããäœããã®æ¹æ³ã§å°åããšãããã€ãã®ã³ã³ããŒãã³ãããšã«åé¡ãå§ããŠããã®ãããããŸããã ããã§ãåæãšãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®åºç€ãããã€ãã§ããããšãããããŸãã ã€ãŸãããããã¯ãŒã¯ ãªãœãŒã¹ãå€æŽããå Žåã«äœããã¹ãããæ®ãã®ãªãœãŒã¹ãã©ããã¹ããããããã®äŸåé¢ä¿ãåŒãèµ·ããæ¹æ³ãªã©ãç解ããå¿ èŠããããŸãã
䞡極端ããããŸãã æåã®æ¥µç«¯ãªå Žåã¯ããªãŒã«ã€ã³ã¯ã³ã§ãã ãã¹ã¿ãŒãã¡ã€ã«ã¯ XNUMX ã€ãããŸãã åœé¢ã¯ãããã Terraform Web ãµã€ãã®å ¬åŒãã¹ã ãã©ã¯ãã£ã¹ã§ããã
ããããçŸåšã¯éæšå¥šãšããŠåé€ãããŠãããšæžãããŠããŸãã æéã®çµéãšãšãã«ãTerraform ã³ãã¥ããã£ã¯ã人ã ããããžã§ã¯ããããŸããŸãªæ¹æ³ã§äœ¿çšãå§ãããããããããã¹ã ãã©ã¯ãã£ã¹ãšã¯çšé ãããšã«æ°ã¥ããŸããã ãããŠåé¡ãããã ããšãã°ããã¹ãŠã®äŸåé¢ä¿ã XNUMX ãæã«ãªã¹ãããå Žåã§ãã ãTerraform ãã©ã³ããã¯ãªãã¯ãããšãTerraform ããã¹ãŠã®ãªãœãŒã¹ã®ç¶æ ãæŽæ°ãããŸã§ã«ããªãã®æéããããå ŽåããããŸãã
å€ãã®æéã¯ãããšãã° 5 åã§ãã 人ã«ãã£ãŠã¯ãããã¯ãšãŠãé·ãæéã§ãã 15åããã£ãäŸãèŠãããšããããŸãã AWS API ã¯ãåãªãœãŒã¹ã®ç¶æ ã§äœãèµ·ãã£ãŠããããææ¡ããã®ã« 15 åãè²»ãããŸããã ããã¯éåžžã«åºããšãªã¢ã§ãã
ãããŠãåœç¶ã®ããšãªããã15 ãæã§äœããå€æŽãããå Žåãé¢é£ããåé¡ã衚瀺ãããŸãããã®åŸ 0.11 ååŸ ã€ãšãããã€ãã®å€æŽãå«ããã£ã³ãã¹ã衚瀺ãããŸãã åŸãåãããã¯ãããšæžããããäœãåé¡ãçºçããŸããã ããã¯éåžžã«çŸå®çãªäŸã§ãã Terraform ã¯åé¡ãããŠãŒã¶ãŒãä¿è·ããããšã¯ããŸããã ã€ãŸããæžãããããšãæžããŸãã åé¡ã¯ããã§ããããããªãèªèº«ã®åé¡ã§ãã Terraform 0.12 ã¯äœã®åœ¹ã«ãç«ã¡ãŸãããã XNUMX ã«ã¯ããVasyaãæ¬åœã«ããã欲ããã®ã§ãããæ£æ°ã«æ»ã£ãŠãããŸãã?ããšèšãããšãã§ããèå³æ·±ãå Žæãããã€ããããŸãã
XNUMX çªç®ã®æ¹æ³ã¯ããã®é åãæžããããšã§ããã€ãŸããããå Žæããã®é話ãå¥ã®å Žæããæ¥ç¶ããã«ãããªããŸãã
å¯äžã®åé¡ã¯ãããå€ãã®ã³ãŒããèšè¿°ããå¿ èŠãããããšã§ããã€ãŸããå€æ°ã®ãã¡ã€ã«ã«å€æ°ãèšè¿°ãããããæŽæ°ããå¿ èŠããããŸãã ããã奜ãŸãªã人ãããŸãã ããã¯ç§ã«ãšã£ãŠæ®éã®ããšã§ãã ãããŠãããããå¥ã ã®å Žæã«æžãå¿ èŠã¯ãªãããã¹ãŠã XNUMX ãæã«ãŸãšãããããšèãã人ãããŸãã ããã¯å¯èœã§ããããã㯠XNUMX çªç®ã®æ¥µç«¯ã§ãã
ããã ãã®ããšãäžãæã«äœãã§ããã®ã¯èª°ã§ããïŒ XNUMX人ãXNUMX人ãXNUMX人ãã€ãŸã誰ãã䜿ã£ãŠããŸãã
ãããŠãXNUMX ã€ã®ç¹å®ã®ã³ã³ããŒãã³ããXNUMX ã€ã®ãããã¯ããŸã㯠XNUMX ã€ã®ã€ã³ãã©ã¹ãã©ã¯ã㣠ã¢ãžã¥ãŒã«ã誰ãåŒã¶ã®ã§ãããã? ïŒäººããïŒäººãããã ããã¯ã«ãã³ããã
æãäžè¬çãªçãã¯ãã®äžéã§ãã ãããžã§ã¯ãã倧èŠæš¡ãªå Žåãé©åãªãœãªã¥ãŒã·ã§ã³ããªãããã¹ãŠãããŸãããããã§ã¯ãªããšããç¶æ³ããããããæçµçã«ã¯æ··åãããã®ã«ãªããŸãã äž¡æ¹ã«å©ç¹ãããããšãç解ããŠããéããããã«åé¡ã¯ãããŸããã
ã¹ã¿ã㯠VPC ã§äœããå€æŽããããã®å€æŽã EC2 ã«é©çšãããå Žåãã€ãŸããæ°ãããµããããããã£ãããã«èªåã¹ã±ãŒãªã³ã° ã°ã«ãŒããæŽæ°ãããå Žåãç§ã¯ãã®çš®ã®äŸåé¢ä¿ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãåŒã³åºããŸãã 解決çã¯ããã€ããããŸãã誰ãäœã䜿ãã®ã?
ã©ã®ãããªè§£æ±ºçãããããææ¡ã§ããŸãã Terraform ã䜿çšããŠéæ³ãå®è¡ããããšããMakefile ã䜿çšã㊠Terraform ã䜿çšããããšãã§ããŸãã ããã§äœããå€æŽããããã©ããã確èªããããã§èµ·åã§ããŸãã
ãã®æ±ºå®ãã©ãæããŸãã? ãããçŽ æŽããã解決çã ãšä¿¡ãã人ã¯ããŸãã? ç¬ã¿ãæµ®ãã¹ãŠããããã©ãããçãã蟌ã¿äžããŠããããã ã
ãã¡ããã家ã§ã¯ãããè©Šããªãã§ãã ããã Terraform ã¯ãTerraform ããå®è¡ãããããã«èšèšãããŠããŸããã
ããå ±åã§ã¯ã圌ãã¯ç§ã«ããèšããŸããããããããããã¯ããŸããããŸãããã éèŠãªã®ã¯ããããæ©èœããŠã¯ãããªããšããããšã§ãã Terraform ã Terraform ããèµ·åãã次㫠Terraform ãèµ·åã§ãããšéåžžã«å°è±¡çã§ãããããã¯è¡ããªãã§ãã ããã Terraform ã¯åžžã«ç°¡åã«èµ·åã§ããã¯ãã§ãã
XNUMX ãæã§äœããå€æŽããããšãã«ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãåŒã³åºãå¿ èŠãããå Žåã¯ãTerragrunt ããããŸãã
Terragrunt ã¯ãTerraform ã®ã¢ããªã³ã§ãããŠãŒãã£ãªãã£ã§ãããã€ã³ãã©ã¹ãã©ã¯ã㣠ã¢ãžã¥ãŒã«ãžã®åŒã³åºãã調æŽããã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã§ããããã«ããŸãã
äžè¬ç㪠Terraform æ§æãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
åŒã³åºãç¹å®ã®ã¢ãžã¥ãŒã«ãæå®ããŸãã
ã¢ãžã¥ãŒã«ã«ã¯ã©ã®ãããªäŸåé¢ä¿ããããŸãã?
ãããŠããã®ã¢ãžã¥ãŒã«ã¯ã©ã®ãããªåŒæ°ãåãå ¥ããŸããã Terragrunt ã«ã€ããŠç¥ã£ãŠããã¹ãããšã¯ããã§ãã¹ãŠã§ãã
ããã¥ã¡ã³ãã¯ããã«ãããGitHub ã«ã¯ 1 ã®ã¹ã¿ãŒããããŸãã ããããã»ãšãã©ã®å Žåããããç¥ã£ãŠããå¿ èŠããããŸãã ããã¯ãTerraform ã®äœ¿çšãéå§ããã°ããã®äŒæ¥ã§ãéåžžã«ç°¡åã«å®è£ ã§ããŸãã
ã€ãŸãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã¯Terragruntã§ãã ä»ã®ãªãã·ã§ã³ããããŸãã
次ã«ãã³ãŒãã®æäœæ¹æ³ã«ã€ããŠèª¬æããŸãã
ã³ãŒãã«æ°ããæ©èœãè¿œå ããå¿ èŠãããå Žåãã»ãšãã©ã®å Žåãããã¯ç°¡åã§ãã æ°ãããªãœãŒã¹ãäœæããŠããã®ã§ããããã¹ãŠãç°¡åã§ãã
äºåã«äœæãããªãœãŒã¹ãããå Žå (ããšãã°ãAWS ã¢ã«ãŠã³ããéèšããåŸã§ Terraform ã«ã€ããŠç¥ãããã§ã«æã£ãŠãããªãœãŒã¹ã䜿çšãããå Žå)ããã®æ¹æ³ã§ã¢ãžã¥ãŒã«ãæ¡åŒµããã®ãé©åã§ããæ¢åã®ãªãœãŒã¹ã®äœ¿çšããµããŒãããŸãã
ãããã¯ãªãœãŒã¹ã䜿çšããæ°ãããªãœãŒã¹ã®äœæããµããŒãããŸããã
åºåã§ã¯ã䜿çšãããå 容ã«å¿ããŠåºå ID ãåžžã«è¿ããŸãã
Terraform 0.11 ã® XNUMX çªç®ã®éåžžã«éèŠãªåé¡ã¯ããªã¹ãã®æäœã§ãã
åé¡ã¯ããã®ãããªãŠãŒã¶ãŒã®ãªã¹ããããå Žåã§ãã
ãããŠããããã¯ãªãœãŒã¹ã䜿çšããŠãããã®ãŠãŒã¶ãŒãäœæãããšããã¹ãŠãããŸããããŸãã ãªã¹ãå šäœã調ã¹ãŠãããããã®ãã¡ã€ã«ãäœæããŸãã ãã¹ãŠé 調ã 次ã«ãããšãã°ãçãäžã«ãã user3 ãããããåé€ããå¿ èŠããããŸãããã®åŸãã€ã³ããã¯ã¹ãå€æŽãããããã圌ã®åŸã«äœæããããã¹ãŠã®ãªãœãŒã¹ãåäœæãããŸãã
ã¹ããŒããã«ç°å¢ã§ã®ãªã¹ãã®æäœã ã¹ããŒããã«ç°å¢ãšã¯äœã§ãã? ããã¯ããã®ãªãœãŒã¹ãäœæããããšãã«æ°ããå€ãäœæãããç¶æ³ã§ãã ããšãã°ãAWS ã¢ã¯ã»ã¹ ããŒãŸã㯠AWS ç§å¯ããŒãã€ãŸããŠãŒã¶ãŒãäœæãããšãæ°ããã¢ã¯ã»ã¹ ããŒãŸãã¯ç§å¯ããŒãåãåããŸãã ãŠãŒã¶ãŒãåé€ãããã³ã«ããã®ãŠãŒã¶ãŒã¯æ°ããããŒãæã€ããšã«ãªããŸãã ããããããã¯é¢šæ°Žã§ã¯ãããŸããã誰ããããŒã ãé¢ãããã³ã«æ°ãããŠãŒã¶ãŒãäœæããŠããŸããšããã®ãŠãŒã¶ãŒã¯ç§ãã¡ãšåéã«ãªãããšãæãŸãªããªãããã§ãã
ããã解決çã§ãã ãã㯠Jsonnet ã§æžãããã³ãŒãã§ãã Jsonnet 㯠Google ã®ãã³ãã¬ãŒãèšèªã§ãã
ãã®ã³ãã³ãã䜿çšãããšããã®ãã³ãã¬ãŒããåãå ¥ããããšãã§ãããã³ãã¬ãŒãã«åŸã£ãŠäœæããã json ãã¡ã€ã«ãåºåãšããŠè¿ãããŸãã
ãã³ãã¬ãŒãã¯ãããªæãã§ãã
Terraform ã§ã¯ãHCL ãš Json ã®äž¡æ¹ãåãæ¹æ³ã§æäœã§ãããããJson ãçæã§ããå Žåã¯ãããã Terraform ã«çµã¿èŸŒãããšãã§ããŸãã æ¡åŒµåã .tf.json ã®ãã¡ã€ã«ã¯æ£åžžã«ããŠã³ããŒããããŸãã
ãããŠãéåžžã©ãããterraform initãterramorm apply ã䜿çšããŠäœæ¥ããŸãã ãã㊠XNUMX 人ã®ãŠãŒã¶ãŒãäœæããŸãã
ä»ã§ã¯èª°ããããŒã ãé¢ããŠãæããããšã¯ãããŸããã json ãã¡ã€ã«ãç·šéããã ãã§ãã ãŽã¡ã·ã£ã»ãããã³ã¯å»ããããã£ã¢ã»ãã£ãããã³ã¯æ®ã£ãã Petya Pyatochkin ã¯æ°ããããŒãåãåããŸããã
Terraform ãä»ã®ããŒã«ãšçµ±åããããšã¯ãå®éã«ã¯ Terraform ã®ä»äºã§ã¯ãããŸããã Terraform ã¯ãªãœãŒã¹ãäœæããããã®ãã©ãããã©ãŒã ãšããŠäœæãããŸãããããã ãã§ãã ãããŠãåŸã§åºãŠããããšã¯ãã¹ãŠãTerraform ã®é¢å¿äºã§ã¯ãããŸããã ãããŠãããã«ãããç¹ã蟌ãå¿ èŠã¯ãããŸããã å¿ èŠãªããšã¯ãã¹ãŠå®è¡ã§ãã Ansible ããããŸãã
ããããTerraform ãæ¡åŒµããäœããå®äºããåŸã«ã³ãã³ããåŒã³åºãããå Žåã«ç¶æ³ãçºçããŸãã
æåã®æ¹æ³ã ãã®ã³ãã³ããèšè¿°ããå Žæã«åºåãäœæããŸãã
次ã«ãã·ã§ã«ã® terraform åºåãããã®ã³ãã³ããåŒã³åºããå¿ èŠãªå€ãæå®ããŸãã ãããã£ãŠãã³ãã³ãã¯ãã¹ãŠã®çœ®æå€ã䜿çšããŠå®è¡ãããŸãã ãšãŠãå¿«é©ã§ãã
XNUMXçªç®ã®æ¹æ³ã ããã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€æŽã«å¿ãã null_resource ã®äœ¿çšã§ãã ãªãœãŒã¹ã® ID ãå€æŽããããšããã«ãåã local-exe ãåŒã³åºãããšãã§ããŸãã
åœç¶ã®ããšãªãããAmazon ã¯ä»ã®å ¬å ±ãããã€ããŒãšåæ§ãç¬èªã®ãšããžã±ãŒã¹ãå€æ°æ±ããŠãããããæºäžã§ã¯ãã¹ãŠã¹ã ãŒãºã«é²ã¿ãŸãã
æãäžè¬çãªãšããžã±ãŒã¹ã¯ãAWS ã¢ã«ãŠã³ããéããšãã«ãã©ã®ãªãŒãžã§ã³ã䜿çšããããéèŠã«ãªããšããããšã§ãã ãã®æ©èœã¯ããã§æå¹ã«ãªã£ãŠããŸãã? ãããã 2013 幎 XNUMX æ以éã«ãªãŒãã³ãããšæãããŸãã VPC ãªã©ã§ããã©ã«ãã䜿çšããŠããå¯èœæ§ããããŸããå€ãã®å¶éããããŸãã ãããŠãAmazon ã¯ããããããã¥ã¡ã³ãå šäœã«æ£åšãããŸããã
é¿ããã¹ãããšãããã€ããããŸãã
ãŸããTerraform ãã©ã³ãŸã㯠Terraform CLI å ã®éã·ãŒã¯ã¬ããåŒæ°ããã¹ãŠé¿ããŸãã ãããã¯ãã¹ãŠãtfvars ãã¡ã€ã«ãŸãã¯ç°å¢å€æ°ã«å ¥ããããšãã§ããŸãã
ãã ãããã®éæ³ã®ã³ãã³ãããã¹ãŠèŠããå¿ èŠã¯ãããŸããã Terraform èšç» â var ãããŠåºçºã§ãã æåã®å€æ°ã¯ varãXNUMX çªç®ã®å€æ°ã¯ varãXNUMX çªç®ãXNUMX çªç®ã®å€æ°ã§ãã ç§ãæãé »ç¹ã«äœ¿çšããã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æãéèŠãªååã¯ãã³ãŒããèŠãã ãã§ãäœãããã«ã©ã®ãããªç¶æ ã§ãã©ã®ãããªå€ã§ãããã€ãããŠããããæ確ã«ç解ã§ããå¿ èŠããããšããããšã§ãã ãã®ãããããã¥ã¡ã³ããèªãã ããVasya ãã¯ã©ã¹ã¿ãŒã®äœæã«äœ¿çšãããã©ã¡ãŒã¿ãŒãå°ãããããå¿ èŠã¯ãããŸããã å€ãã®å Žåç°å¢ã«äžèŽãã tfvars æ¡åŒµåãæã€ãã¡ã€ã«ãéããŠãããã«ãããã®ããã¹ãŠç¢ºèªããã ãã§ãã
ãŸããã¹ã³ãŒããæžããããã«ã¿ãŒã²ããåŒæ°ã䜿çšããªãã§ãã ããã ãã®ããã«ã¯ãå°ããªã€ã³ãã©ã¹ãã©ã¯ã㣠ã¢ãžã¥ãŒã«ã䜿çšããæ¹ãã¯ããã«ç°¡åã§ãã
ãŸãã䞊ååŠçãå¶éãããå¢ããããããå¿ èŠã¯ãããŸããã 150 ã®ãªãœãŒã¹ããããAmazon ã®äžŠååŠçãããã©ã«ãã® 10 ãã 100 ã«å¢ããããå Žåãããããäœãåé¡ãçºçããŸãã ãããã¯ãä»ã¯ããŸããã£ãŠãããããããŸããããAmazon ããé»è©±ããããããŠãããšèšãããããåé¡ãçºçããã§ãããã
Terraform ã¯ãããã®åé¡ã®ã»ãšãã©ãåèµ·åããããšããŸãããã»ãšãã©äœãéæãããŸããã Parallelism=1 ã¯ãAWS API å ãŸã㯠Terraform ãããã€ããŒå ã§äœããã®ãã°ã«ééããå Žåã«äœ¿çšããéèŠãªãã®ã§ãã 次ã«ãParallelism=1 ãæå®ããTerraform ã XNUMX ã€ã®åŒã³åºããçµäºãã次㫠XNUMX ã€ç®ãããã« XNUMX ã€ç®ã®åŒã³åºããå®äºãããŸã§åŸ æ©ããå¿ èŠããããŸãã 圌ã¯ããããäžã€ãã€çºå°ããŸãã
ããªã Terraform ã¯ãŒã¯ã¹ããŒã¹ãæªã ãšæãã®ã§ãã?ããšããå°ããããŸãã ã€ã³ãã©ã¹ãã©ã¯ãã£ã»ã¢ãºã»ã³ãŒãã®ååã¯ãã©ã®ãããªã€ã³ãã©ã¹ãã©ã¯ãã£ãã©ã®ãããªå€ã§äœæããããã確èªããããšã ãšæããŸãã
ã¯ãŒã¯ã¹ããŒã¹ã¯ãŠãŒã¶ãŒã«ãã£ãŠäœæããããã®ã§ã¯ãããŸããã ããã¯ããŠãŒã¶ãŒã GitHub ã®åé¡ã«ãTerraform ã¯ãŒã¯ã¹ããŒã¹ãªãã§ã¯çããŠãããªããšæžããããšãæå³ãããã®ã§ã¯ãããŸããã ããããããã§ã¯ãããŸããã Terraform Enterprise ã¯åçšãœãªã¥ãŒã·ã§ã³ã§ãã HashiCorp ã® Terraform ã¯ã¯ãŒã¯ã¹ããŒã¹ãå¿ èŠã§ãããšå€æãããã¡ã€ã«ã«ä¿ç®¡ããŸããã å¥ã®ãã©ã«ããŒã«å ¥ããŠãããã»ããç°¡åã ãšæããŸãã ãã®åŸããã¡ã€ã«ã¯å°ãå¢ããŸãããããæ確ã«ãªããŸãã
ã³ãŒããã©ã®ããã«æäœããã? å®éããªã¹ãã®æäœãå¯äžã®èŠçã§ãã Terraform ããã£ãšç°¡åã«å©çšã§ããŸãã ããã¯ããªãã«ãšã£ãŠãã¹ãŠã®çŽ æŽãããããšããããããã®ã§ã¯ãããŸããã ããã¥ã¡ã³ãã«æžãããŠããããšããã¹ãŠããã«æŒã蟌ãå¿ èŠã¯ãããŸããã
å ±åæžã®ããŒãã¯ãæªæ¥ã«åããŠããšæžãããŠããŸããã ããã«ã€ããŠã¯éåžžã«ç°¡åã«èª¬æããŸãã å°æ¥çã«ã¯ã0.12 ãéããªããªãªãŒã¹ãããããšãæå³ããŸãã
0.12 ã«ã¯æ°ãããã®ããããããããŸãã éåžžã®ããã°ã©ãã³ã°ãè¡ã£ãŠããå Žåã¯ãããããçš®é¡ã®ãã€ããã㯠ãããã¯ãã«ãŒããæ£ããæ¡ä»¶ä»ãæ¯èŒæŒç® (巊蟺ãšå³èŸºãåæã«èšç®ãããã®ã§ã¯ãªããç¶æ³ã«å¿ããŠèšç®ããã) ãèŠéããŠããŸããŸãã ããªãã¯ãããããèŠéããŠããã®ã§ã0.12 ãããã解決ããŸãã
ãããïŒ æ¢è£œã®ã¢ãžã¥ãŒã«ããµãŒãããŒãã£ã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠããŸããŸãã·ã³ãã«ã«èšè¿°ããå Žåã¯ãåŸ ã€å¿ èŠã¯ãªãã0.12 ãæ¥ãŠãã¹ãŠãä¿®æ£ãããããšãæåŸ ããå¿ èŠã¯ãããŸããã
ãå ±åããããšãããããŸãïŒ ããªãã¯ã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã€ããŠè©±ãããã¹ãã«ã€ããŠæåéãäžèšèšããŸããã ã¢ãžã¥ãŒã«å ã§ãã¹ããå¿ èŠã§ãã? ããã¯èª°ã®è²¬ä»»ã§ãã? èªåã§æžãå¿ èŠãããã®ã§ããããããããšãã¢ãžã¥ãŒã«ã®è²¬ä»»ã§ãããã?
æ¥å¹Žã¯ããã¹ãŠããã¹ãããããšã決å®ãããšããå ±åã§ãã£ã±ãã«ãªãã§ãããã äœããã¹ãããããæ倧ã®åé¡ã§ãã ããŸããŸãªãããã€ããŒããã®äŸåé¢ä¿ãå¶éããããããããŸãã ããªããšç§ã話ããŠãããšãã«ãããªãããæ€æ»ãå¿ èŠã§ãããšèšã£ããšããç§ã¯ãäœãæ€æ»ããŸãã?ããšå°ããŸãã ããªãã¯ããªãã®å°åã§ãã¹ããããšèšã£ãŠããŸãã ããããç§ã¯ãããã¯ç§ã®å°åã§ã¯æ©èœããªããšèšããŸãã ã€ãŸããããã«é¢ããŠã¯åæããããšããã§ããªãã®ã§ãã æè¡çã«å€ãã®åé¡ãããããšã¯èšããŸã§ããããŸããã ã€ãŸãããããã®ãã¹ããé©åã«äœæããã«ã¯ã©ãããã°ããããšããããšã§ãã
ç§ã¯ãã®ãããã¯ãã€ãŸããäœæããã€ã³ãã©ã¹ãã©ã¯ãã£ã«åºã¥ããŠãã¹ããèªåçã«çæããæ¹æ³ãç©æ¥µçã«ç 究ããŠããŸãã ã€ãŸãããã®ã³ãŒããäœæããå Žåã¯ããããå®è¡ããå¿ èŠããããããã«åºã¥ããŠãã¹ããäœæã§ããŸãã
ã¢ã³ãã³ãããå ±åããããšãããããŸãïŒ ç§ã®ååã¯ãŽã¡ã¬ãªãŒã§ãã å°ãå²åŠçãªè³ªåããããŠãã ããã æ¡ä»¶ä»ãã§ãããããžã§ãã³ã°ãšãããã€ã¡ã³ããååšããŸãã ããããžã§ãã³ã°ã«ãã£ãŠã€ã³ãã©ã¹ãã©ã¯ãã£ãäœæããããããã€ã¡ã³ãã§ã¯ããµãŒããŒãã¢ããªã±ãŒã·ã§ã³ãªã©ã®æçšãªãã®ãã€ã³ãã©ã¹ãã©ã¯ãã£ã«è¿œå ããŸããç§ã®é ã®äžã§ã¯ãTerraform ã¯ããããžã§ãã³ã°ã«é©ããŠãããAnsible ã¯ãããã€ã¡ã³ãã«é©ããŠãããšèããŠããŸããAnsible ã¯ç©ççãªã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã察å¿ããŠããããã§ãã nginxãPostgresãã€ã³ã¹ããŒã«ã§ããŸãã ãããåæã«ãAnsible ã§ã¯ãããšãã° Amazon ã Google ã®ãªãœãŒã¹ã®ããããžã§ãã³ã°ãå¯èœã«ãªã£ãŠããããã§ãã ãã ããTerraform ã§ã¯ããã®ã¢ãžã¥ãŒã«ã䜿çšããŠäžéšã®ãœãããŠã§ã¢ããããã€ããããšãã§ããŸãã ããªãã®èŠ³ç¹ããèŠããšãTerraform ãš Ansible ã®éã«ããçš®ã®å¢çç·ã¯ãããŸãã? ã©ãã§äœã䜿çšããã®ãããè¯ãã§ãããã? ãããšããããšãã°ãAnsible ã¯ãã§ã«ãŽããªã®ã§ããã¹ãŠã« Terraform ã䜿çšããå¿ èŠããããšæããŸãã?
ãã質åã§ããããŽã¡ã¬ãªãŒã Terraform ã®ç®ç㯠2014 幎ããå€ãã£ãŠããªããšæããŸãã ã€ã³ãã©ã¹ãã©ã¯ãã£ã®ããã«äœãããã€ã³ãã©ã®ããã«æ¶æ» ããŸããã æ§æ管ç Ansible ã¯ä»ã§ãå¿ èŠã§ãããä»åŸãå¿ èŠã§ãã 課é¡ã¯ãlaunch_configuration å ã«ãŠãŒã¶ãŒ ããŒã¿ãååšããããšã§ãã ãããŠãããã« Ansible ããã«ãããªã©ã§ãããããç§ãæãæ°ã«å ¥ã£ãŠããæšæºçãªåºå¥ã§ãã
çŸããã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã€ããŠè©±ããŠããå Žåã¯ããã®ç»åãåéãã Packer ã®ãããªãŠãŒãã£ãªãã£ããããŸãã 次ã«ãTerraform ã¯ããŒã¿ ãœãŒã¹ã䜿çšããŠãã®ã€ã¡ãŒãžãæ€çŽ¢ããlaunch_configuration ãæŽæ°ããŸãã ã€ãŸãããã®æ¹æ³ã§ã¯ãæåã« Tracker ããã«ãã次㫠Terraform ããã«ãããã€ãã©ã€ã³ã«ãªããŸãã ãããŠããã«ããçºçãããšãæ°ããå€æŽãçºçããŸãã
ããã«ã¡ã¯ïŒ ãå ±åããããšãããããŸãïŒ RBS瀟ã®ããŒã·ã£ãšç³ããŸãã ãªãœãŒã¹ã®äœææã«ããããžã§ããŒçµç±ã§ Ansible ãåŒã³åºãããšãã§ããŸãã Ansible ã«ã¯ãåçã€ã³ãã³ããªãŒãšåŒã°ãããããã¯ããããŸãã ãããŠãæåã« Terraform ãåŒã³åºãã次㫠Ansible ãåŒã³åºãããšãã§ããŸããããã«ãããç¶æ ãããªãœãŒã¹ãååŸãããŠå®è¡ãããŸãã äœãè¯ãã§ããããïŒ
人ã ã¯äž¡æ¹ã䜿çšããŠåçã®æåãåããŠããŸãã èªåã¹ã±ãŒãªã³ã° ã°ã«ãŒãã®ããšãé€ãã°ãAnsible ã®åçã€ã³ãã³ããªã¯äŸ¿å©ãªãã®ã®ããã«æããŸãã èªåã¹ã±ãŒãªã³ã° ã°ã«ãŒãã«ã¯ãlaunch_configuration ãšåŒã°ããç¬èªã®ããŒã«ãããããã§ã«ååšããããã§ãã launch_configuration ã§ã¯ãæ°ãããªãœãŒã¹ãäœæãããšãã«èµ·åããå¿ èŠããããã®ããã¹ãŠèšé²ããŸãã ãããã£ãŠãAmazon ã®å Žåãåçã€ã³ãã³ããªã䜿çšã㊠Terraform ts ãã¡ã€ã«ãèªã¿åãã®ã¯ãç§ã®æèŠã§ã¯ããããã§ãã ãŸãããèªåã¹ã±ãŒãªã³ã° ã°ã«ãŒããã®æŠå¿µããªãä»ã®ããŒã«ã䜿çšããå Žåãããšãã°ãèªåã¹ã±ãŒãªã³ã° ã°ã«ãŒãããªã DigitalOcean ãŸãã¯ãã®ä»ã®ãããã€ããŒã䜿çšããå Žåã¯ããã㧠API ãæåã§ãã«ããIP ã¢ãã¬ã¹ãæ€çŽ¢ããäœæããå¿ èŠããããŸããåçã€ã³ãã³ããªãŒ ãã¡ã€ã«ãAnsible ã¯ãã§ã«ãã®ãã¡ã€ã«å ãããŸãã£ãŠããŸãã ã€ãŸããAmazon ã«ã¯ launch_configuration ãããããã®ä»ãã¹ãŠã«ã¯åçåšåº«ããããŸãã
åºæïŒ habr.com