Работа с несколькими средами / переменными в Terraform - PullRequest
0 голосов
/ 03 июля 2018

Мы используем terraform для ускорения нашей инфраструктуры в AWS, и у нас есть 3 отдельные среды: Dev, Stage и Prod

Dev: Требуется - публичные, private1a, privatedb и privatedb2 подсети Stage & Prod: Требуется - общедоступные, private_1a, private_1b, privatedb и privatedb2 подсети

У меня есть main.tf, переменные, dev.tfvars, stage.tfvars и prod.tfvars. Я пытаюсь понять, как я могу использовать файл main.tf, который я сейчас использую для среды разработки, и создавать ресурсы, необходимые для stage и prod, используя файлы .tfvars.

terraform apply -var-file = dev.tfvars

terraform apply -var-file = stage.tfvars (это должно создать подсеть private_1b в дополнение к другим подсетям)

terraform apply -var-file = prod.tfvars (это должно создать подсеть private_1b в дополнение к другим подсетям)

Пожалуйста, дайте мне знать, если вам нужны дальнейшие разъяснения.

Спасибо

1 Ответ

0 голосов
/ 03 июля 2018

То, что вы пытаетесь сделать, - это действительно правильный подход. Вам также придется использовать рабочие пространства terraform .

Terraform запускается с одного рабочего пространства с именем «default». это рабочее пространство является особенным, потому что это по умолчанию, а также потому, что это никогда не может быть удалено. Если вы никогда не использовали явно рабочие пространства, тогда вы работали только с рабочим пространством по умолчанию.

Рабочие пространства управляются с помощью набора команд terraform workspace. Чтобы создать новое рабочее пространство и переключиться на него, вы можете использовать terraform рабочее пространство новое; для переключения среды вы можете использовать рабочее пространство Terraform Выбрать; и т.д.

По сути это означает, что у вас будет рабочее пространство для каждой имеющейся у вас среды.

Посмотрим на некоторые примеры.

У меня есть следующие файлы:

  1. main.tf
  2. variables.tf
  3. dev.tfvars
  4. production.tfvars

main.tf

Этот файл содержит модуль VPC 9 Может быть любым ресурсом c). Мы называем переменные через var. Функция:

module "vpc" {
  source          = "modules/vpc"
  cidr_block      = "${var.vpc_cidr_block}"
  subnets_private = "${var.vpc_subnets_private}"
  subnets_public  = "${var.vpc_subnets_public}"
}

variables.tf

Этот файл содержит все наши переменные. Пожалуйста, не делайте, чтобы мы не присваивали здесь default , это обеспечит 100% уверенность в том, что мы используем переменные из файлов .tfvars.

variable "vpc_cidr_block" {}

variable "vpc_subnets_private" {
  type = "list"
}

variable "vpc_subnets_public" {
  type = "list"
}

Вот и все. Наш файл .tfvars будет выглядеть так:

dev.tfvars

vpc_cidr_block = "10.40.0.0/16"
vpc_subnets_private = ["10.40.0.0/19", "10.40.64.0/19", "10.40.128.0/19"]
vpc_subnets_public = ["10.40.32.0/20", "10.40.96.0/20", "10.40.160.0/20"]

production.tfvars

vpc_cidr_block = "10.30.0.0/16"
vpc_subnets_private = ["10.30.0.0/19", "10.30.64.0/19", "10.30.128.0/19"]
vpc_subnets_public = ["10.30.32.0/20", "10.30.96.0/20", "10.30.160.0/20"]

Если я хочу запустить terraform для моей среды разработки, я бы использовал эти команды (при условии, что рабочие пространства уже созданы, см. Документы рабочей области Terraform ):

  1. Выберите среду разработки: terraform workspace select dev
  2. Запустите план, чтобы увидеть изменения: terraform plan -var-file=dev.tfvars -out=plan.out
  3. Применить изменения: terraform apply plan.out

Вы можете повторить это для любого количества окружений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...