ืื ื ืจืืฆื ืืกืคืจ ืืื ืขื ืืื ื-CLI ืืืืฉ ืฉืืชืืชื ืืื ืืคืชืืจ ืืขืื ืืฉื ื.
ืืขืื
Terraform ืืืจ ืืืื ืกืื ืืจื ืืงืืืืช Devops/Cloud/IT. ืืืืจ ืืืื ื ืื ืืฉืืืืฉื ืืืชืืืืืืช ืขื ืชืฉืชืืช ืืงืื. ืืฉ ืืจืื ืชืขื ืืืืช ื- Terraform ืืื ืื ืืืืืืช ืจืืื, ืกืืื ืื ืืืืช ืืืืจืคืืช.
ืขื Terraform ืืืื ื ืื ืืืฆืืจ ืืืจืื ืืืฉืื ืืื ืื ืื, ืืฉื ืืช ืื ืืืืืง ืืืชื. ืื ืฆืจืื ืืขืฉืืช ืื ืฉืืฉ ืื ืชืฉืชืืช ืขื ืงืืช ืืขื ื ืืื ื ืืฆืจื ืืจื Terraform? ืฉืืชืื ืืืฆืืจื ืืืืฉ ืฉื ืืขื ื ืืืื ืืื ืืืืฉืื ืืงืจ ืืื ืืืื.
ื ืชืงืืชื ืืืขืื ืืื ื-2 ืขืืืืืช, ืืืืืื ืืื ืคืฉืืื ืืื ืืฉืืชื ืจืืฆื ืฉืืื ืืืื ื-Git ืืฆืืจื ืฉื ืงืืฆื terraform, ืืื ืืฉ ืื 250+ ืืืืื ืืื ืืจืื ืืืชืื ืืืชื ื-terraform ืืื.
ืืฉ
ืืืืคื ืืืื, ืืื ืืื ืืชืืื ื ืจืง ืืืืื ืืฉืืื
ืืืืจืืช: ืืืืืจ ืืื ื ืื ืืจืืกืื ืืืฉื ืืืฆืืช ืืืื ืืืืชื ืืขื ืืจืืกืืช. ืืืืืจื ืืฉืืืืืช ืืชืื.
ืคืชืจืื ืืช
1. ืืฉ ืคืชืจืื ืืช ืืืื ืื ืืืฉื ืื ืขืืืจ AWS
ืืื ืขืืื 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, ืื 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).
ืืืจ ืงืืืื 600 ืืืืืื, 2 ืืงืฉืืช ืืฉืืื ืืืืกืคืช ืชืืืื ืขืืืจ openstack ื-kubernetes. ืืฉืื ืืื. ืืืืคื ืืืื, ืืคืจืืืงื ืฉืืืืฉื ืขืืืจ ืื ืฉืื
ืื ื ืืืืืฅ ืืื ืื ืฉืจืืฆื ืืืชืืื ืืขืืื ืขื Terraform ืืื ืืฉืืชื ืืื ืืฉืืื ืื.
ืื ื ืืฉืื ืืืฉืื ืืงืฉืืช, ืืขืืืช, ืืืืืื.
ะะตะผะพ
ืืงืืจ: www.habr.com