Terraformer - Infrastructure To Code

Terraformer - Infrastructure To Code
ืื ื™ ืจื•ืฆื” ืœืกืคืจ ืœื›ื ืขืœ ื›ืœื™ ื”-CLI ื”ื—ื“ืฉ ืฉื›ืชื‘ืชื™ ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื™ืฉื ื”.

ื‘ืขื™ื”

Terraform ื›ื‘ืจ ืžื–ืžืŸ ืกื˜ื ื“ืจื˜ ื‘ืงื”ื™ืœืช Devops/Cloud/IT. ื”ื“ื‘ืจ ืžืื•ื“ ื ื•ื— ื•ืฉื™ืžื•ืฉื™ ืœื”ืชืžื•ื“ื“ื•ืช ืขื ืชืฉืชื™ืช ื›ืงื•ื“. ื™ืฉ ื”ืจื‘ื” ืชืขื ื•ื’ื•ืช ื‘- Terraform ื›ืžื• ื’ื ืžื–ืœื’ื•ืช ืจื‘ื™ื, ืกื›ื™ื ื™ื ื—ื“ื•ืช ื•ืžื’ืจืคื•ืช.
ืขื Terraform ืžืื•ื“ ื ื•ื— ืœื™ืฆื•ืจ ื“ื‘ืจื™ื ื—ื“ืฉื™ื ื•ืื– ืœื ื”ืœ, ืœืฉื ื•ืช ืื• ืœืžื—ื•ืง ืื•ืชื. ืžื” ืฆืจื™ืš ืœืขืฉื•ืช ืžื™ ืฉื™ืฉ ืœื• ืชืฉืชื™ืช ืขื ืงื™ืช ื‘ืขื ืŸ ื•ืœื ื ื•ืฆืจื” ื“ืจืš Terraform? ืฉื›ืชื•ื‘ ื•ื™ืฆื™ืจื” ืžื—ื“ืฉ ืฉืœ ื”ืขื ืŸ ื›ื•ืœื• ื”ื•ื ืื™ื›ืฉื”ื• ื™ืงืจ ื•ืœื ื‘ื˜ื•ื—.
ื ืชืงืœืชื™ ื‘ื‘ืขื™ื” ื”ื–ื• ื‘-2 ืขื‘ื•ื“ื•ืช, ื”ื“ื•ื’ืžื” ื”ื›ื™ ืคืฉื•ื˜ื” ื”ื™ื ื›ืฉืืชื” ืจื•ืฆื” ืฉื”ื›ืœ ื™ื”ื™ื” ื‘-Git ื‘ืฆื•ืจื” ืฉืœ ืงื‘ืฆื™ terraform, ืื‘ืœ ื™ืฉ ืœืš 250+ ื“ืœื™ื™ื ื•ื–ื” ื”ืจื‘ื” ืœื›ืชื•ื‘ ืื•ืชื ื‘-terraform ื‘ื™ื“.
ื™ืฉ ืกื•ื’ื™ื” ืžืื– 2014 ื‘-terrafom ืฉื ืกื’ืจื” ื‘-2016 ื‘ืชืงื•ื•ื” ืฉื™ื”ื™ื” ื™ื‘ื•ื.

ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ื›ืœ ื›ืžื• ื‘ืชืžื•ื ื” ืจืง ืžื™ืžื™ืŸ ืœืฉืžืืœ

ืื–ื”ืจื•ืช: ื”ืžื—ื‘ืจ ืื™ื ื• ื—ื™ ื‘ืจื•ืกื™ื” ื‘ืžืฉืš ืžื—ืฆื™ืช ื—ื™ื™ื• ื•ื›ื•ืชื‘ ืžืขื˜ ื‘ืจื•ืกื™ืช. ื”ื™ื–ื”ืจื• ืžืฉื’ื™ืื•ืช ื›ืชื™ื‘.

ืคืชืจื•ื ื•ืช

1. ื™ืฉ ืคืชืจื•ื ื•ืช ืžื•ื›ื ื™ื ื•ื™ืฉื ื™ื ืขื‘ื•ืจ AWS ื˜ืจืคื•ืจืžื™ื ื’. ื›ืฉื ื™ืกื™ืชื™ ืœื”ืขื‘ื™ืจ ืืช 250+ ื”ื“ืœื™ื™ื ืฉืœื™ ื“ืจื›ื•, ื”ื‘ื ืชื™ ืฉื”ื›ืœ ืจืข ืฉื. AWS ื›ื‘ืจ ืžื–ืžืŸ ืžืฆื™ื’ื” ื”ืจื‘ื” ืืคืฉืจื•ื™ื•ืช ื—ื“ืฉื•ืช, ืื‘ืœ terraforming ืœื ื™ื•ื“ืข ืขืœื™ื”ืŸ ื•ื‘ืื•ืคืŸ ื›ืœืœื™ ื–ื” ืจื•ื‘ื™ ื”ืชื‘ื ื™ืช ื ืจืื™ืช ื“ืœื™ืœื”. ืื—ืจื™ 2 ื‘ืœื™ืœื” ืฉืœื—ืชื™ ืžืฉื•ืš ื‘ืงืฉื” ืœื”ื•ืกื™ืฃ ืฉื ืขื•ื“ ืคื™ืฆ'ืจื™ื ื•ื”ื‘ื™ื ื• ืฉืคืชืจื•ืŸ ื›ื–ื” ืœื ืžืชืื™ื ื‘ื›ืœืœ.
ืื™ืš ืขื•ื‘ื“ terraforming: ื”ื•ื ืœื•ืงื— ื ืชื•ื ื™ื ืžื”-AWS SDK ื•ืžื™ื™ืฆืจ tf ื•-tfstate ื‘ืืžืฆืขื•ืช ืชื‘ื ื™ืช.
ื™ืฉ ื›ืืŸ 3 ื‘ืขื™ื•ืช:
1. ืชืžื™ื“ ื™ื”ื™ื” ืคื™ื’ื•ืจ ื‘ืขื“ื›ื•ื ื™ื
2. ืงื‘ืฆื™ TF ืœืคืขืžื™ื ื™ื•ืฆืื™ื ืฉื‘ื•ืจื™ื
3. tfstate ื ืืกืฃ ื‘ื ืคืจื“ ืž-tf ื•ืœื ืชืžื™ื“ ืžืชื›ื ืก
ื‘ืื•ืคืŸ ื›ืœืœื™, ืงืฉื” ืœื”ื’ื™ืข ืœืชื•ืฆืื” ืฉื‘ื” `ืชื›ื ื™ืช ื˜ืจืคื•ืจื` ืื•ืžืจืช ืฉืื™ืŸ ืฉื™ื ื•ื™ื™ื

2. `ื™ื‘ื•ื terraform` ื”ื™ื ืคืงื•ื“ื” ืžื•ื‘ื ื™ืช ื‘-terraform. ืื™ืš ื–ื” ืขื•ื‘ื“?
ืืชื” ื›ื•ืชื‘ ืงื•ื‘ืฅ TF ืจื™ืง ืขื ื”ืฉื ื•ื”ืกื•ื’ ืฉืœ ื”ืžืฉืื‘, ื•ืื– ืžืคืขื™ืœ ืืช 'ื™ื™ื‘ื•ื โ€‹โ€‹terraform' ื•ืžืขื‘ื™ืจ ืืช ืžื–ื”ื” ื”ืžืฉืื‘. terraform ื™ื•ืฆืจ ืงืฉืจ ืขื ื”ืกืคืง, ืžืงื‘ืœ ืืช ื”ื ืชื•ื ื™ื ื•ื™ื•ืฆืจ ืงื•ื‘ืฅ tfstate.
ื™ืฉ ื›ืืŸ 3 ื‘ืขื™ื•ืช:
1. ืื ื—ื ื• ืžืงื‘ืœื™ื ืจืง ืงื•ื‘ืฅ tfstate, ื•ื”-tf ืจื™ืง, ืืชื” ืฆืจื™ืš ืœื›ืชื•ื‘ ืื•ืชื• ื™ื“ื ื™ืช ืื• ืœื”ืžื™ืจ ืื•ืชื• ืž-tfstate
2. ื™ื›ื•ืœ ืœืขื‘ื•ื“ ืจืง ืขื ืžืฉืื‘ ืื—ื“ ื‘ื›ืœ ืคืขื ื•ืื™ื ื• ืชื•ืžืš ื‘ื›ืœ ื”ืžืฉืื‘ื™ื. ื•ืžื” ืขืœื™ ืœืขืฉื•ืช ืฉื•ื‘ ืขื 250+ ื“ืœื™ื™ื?
3. ืฆืจื™ืš ืœื“ืขืช ืืช ื”ืžื–ื”ื” ืฉืœ ื”ืžืฉืื‘ื™ื - ื›ืœื•ืžืจ ืฆืจื™ืš ืœืขื˜ื•ืฃ ืื•ืชื• ื‘ืงื•ื“ ืฉืžืงื‘ืœ ืืช ืจืฉื™ืžืช ื”ืžืฉืื‘ื™ื
ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ืชื•ืฆืื” ื”ื™ื ื—ืœืงื™ืช ื•ืื™ื ื” ืžื“ืจื’ืช ื”ื™ื˜ื‘

ื”ื”ื—ืœื˜ื” ืฉืœื™

ื“ืจื™ืฉื•ืช:
1. ื™ื›ื•ืœืช ืœื™ืฆื•ืจ ืงื‘ืฆื™ tf ื•-tfstate ืขื‘ื•ืจ ืžืฉืื‘ื™ื. ืœื“ื•ื’ืžื”, ื”ื•ืจื“ ืืช ื›ืœ ื”ื“ืœื™ื™ื/ืงื‘ื•ืฆืช ื”ืื‘ื˜ื—ื”/ืื™ื–ื•ืŸ ื”ืขื•ืžืก ื•'ืชื•ื›ื ื™ืช terraform' ื”ื—ื–ื™ืจื” ืฉืื™ืŸ ืฉื™ื ื•ื™ื™ื
2. ืืชื” ืฆืจื™ืš 2 ืขื ื ื™ GCP + AWS
3. ืคืชืจื•ืŸ ื’ืœื•ื‘ืœื™ ืฉืงืœ ืœืขื“ื›ืŸ ื‘ื›ืœ ืคืขื ื•ืœื ืžื‘ื–ื‘ื– ื–ืžืŸ ืขืœ ื›ืœ ืžืฉืื‘ ื‘ืžืฉืš 3 ื™ืžื™ ืขื‘ื•ื“ื”
4. ื”ืคื•ืš ืืช ื–ื” ืœืงื•ื“ ืคืชื•ื— - ืœื›ื•ืœื ื™ืฉ ืื•ืชื” ื‘ืขื™ื”

ืฉืคืช ื”-Go ื–ื• ื”ืกื™ื‘ื” ืฉืื ื™ ืื•ื”ื‘ ืื•ืชื”, ื•ื™ืฉ ืœื” ืกืคืจื™ื™ื” ืœื™ืฆื™ืจืช ืงื‘ืฆื™ HCL ืฉื ืžืฆืืช ื‘ืฉื™ืžื•ืฉ ื‘-terraform + ื”ืจื‘ื” ืงื•ื“ ื‘-terraform ืฉื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™

ื ืชื™ื‘

ื ืกื™ื•ืŸ ืจืืฉื•ืŸ
ื”ืชื—ืœืชื™ ืขื ื’ืจืกื” ืคืฉื•ื˜ื”. ื™ืฆื™ืจืช ืงืฉืจ ืขื ื”ืขื ืŸ ื“ืจืš ื”-SDK ืขื‘ื•ืจ ื”ืžืฉืื‘ ื”ื ื“ืจืฉ ื•ื”ืžืจืชื• ืœืฉื“ื•ืช ืขื‘ื•ืจ terraform. ื”ื ื™ืกื™ื•ืŸ ืžืช ืžื™ื“ ืขืœ ืงื‘ื•ืฆืช ื”ืื‘ื˜ื—ื” ื›ื™ ืœื ืื”ื‘ืชื™ ืืช 1.5 ื”ื™ืžื™ื ืœื”ืžื™ืจ ืจืง ืืช ืงื‘ื•ืฆืช ื”ืื‘ื˜ื—ื” (ื•ื™ืฉ ื”ืจื‘ื” ืžืฉืื‘ื™ื). ื‘ืžืฉืš ื–ืžืŸ ืจื‘ ื•ืœืื—ืจ ืžื›ืŸ ื ื™ืชืŸ ืœืฉื ื•ืช/ืœื”ื•ืกื™ืฃ ืฉื“ื•ืช

ื ืกื™ื•ืŸ ืฉื ื™
ืžื‘ื•ืกืก ืขืœ ื”ืจืขื™ื•ืŸ ื”ืžืชื•ืืจ ื›ืืŸ. ืคืฉื•ื˜ ืงื— ื•ื”ืžืจ ืืช tfstate ืœ-tf. ื›ืœ ื”ื ืชื•ื ื™ื ื ืžืฆืื™ื ืฉื ื•ื”ืฉื“ื•ืช ื–ื”ื™ื. ืื™ืš ืœื”ืฉื™ื’ tfstate ืžืœื ืขื‘ื•ืจ ืžืฉืื‘ื™ื ืจื‘ื™ื?? ื›ืืŸ ื”ื’ื™ืขื” ืคืงื•ื“ืช `ืจืขื ื•ืŸ terraform` ืœืขื–ืจื”. terraform ืœื•ืงื— ืืช ื›ืœ ื”ืžืฉืื‘ื™ื ื‘-tfstate, ื•ื‘ืืžืฆืขื•ืช ืžื–ื”ื”, ืฉื•ืœืฃ ืขืœื™ื”ื ื ืชื•ื ื™ื ื•ื›ื•ืชื‘ ื”ื›ืœ ืœ-tfstate. ื›ืœื•ืžืจ, ืœื™ืฆื•ืจ tfstate ืจื™ืง ืขื ืจืง ืฉืžื•ืช ื•ืžื–ื”ื™ื, ืœื”ืคืขื™ืœ `terraform refresh` ื•ืื– ื ืงื‘ืœ tfstates ืžืœื. ื”ื™ื“ื“!
ืขื›ืฉื™ื• ื‘ื•ืื• ื ืขืฉื” ืืช ื”ืคื•ืจื ื•ื’ืจืคื™ื” ื”ืจืงื•ืจืกื™ื‘ื™ืช ืฉืœ ื›ืชื™ื‘ืช ืžืžื™ืจ ืขื‘ื•ืจ 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. ืžื–ื”ื” - ืžื—ืจื•ื–ืช
2. metadata - ืžืขืจืš ื‘ื’ื•ื“ืœ 1 ื•ื‘ื• ืื•ื‘ื™ื™ืงื˜ ืขื ืฉื“ื•ืช ืืฉืจ ืžืชื•ืืจ ืœื”ืœืŸ
3. spec - hash ื‘ื’ื•ื“ืœ 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, ื•ืืช ื”ื—ืœืง ื”ื—ืฉื•ื‘ ื‘ื™ื•ืชืจ. ื•ื ืจืื” ืฉื”ื›ืœ ืขื•ื‘ื“ ื‘ืกื“ืจ

ื ื™ืกื™ื•ืŸ ืฉืœื•ืฉ
ืกืคืงื™ terraform ื”ื ืงื‘ืฆื™ื ื‘ื™ื ืืจื™ื™ื ื”ืžื›ื™ืœื™ื ืงื•ื“ ืขื ื›ืœ ื”ืžืฉืื‘ื™ื ื•ื”ื”ื™ื’ื™ื•ืŸ ืœืขื‘ื•ื“ื” ืขื API ืฉืœ ื”ืขื ืŸ. ืœื›ืœ ืขื ืŸ ื™ืฉ ืกืคืง ืžืฉืœื• ื•-terraform ืขืฆืžื” ืžืชืงืฉืจืช ืืœื™ื”ื ืจืง ื“ืจืš ืคืจื•ื˜ื•ืงื•ืœ ื”-RPC ืฉืœื• ื‘ื™ืŸ ืฉื ื™ ืชื”ืœื™ื›ื™ื.
ื›ืขืช ื”ื—ืœื˜ืชื™ ืœื™ืฆื•ืจ ืงืฉืจ ื™ืฉื™ืจื•ืช ืขื ืกืคืงื™ terraform ื‘ืืžืฆืขื•ืช ืฉื™ื—ื•ืช RPC. ื–ื” ื™ืฆื ื™ืคื” ื•ืืคืฉืจ ืœืฉื ื•ืช ืกืคืงื™ terraform ืœืกืคืงื™ื ื—ื“ืฉื™ื ื™ื•ืชืจ ื•ืœืงื‘ืœ ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ืžื‘ืœื™ ืœืฉื ื•ืช ืืช ื”ืงื•ื“. ืžืกืชื‘ืจ ื’ื ืฉืœื ื›ืœ ื”ืฉื“ื•ืช ื‘-tfstate ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ื‘-tf, ืื‘ืœ ืื™ืš ืืคืฉืจ ืœื’ืœื•ืช ื–ืืช? ืคืฉื•ื˜ ืชืฉืืœ ืืช ื”ืกืคืง ืฉืœืš ืขืœ ื–ื”. ื•ืื– ื”ื—ืœื” ืคื•ืจื ื•ื’ืจืคื™ื” ืจืงื•ืจืกื™ื‘ื™ืช ื ื•ืกืคืช ืฉืœ ื”ืจื›ื‘ืช ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื, ื—ื™ืคื•ืฉ ืื—ืจ ืฉื“ื•ืช ื‘ืชื•ืš tfstate ื‘ื›ืœ ื”ืจืžื•ืช ืœืขื•ืžืง.

ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ืงื™ื‘ืœื ื• ื›ืœื™ CLI ืฉื™ืžื•ืฉื™ ืฉื™ืฉ ืœื• ืชืฉืชื™ืช ืžืฉื•ืชืคืช ืœื›ืœ ืกืคืงื™ ื”-terraform ื•ืืชื” ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœื”ื•ืกื™ืฃ ืื—ื“ ื—ื“ืฉ. ื›ืžื• ื›ืŸ, ื”ื•ืกืคืช ืžืฉืื‘ื™ื ื“ื•ืจืฉืช ืžืขื˜ ืงื•ื“. ื‘ื ื•ืกืฃ ื›ืœ ืžื™ื ื™ ื“ื‘ืจื™ื ื˜ื•ื‘ื™ื ื›ืžื• ื—ื™ื‘ื•ืจื™ื ื‘ื™ืŸ ืžืฉืื‘ื™ื. ื›ืžื•ื‘ืŸ, ื”ื™ื• ื‘ืขื™ื•ืช ืจื‘ื•ืช ื•ืฉื•ื ื•ืช ืฉืœื ื ื™ืชืŸ ืœืชืืจ ืืช ื›ื•ืœืŸ.
ืงืจืืชื™ ืœื‘ืขืœ ื”ื—ื™ื™ื Terrafomer.

ืกื•ืคื™

ื‘ืืžืฆืขื•ืช Terrafomer, ื™ืฆืจื ื• 500-700 ืืœืฃ ืฉื•ืจื•ืช ืฉืœ ืงื•ื“ tf + tfstate ืžืฉื ื™ ืขื ื ื™ื. ื”ืฆืœื—ื ื• ืœืงื—ืช ื“ื‘ืจื™ื ืžื“ื•ืจ ืงื•ื“ื ื•ืœื”ืชื—ื™ืœ ืœื’ืขืช ื‘ื”ื ืจืง ื“ืจืš terraform, ื›ืžื• ื‘ืชืฉืชื™ืช ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ื›ืจืขื™ื•ื ื•ืช ืงื•ื“. ื–ื” ืคืฉื•ื˜ ืงืกื ื›ืฉืืชื” ืœื•ืงื— ืขื ืŸ ืขื ืง ื•ืžืงื‘ืœ ืื•ืชื• ื“ืจืš ืฆื•ื•ืช ื‘ืฆื•ืจื” ืฉืœ ืงื‘ืฆื™ ืขื•ื‘ื“ terraform. ื•ืื– grep/replace/git ื•ื›ืŸ ื”ืœืื”.

ืกื™ืจืงืชื™ ืื•ืชื• ื•ืกื™ื“ืจืชื™ ืื•ืชื•, ืงื™ื‘ืœืชื™ ืจืฉื•ืช. ืคื•ืจืกื ื‘-GitHub ืœื›ื•ืœื ื‘ื™ื•ื ื—ืžื™ืฉื™ (02.05.19/XNUMX/XNUMX). github.com/GoogleCloudPlatform/terraformer
ื›ื‘ืจ ืงื™ื‘ืœื• 600 ื›ื•ื›ื‘ื™ื, 2 ื‘ืงืฉื•ืช ืžืฉื™ื›ื” ืœื”ื•ืกืคืช ืชืžื™ื›ื” ืขื‘ื•ืจ openstack ื•-kubernetes. ืžืฉื•ื‘ ื˜ื•ื‘. ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ืคืจื•ื™ืงื˜ ืฉื™ืžื•ืฉื™ ืขื‘ื•ืจ ืื ืฉื™ื
ืื ื™ ืžืžืœื™ืฅ ืœื›ืœ ืžื™ ืฉืจื•ืฆื” ืœื”ืชื—ื™ืœ ืœืขื‘ื•ื“ ืขื Terraform ื•ืœื ืœืฉื›ืชื‘ ื”ื›ืœ ื‘ืฉื‘ื™ืœ ื–ื”.
ืื ื™ ืืฉืžื— ืœืžืฉื•ืš ื‘ืงืฉื•ืช, ื‘ืขื™ื•ืช, ื›ื•ื›ื‘ื™ื.

ะ”ะตะผะพ
Terraformer - Infrastructure To Code

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”