Terraform: инфраструктура на уровне кода | страница 87



    cidr_blocks = ["0.0.0.0/0"]

  }

}

Обратите внимание на то, что параметру name присваивается "${var.cluster_name}-alb". Аналогичные изменения нужно внести и в другой ресурс aws_security_group (можете назвать его "${var.cluster_name}-instance"), а также в aws_alb и раздел tag ресурса aws_autoscaling_group.

Вы также должны обновить источник данных terraform_remote_state, чтобы он использовал db_remote_state_bucket и db_remote_state_key в качестве параметров bucket и соответственно key. Это позволит ему считывать файл состояния из правильной среды:

data "terraform_remote_state" "db" {

  backend = "s3"

  config = {

    bucket = var.db_remote_state_bucket

    key    = var.db_remote_state_key

    region = "us-east-2"

  }

}

Теперь можете аналогичным образом задать эти новые входные переменные в тестовой среде в файле stage/services/webserver-cluster/main.tf:

module "webserver_cluster" {

  source = "../../../modules/services/webserver-cluster"

  cluster_name           = "webservers-stage"

  db_remote_state_bucket = "(YOUR_BUCKET_NAME)"

  db_remote_state_key    = "stage/data-stores/mysql/terraform.tfstate"

}

То же самое нужно сделать для промышленной среды в файле prod/services/webserver-cluster/main.tf:

module "webserver_cluster" {

  source = "../../../modules/services/webserver-cluster"

  cluster_name           = "webservers-prod"

  db_remote_state_bucket = "(YOUR_BUCKET_NAME)"

  db_remote_state_key    = "prod/data-stores/mysql/terraform.tfstate"

}

Промышленная база данных еще не существует. В качестве упражнения попробуйте добавить ее самостоятельно по аналогии с тестовой.

Как видите, для установки входных переменных модуля и аргументов ресурса используется один и тот же синтаксис. Входящие переменные являются API модуля и определяют то, как он себя ведет в разных окружениях. В этом примере мы задаем разные имена для разных сред, но вы можете сделать конфигурируемыми и другие параметры. Предположим, чтобы сэкономить деньги, в тестовой среде можно запускать небольшой кластер веб-серверов, но в промышленных условиях вам понадобится большой кластер, способный справиться с сильными нагрузками. Для этого в файл modules/services/webserver-cluster/variables.tf можно добавить еще три входные переменные:

variable "instance_type" {

  description = "The type of EC2 Instances to run (e.g. t2.micro)"

  type        = string

}

variable "min_size" {

  description = "The minimum number of EC2 Instances in the ASG"