Назад | Перейти на главную страницу

Развертывание инстансов EC2 в зонах доступности в одном регионе с помощью Terraform

Мне нужно развернуть 3 экземпляра EC2 в 3 зонах доступности в одном регионе с помощью Terraform. Я пытался использовать следующую структуру:

variable "AVZ" {
  type = "map"
  default = {
  eu-central-1 = ["eu-central-1a","eu-central-1b","eu-central-1c"]
  eu-west-1    = ["eu-west-1a","eu-west-1b","eu-west-1c"]
 }
}

и

resource "aws_instance" "web-server0" {
   count = "${var.AWS_COUNT_WEB}"
   availability_zone = "${element(split(",", var.AVZ), count.index)}"
   ami = "${lookup(var.AWS_AMI,var.AWS_REGION)}"
   key_name = "${var.AWS_KEY_NAME}"
   instance_type = "${var.AWS_INSTANCE_TYPE}"
   associate_public_ip_address = "true"
   vpc_security_group_ids = [
     "${aws_security_group.allow_ssh.id}",
     "${aws_security_group.allow_web.id}"
   ]
 tags {
   Name = "web-server-b${count.index}"
   Tier = "blue"
   Role = "Web_Server"
      }

Однако это не сильно помогло. Просто не работает У меня следующая ошибка:

At column 11, line 1: split: argument 2 should be type string, got type 
map in:

Кто-нибудь знает, как я могу использовать карту типа переменной вместо строки, чтобы я мог сопоставить AZ с регионами и искать доступные AZ в зависимости от определенного региона и развертывать экземпляры EC2 в зависимости от этих результатов?

Спасибо алекс

Вы определяете AVZ как карту, но не используете ключ для доступа к ней. А split(",", ...) обычно используется в старом коде со строковыми значениями вместо списков.

Итак, попробуйте эту интерполяцию:

availability_zone = "${element(var.AVZ[var.AWS_REGION], count.index)}"