Как повторно прикрепить объем с помощью terraform - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь сохранить AWS том EBS в качестве постоянного хранилища данных, каждую неделю мой AMI меняется, поэтому мне нужно ускорить новую виртуальную машину в aws. В настоящее время я ожидаю, что мой том отсоединится от старой виртуальной машины и подключится к новой виртуальной машине, не разрушая том и данные EBS.

resource "aws_instance" "my_instance" {
  count         = var.instance_count
  ami           = lookup(var.ami,var.aws_region)
  instance_type = var.instance_type
  key_name      = aws_key_pair.terraform-demo.key_name
  subnet_id     = aws_subnet.main-public-1.id
//  user_data     = "${file("install_apache.sh")}"

  tags = {
    Name  = "Terraform-${count.index + 1}"
    Batch = "5AM"
  }
}



variable "instances" {
  type = map

  default = {
    "xx" = "sss-console"
    "4xx" = "sss-upload-port"
    "xxx" = "sss"
  }
}

resource "aws_kms_key" "cmp_kms" {
  description = "ssss-ebsencrypt"
  tags        = local.all_labels
}

resource "aws_ebs_volume" "volumes" {
  count             = var.instance_count
  availability_zone = element(aws_instance.my_instance.*.availability_zone, count.index )
  encrypted         = true
  kms_key_id        = aws_kms_key.cmp_kms.arn
  size              = local.volume_size
  type              = local.volume_type
  iops              = local.volume_iops
//  tags              = merge(var.extra_labels, map("Name", "${var.cell}-${element(local.volume_name, count.index)}"))

  lifecycle {
//    prevent_destroy = true
    ignore_changes = [kms_key_id, instance_id]
  }
}

resource "aws_volume_attachment" "volumes-attachment" {
  depends_on   = [aws_instance.my_instance, aws_ebs_volume.volumes]
  count        = var.instance_count
  device_name  = "/dev/${element(local.volume_name, count.index)}"
  volume_id    = element(aws_ebs_volume.volumes.*.id, count.index)
  instance_id  = element(aws_instance.my_instance.*.id, count.index)
  force_detach = true
}

ОШИБКА на терраформе применяется

Error: Unsupported attribute

  on instance.tf line 71, in resource "aws_ebs_volume" "volumes":
  71:     ignore_changes = [kms_key_id, instance_id]

This object has no argument, nested block, or exported attribute named
"instance_id".

ранее тот же код использовался для работы с terraform v0.11, но он не работает с v0.12. что может заменить это или как мы можем повторно подключить EBS к другому компьютеру, не разрушая его?

1 Ответ

1 голос
/ 12 апреля 2020

Согласно документации terraform, они не предоставляют никакого атрибута с именем instance_id для ресурса aws_ebs_volume. Для справки: https://www.terraform.io/docs/providers/aws/d/ebs_volume.html.

Вы можете указать instance_id во время прикрепления тома, используя ресурс aws_volume_attachment.

Вы можете сослаться на ответ, данный в https://gitter.im/hashicorp-terraform/Lobby?at=5ab900eb2b9dfdbc3a237e36 для получения дополнительной информации.

...