Использование Terraform для создания нескольких томов AWS EBS из общего снимка и пометка их описанием описания снимка - PullRequest
1 голос
/ 15 апреля 2020

Как описано в заголовке, я пытаюсь создать несколько AWS EBS из общих снимков.

Я использую data "aws_ebs_snapshot_ids" , чтобы получить список снимков, а затем использовать for_each для создания томов EBS. Итак, что-то вроде этого

data "aws_ebs_snapshot_ids" "shared_snapshot_ids" {
  filter {
   name   = "description"
    values = ["snap-test*"]
  }
}

resource "aws_ebs_volume" "shared_snapshot_volume" {
    for_each = toset(data.aws_ebs_snapshot_ids.shared_snapshot_ids.ids)
    snapshot_id = each.value
    availability_zone = "us-west-1b"

Теперь я хочу пометить эти тома описанием моментального снимка, но data "aws_ebs_snapshot_ids не возвращает описание, просто список идентификаторов. Итак, у меня есть использовать data "aws_ebs_snapshot" с for_each l oop, чтобы получить описание, и он возвращает карту для снимков.

data "aws_ebs_snapshot" "shared_snapshot" {
  for_each = toset(data.aws_ebs_snapshot_ids.shared_snapshot_ids.ids)
  snapshot_ids = ["${each.value}"]
}

output "shared_snapshot" {
  value = data.aws_ebs_snapshot.shared_snapshot
}

"snap-0000000000001" = {
    "data_encryption_key_id" = ""
    "description" = "snap-test-2"
    "encrypted" = false
    "id" = "snap-0000000000001"
    "kms_key_id" = ""
    "most_recent" = false
    "owner_alias" = ""
    "owner_id" = ""
    "snapshot_id" = "snap-0000000000001"
    "snapshot_ids" = [
      "snap-0000000000001",
    ]
    "state" = "completed"
    "tags" = {}
    "volume_id" = ""
    "volume_size" = 100
  }
  "snap-0000000000000" = {
    "data_encryption_key_id" = ""
    "description" = "snap-test-1"
    "encrypted" = false
    "id" = "snap-0000000000000"
    "kms_key_id" = ""
    "most_recent" = false
    "owner_alias" = ""
    "owner_id" = ""
    "snapshot_id" = "snap-0000000000000"
    "snapshot_ids" = [
      "snap-0000000000000",
    ]
    "state" = "completed"
    "tags" = {}
    "volume_id" = "vol-0000000000000"
    "volume_size" = 8
  }
}

Дон Не знаю, как или если Terraform может сделать это, но я думаю, что это должно быть что-то вроде

resource "aws_ebs_volume" "shared_snapshot_volume" {
    for_each = toset(data.aws_ebs_snapshot_ids.shared_snapshot_ids.ids)
    snapshot_id = each.value
    availability_zone = "us-west-1b"


    tags = {
      Name    = data.aws_ebs_snapshot.shared_snapshot.[${each.value}].description
    }
}

Это не работает, так как это вложенная интерполяция. Пожалуйста, дайте мне знать, если это возможно для Terraform или мне нужно использовать что-то еще.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете использовать источник данных aws_ebs_snapshot , чтобы получить подробную информацию об этих идентификаторах снимков:

data "aws_ebs_snapshot" "shared_snapshots" {
  for_each = toset(data.aws_ebs_snapshot_ids.shared_snapshot_ids.ids)
  snapshot_ids = [each.value]
}

Затем вы можете создавать тома EBS с подробными свойствами, такими как snapshot_id и описание вот так:

resource "aws_ebs_volume" "shared_snapshot_volume" {
  for_each = data.aws_ebs_snapshot.shared_snapshots
    snapshot_id = each.value.snapshot_id
    availability_zone = "us-west-1b"

  tags = {
    Name = each.value.description
  }
}
...