Terraform позволяет описывать и поднимать удаленно инфраструктуру в облаках (дальнейшие примеры в Google Cloud Platform
). Простейшая конфигурация состоит из четырех файлов:
main.tf
- основной конфиг, описывающий какие инстансы нам нужныvariables.tf
- конфиг с описанием переменных и значениями по дефолту, если дефолтных значений нет, то они являются обязательнымиterraform.tfvars
- конфиг с значением переменных, часто является секретным, нужно с осторожностью пушить в публичные репозитарииoutputs.tf
- описание выходных переменных, необязательный файл, но очень удобно вычленять нужные параметры из созданного инстанса, например IP созданного в облаке инстансаprovider "google" {
project = "infra-14367"
region = "europe-west1"
}
resource "google_compute_instance" "app" {
name = "reddit-app" machine_type = "g1-small"
zone = "europe-west1-b" # определение загрузочного диска boot_disk {
initialize_params { image = "reddit-base" }
}
network_interface {
network = "default"
access_config {}
} }
Установка провайдера производится командой terraform init
list preferences all providers
variables.tf
Входные переменные описываются в файле variables.tf:
variable project {
description = "Project ID"
}
variable region {
description = "Region"
default = "europe-west1"
}
Пример использования переменных в main.tf:
provider "google" {
project = "${var.project}"
region = "${var.region}"
}
Задание переменных через файл
project = "infra-179015"
public_key_path = "~/.ssh/appuser.pub"
$ terraform apply -var-file=my-vars.tfvars
outputs.tf
outputs.tf
output "app_external-ip {
value="${google_compute_instance.app.network_interface.0.access_config.0.assigned_nat_ip}"
}
// просмотр
$ terraform output
app_external_ip = 104.199.54.241
После описания конфигурации всё готово к "поднятию" инфраструктуры в облаке
terraform -auto-approve=true apply
- идемпотентна!terraform plan
terraform refresh
terraform output
terraform taint google_compute_instance.app
После создания инфраструктуры в папке появляется state
-файл со всей созданной инфраструктурой и удаляется после terraform-destroy
terraform.tfstate
terraform.tfstate
обновляется при каждом запуске apply или refreshterraform.tfstate.backup
используется для бекапа предыдущего terraform.state
$ terraform show
$ terraform state show google_compute_firewall.firewall_puma
$ terraform show | grep assigned_nat_ip
GPC