Terraform от Hashicorp для Amazon AWS

ToC

  1. Packer от Hashicorp
  2. Terraform для AWS
  3. AWS VPC с Terraform
  4. AWS EC2 с Terraform
  5. AWS ELB с Terraform

Terraform от Hashicorp

Terraform - утилита по формированию инфраструктуры от той же компании Hashicorp.

Это очень простая, но вто же время мощная утилита. Конфигурация пишется на языке HCL (фирменный декларативный язык Hashicorp). Он очень напоминет JSON, а потому достаточно легко читается.

В этом цикле я буду рассматривать как управлять инфраструктурой в Amazon, но это не значит, что Terraform не умеет формировать инфраструктуру у других облачных провадеров.

Для работы с Terraform нужно иметь настроенное окружение для доступа в Amazon AWS. Делается это с помощью aws-cli.

Начнем.

Установка

Установка Terraform заключается в скачивании готового файла и копировании его куда-то в доступное место для переменной PATH.

AWS provider

Все файлы в Terraform имеют расширение .tf или .tfvars. Первый описывает инфраструктуру, второй описывает содержимое переменных.

Создаем файл variables.tf и вписываем туда следующее:

variable "aws_region" {}

Таким образом мы определили, что мы будем использовать переменную aws_region. Если мы в .tfvars не укажем ее содержимое, то Terraform спросит нас об этом при запуске.

Давайте сразу и укажем регион в файле terraform.tfvars:

aws_region = "eu-central-1"

Теперь пришла очередь указать провайдер в файле aws.tf:

provider "aws" {
    region = "${var.aws_region}"
}

data "aws_caller_identity" "current" {}

output "account_id" {
  value = "${data.aws_caller_identity.current.account_id}"
}

Заодно мы выведем на экран наш ID в Amazon. Это может потом пригодиться.

Настройка провайдера закончена, теперь можно проверить работу. Для этого надо запустить:

$ terraform init

Это проинициализирует провайдера и можно приступать к тесту:

$ terraform apply -var-file=terraform.tfvars

В результате работы вы увидите нечто типа:

data.aws_caller_identity.current: Refreshing state...

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

account_id = 000001010010

Хранение состояния в Amazon S3

Согласитесь, что иногда приходится работать не одному, а в команде. Тогда нужно как-то все изменения передавать коллегам. Копировать файл состояния каждый раз руками - это не удобно. Сильно удобнее хранить его где-то в том же Amazon S3. Давайте мы это и настроим.

Создадим файл state.tf с таким содержимым:

data "terraform_remote_state" "remote-state" {
  backend = "s3"
  config {
    bucket     = "tutorialterraformstate"
    key        = "/terraformstate"
    region     = "${var.aws_region}"
  }
}

После этого создаем Bucket в Amazon S3 (не забываем про правильный регион) с именем tutorialterraformstate и запускаем:

$ terraform apply -var-file=terraform.tfvars

Если все получилось, то состояние Terraform будет хранить именно в нем.

На сегодня все. Следующей темой будет создание EC2 инстансов и может быть что-то еще. ;)

Еще одно - все исходники можно взять на GitHub.


Comments !