å€ãåé¡ã解決ããããã«ç§ãäœæããæ°ãã CLI ããŒã«ã«ã€ããŠã話ããããšæããŸãã
åé¡
Terraform ã¯ãDevops/ã¯ã©ãŠã/IT ã³ãã¥ããã£ã®æšæºãšããŠé·ãé䜿çšãããŠããŸããã ããã¯éåžžã«äŸ¿å©ã§ãã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãæ±ãã®ã«åœ¹ç«ã¡ãŸãã Terraform ã«ã¯ããã©ãŒã¯ãéããã€ããçæã ãã§ãªãã楜ãããã®ããããããããŸãã
Terraform ã䜿çšãããšãæ°ãããã®ãäœæããŠããããã管çãå€æŽãåé€ããããšãéåžžã«äŸ¿å©ã§ãã ã¯ã©ãŠãäžã«å·šå€§ãªã€ã³ãã©ã¹ãã©ã¯ãã£ããããTerraform ãéããŠäœæãããŠããªã人ã¯äœããã¹ãã§ãããã? ã¯ã©ãŠãå
šäœãæžãæããŠåäœæããã«ã¯ãäœããã®åœ¢ã§è²»çšãããããå®å
šã§ã¯ãããŸããã
ç§ã¯ 2 ã€ã®ãžã§ãã§ãã®åé¡ã«ééããŸãããæãåçŽãªäŸã¯ããã¹ãŠã Terraform ãã¡ã€ã«ã®åœ¢åŒã§ Git ã«çœ®ããããã250 以äžã®ãã±ãããããããããã Terraform ã«æåã§èšè¿°ããã®ã¯å€§å€ãªå Žåã§ãã
ãã
äžè¬ã«ããã¹ãŠã¯å³ããå·Šã«ã®ã¿åçã®éãã§ã
èŠå: èè ã¯äººçã®ååããã·ã¢ã«äœãã§ããªãããããã·ã¢èªã§ã®èäœã¯ã»ãšãã©ãããŸããã ã¹ãã«ãã¹ã«æ³šæããŠãã ããã
РеÑеМОÑ
1. AWS ã«ã¯æ¢è£œã®å€ããœãªã¥ãŒã·ã§ã³ãååšããŸã
ãã©ãã©ãŒãã³ã°ã®ä»çµã¿: AWS SDK ããããŒã¿ãååŸãããã³ãã¬ãŒããéã㊠tf ãš tfstate ãçæããŸãã
ããã«ã¯ 3 ã€ã®åé¡ããããŸãã
1. ã¢ããããŒãã«ã¯åžžã«ã©ã°ãçºçããŸã
2. tf ãã¡ã€ã«ãå£ããããšããã
3. tfstate 㯠tf ãšã¯å¥ã«åéãããåžžã«åæãããšã¯éããŸãã
äžè¬ã«ããterraform planãã¯å€æŽããªããšããçµæãåŸãããšãå°é£ã§ãã
2. ãterraform importãã¯ãterraform ã®çµã¿èŸŒã¿ã³ãã³ãã§ãã ã©ã®ããã«æ©èœããã®ã§ãããã?
ãªãœãŒã¹ã®ååãšã¿ã€ããå«ã空㮠TF ãã¡ã€ã«ãäœæãããterraform importããå®è¡ããŠãªãœãŒã¹ ID ãæž¡ããŸãã terraform ã¯ãããã€ããŒã«æ¥ç¶ããŠããŒã¿ãåãåããtfstate ãã¡ã€ã«ãäœæããŸãã
ããã«ã¯ 3 ã€ã®åé¡ããããŸãã
1. tfstate ãã¡ã€ã«ã®ã¿ãååŸããtf ã¯ç©ºã§ããæåã§èšè¿°ããããtfstate ããå€æããå¿
èŠããããŸãã
2. äžåºŠã« 250 ã€ã®ãªãœãŒã¹ã®ã¿ãæäœã§ãããã¹ãŠã®ãªãœãŒã¹ããµããŒãããããã§ã¯ãããŸããã ãŸããXNUMX 以äžã®ãã±ããã䜿çšããã«ã¯ã©ãããã°ããã§ãããã?
3. ãªãœãŒã¹ã® ID ãç¥ãå¿
èŠããããŸããã€ãŸãããªãœãŒã¹ã®ãªã¹ããååŸããã³ãŒãã§ãããã©ããããå¿
èŠããããŸãã
äžè¬ã«ãçµæã¯éšåçã§ãããé©åã«æ¡åŒµã§ããŸããã
ç§ã®å€æ
èŠä»¶ïŒ
1. ãªãœãŒã¹ã® tf ããã³ tfstate ãã¡ã€ã«ãäœæããæ©èœã ããšãã°ããã¹ãŠã®ãã±ãã/ã»ãã¥ãªã㣠ã°ã«ãŒã/ããŒã ãã©ã³ãµãŒãããŠã³ããŒããããšããterraform planãã¯å€æŽããªãããšãè¿ããŸãã
2. 2 ã€ã® GCP + AWS ã¯ã©ãŠããå¿
èŠã§ã
3. æ¯åç°¡åã«æŽæ°ã§ãã3 æ¥éã®äœæ¥ã§åãªãœãŒã¹ã«æéãç¡é§ã«ããªãã°ããŒãã« ãœãªã¥ãŒã·ã§ã³
4. ãªãŒãã³ãœãŒã¹ã«ãã - 誰ããåãåé¡ãæ±ããŠãã
Go èšèªã¯ç§ã倧奜ããªçç±ã§ãããTerraform ã§äœ¿çšããã HCL ãã¡ã€ã«ãäœæããããã®ã©ã€ãã©ãªãšãTerraform ã§åœ¹ç«ã€å€ãã®ã³ãŒããåããŠããŸãã
ãã¹
æåã®è©Šã¿
ãŸãã¯ç°¡æçããå§ããŠã¿ãŸããã SDK çµç±ã§ã¯ã©ãŠãã«æ¥ç¶ããŠå¿
èŠãªãªãœãŒã¹ãååŸããããã Terraform ã®ãã£ãŒã«ãã«å€æããŸãã ã»ãã¥ãªã㣠ã°ã«ãŒãã ããå€æããã®ã« 1.5 æ¥ãããã®ãå«ã ã£ãã®ã§ (ãªãœãŒã¹ãããããããã®ã§)ãã»ãã¥ãªã㣠ã°ã«ãŒãã§ã¯ããã«è©Šè¡ãäžæ¢ãããŸããã é·æéã«ããã£ãŠãã£ãŒã«ããå€æŽ/è¿œå ã§ãã
XNUMX åç®ã®è©Šè¡
説æãããã¢ã€ãã¢ã«åºã¥ããŠ
ããã§ãtfstate ãã tf ãžã®ã³ã³ããŒã¿ãäœæãããšããååž°çãªãã«ããå®è¡ããŸãããã tfstate ãèªãã ããšããªã人ã®ããã«èª¬æãããšããã㯠JSON ã§ããç¹å¥ã§ãã
éèŠãªéšåã®å±æ§ã¯æ¬¡ã®ãšããã§ã
"attributes": {
"id": "default/backend-logging-load-deployment",
"metadata.#": "1",
"metadata.0.annotations.%": "0",
"metadata.0.generate_name": "",
"metadata.0.generation": "24",
"metadata.0.labels.%": "1",
"metadata.0.labels.app": "backend-logging",
"metadata.0.name": "backend-logging-load-deployment",
"metadata.0.namespace": "default",
"metadata.0.resource_version": "109317427",
"metadata.0.self_link": "/apis/apps/v1/namespaces/default/deployments/backend-logging-load-deployment",
"metadata.0.uid": "300ecda1-4138-11e9-9d5d-42010a8400b5",
"spec.#": "1",
"spec.0.min_ready_seconds": "0",
"spec.0.paused": "false",
"spec.0.progress_deadline_seconds": "600",
"spec.0.replicas": "1",
"spec.0.revision_history_limit": "10",
"spec.0.selector.#": "1",
ãããïŒ
1. ID - æåå
2. ã¡ã¿ããŒã¿ - ãµã€ãº 1 ã®é
åãšããã®äžã«åŸè¿°ãããã£ãŒã«ããæã€ãªããžã§ã¯ã
3. spec - ãµã€ãº 1 ã®ããã·ã¥ãšããŒããã®äžã®å€
äžèšã§èšãã°ã楜ãããã©ãŒãããã§ããããã¹ãŠãæ°ã¬ãã«ã®æ·±ãã«ãªãå¯èœæ§ããããŸã
"spec.#": "1",
"spec.0.min_ready_seconds": "0",
"spec.0.paused": "false",
"spec.0.progress_deadline_seconds": "600",
"spec.0.replicas": "1",
"spec.0.revision_history_limit": "10",
"spec.0.selector.#": "1",
"spec.0.selector.0.match_expressions.#": "0",
"spec.0.selector.0.match_labels.%": "1",
"spec.0.selector.0.match_labels.app": "backend-logging-load",
"spec.0.strategy.#": "0",
"spec.0.template.#": "1",
"spec.0.template.0.metadata.#": "1",
"spec.0.template.0.metadata.0.annotations.%": "0",
"spec.0.template.0.metadata.0.generate_name": "",
"spec.0.template.0.metadata.0.generation": "0",
"spec.0.template.0.metadata.0.labels.%": "1",
"spec.0.template.0.metadata.0.labels.app": "backend-logging-load",
"spec.0.template.0.metadata.0.name": "",
"spec.0.template.0.metadata.0.namespace": "",
"spec.0.template.0.metadata.0.resource_version": "",
"spec.0.template.0.metadata.0.self_link": "",
"spec.0.template.0.metadata.0.uid": "",
"spec.0.template.0.spec.#": "1",
"spec.0.template.0.spec.0.active_deadline_seconds": "0",
"spec.0.template.0.spec.0.container.#": "1",
"spec.0.template.0.spec.0.container.0.args.#": "3",
äžè¬ã«ãé¢æ¥ã§ããã°ã©ãã³ã°ã®åé¡ãå¿
èŠãªå Žåã¯ããã®ã¿ã¹ã¯çšã®ããŒãµãŒãäœæããããã«äŸé ŒããŠãã ãã:)
ãã°ã®ãªãããŒãµãŒãäœæããããšäœåºŠãè©Šã¿ãçµæãterraform ã³ãŒãå
ã«ããŒãµãŒã®äžéšããããŠæãéèŠãªéšåãèŠã€ãããŸããã ãããŠãã¹ãŠãããŸãæ©èœããŠããããã«èŠããŸãã
XNUMX åç®ã®è©Šè¡
terraform ãããã€ããŒã¯ãã¯ã©ãŠã API ãæäœããããã®ãã¹ãŠã®ãªãœãŒã¹ãšããžãã¯ãå«ãã³ãŒããå«ããã€ããªã§ãã åã¯ã©ãŠãã«ã¯ç¬èªã®ãããã€ããŒããããTerraform èªäœã¯ XNUMX ã€ã®ããã»ã¹éã® RPC ãããã³ã«ãéããŠã®ã¿ãããã€ããŒãåŒã³åºããŸãã
ããã§ãRPC åŒã³åºããä»ã㊠Terraform ãããã€ããŒã«çŽæ¥é£çµ¡ããããšã«ããŸããã ããã¯èŠäºã«ææãäžãããã³ãŒããå€æŽããã« Terraform ãããã€ããŒãæ°ãããã®ã«å€æŽããŠæ°ããæ©èœãååŸã§ããããã«ãªããŸããã ãŸããtfstate ã®ãã¹ãŠã®ãã£ãŒã«ãã tf ã«ããå¿
èŠã¯ãªãããšãããããŸããããã©ãããã°ããã確èªã§ããã§ãããã? ããã«ã€ããŠã¯ãããã€ããŒã«åãåãããŠãã ããã ãã®åŸãæ£èŠè¡šçŸãçµã¿ç«ãŠãå¥ã®ååž°ãã«ããå§ãŸããtfstate å
ã®ãã£ãŒã«ãããã¹ãŠã®ã¬ãã«ã§åŸ¹åºçã«æ€çŽ¢ããŸããã
æçµçã«ããã¹ãŠã® Terraform ãããã€ããŒã«å
±éã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãåããæ°ãããã®ãç°¡åã«è¿œå ã§ãã䟿å©ãª CLI ããŒã«ãå
¥æããŸããã ãŸãããªãœãŒã¹ã®è¿œå ã«å¿
èŠãªã³ãŒãã¯ã»ãšãã©ãããŸããã ããã«ããªãœãŒã¹éã®æ¥ç¶ãªã©ãããããçš®é¡ã®ç¹å
žãå«ãŸããŸãã ãã¡ããããã¹ãŠã説æããããšã¯ã§ããŸããããããŸããŸãªåé¡ããããŸããã
ãã®åç©ããã©ãã©ãŒããŒãšåä»ããŸããã
決å
Terrafomer ã䜿çšããŠã500 ã€ã®ã¯ã©ãŠããã 700 äžã XNUMX äžè¡ã® tf + tfstate ã³ãŒããçæããŸããã ç§ãã¡ã¯ãã³ãŒãã®ã¢ã€ãã¢ãšããŠã®æé«ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãšåæ§ã«ããã©ãã©ãŒã ãéããŠã®ã¿ã¬ã¬ã·ãŒãªãã®ãåãäžãããããã«è§Šããããšãã§ããŸããã 巚倧ãªã¯ã©ãŠãã Terraform ã¯ãŒã«ãŒ ãã¡ã€ã«ã®åœ¢åŒã§ããŒã ãéããŠåãåãã®ã¯ããŸãã«éæ³ã§ãã ãã㊠grep/replace/git ãªã©ãå®è¡ããŸãã
èš±å¯ãåŸãŠãæŽçããŠæŽçããŸããã æšææ¥ (02.05.19/XNUMX/XNUMX) ã« GitHub ã§å
šå¡ã«åããŠãªãªãŒã¹ãããŸããã
ãã§ã« 600 åã®ã¹ã¿ãŒãšãopenstack ãš kubernetes ã®ãµããŒãè¿œå ã«é¢ãã 2 ã€ã®ãã« ãªã¯ãšã¹ããåãåããŸããã è¯ããã£ãŒãããã¯ã äžè¬çã«ããããžã§ã¯ãã¯äººã
ã«ãšã£ãŠæçã§ã
Terraform ã䜿ãå§ããããšèããŠãã人ã«ã¯ããã¹ãŠãæžãçŽããªãããšããå§ãããŸãã
ãã«ãªã¯ãšã¹ããåé¡ãã¹ã¿ãŒãåãã§ãéãããŸãã
ÐеЌП
åºæïŒ habr.com