При использовании terraform добавление зашифрованного некорневого тома в шаблон запуска по плану не удается

Это работает:

resource "aws_launch_template" "instances" {
...

  block_device_mappings {
    device_name           = "/dev/xvdb"
    ebs {
      volume_type           = "gp2"
      volume_size           = 250
      delete_on_termination = true
    }
  }

Но когда я пытаюсь добавить это:

block_device_mappings {
  device_name           = "/dev/xvdb"
  ebs {
    volume_type           = "gp2"
    volume_size           = 250
    delete_on_termination = true
    encrypted             = true
    kms_key_id            = "${data.aws_kms_key.instances.id}"
  }
}

Итак, я не могу добавить части шифрования. Ключ существует, включен и имеет разрешения для доступа к нему. Когда я удаляю строки шифрования, план выполняется до конца, и поэтому очевидно, что он будет применяться.

План terraform показывает это:

Error: Error running plan: 1 error(s) occurred:

* module.asg_instances.aws_autoscaling_group.instances_asg: 1 error(s) occurred:

* module.asg_instances.aws_autoscaling_group.instances_asg: Resource 'aws_launch_template.instances_lt' not found for variable 'aws_launch_template.instances_lt.id'

Код asg:

resource "aws_autoscaling_group" "instances_asg" {
  max_size                  = 5
  min_size                  = 2
  min_elb_capacity          = 2
  health_check_grace_period = 300
  health_check_type         = "ELB"
  desired_capacity          = 3
  force_delete              = false
  vpc_zone_identifier       = ["${data.aws_subnet_ids.instances_subnets.*.id}"]
  load_balancers            = ["${aws_elb.instances_elb.name}"]

  launch_template {
    id      = "${aws_launch_template.instances_lt.id}"
    version = "$$Latest"
  }

  lifecycle {
    create_before_destroy = true
  }
}

Очевидно, что шаблон запуска даже не создается, когда у меня есть строки шифрования, из-за которых ссылка на него в ASG не работает. Это не ошибка в шаблоне запуска, который даже не создается, что должно быть.

Намерение состоит в том, чтобы создать ASG на основе этого шаблона запуска, который создает экземпляры с зашифрованным некорневым томом.

Есть идеи, что я сделал не так?


person Mike Ryan    schedule 25.02.2019    source источник
comment
Ваш aws_launch_template называется instances, а не instances_lt.   -  person Matt Schuchard    schedule 25.02.2019
comment
ах, ну, я изменил все имена ресурсов и ссылки просто для неясности. Теперь я понимаю, что рискую запутать проблему, если сделаю опечатку при переименовании. В незатемненном коде я проверил ссылку в asg на шаблон запуска И имя ресурса для aws_launch_template совпадают. С изменением только двух строк шифрования в block_device_mappings он либо работает, либо не работает. Детали были скрыты из-за требований безопасности (сверхчувствительных, я полагаю?). Спасибо за вашу помощь и извините за недоразумение.   -  person Mike Ryan    schedule 25.02.2019
comment
Можете ли вы создать минимальный воспроизводимый пример, который мы можем запустить, чтобы увидеть это поведение?   -  person ydaetskcoR    schedule 26.02.2019
comment
При использовании зашифрованных томов вам потребуется роль службы AutoScaling. И роли нужен доступ к ключу шифрования KMS.   -  person victor m    schedule 26.02.2019
comment
@victorm, я подтвердил, что роль AutoScaling Service существует в IAM (я предполагаю, что это удовлетворяет ваши потребности), и я настроил ее, чтобы иметь права доступа к ключу KMS (там не было). Тем не менее, terraform терпит неудачу по плану с той же ошибкой. Нужно ли мне где-то ссылаться на роль AutoScaling Service в terraform? Я посмотрел и не вижу в этом аргумента ни для asg, ни для ресурсов launch_template.   -  person Mike Ryan    schedule 27.02.2019
comment
@ydaetskcoR, я сначала подумал, что это не должно иметь большого значения после прочтения контента по ссылке, но я не совсем уверен, что смогу это сделать. Я использовал так много вызовов элементов данных вместо vars, что код ожидает, что определенные компоненты уже существуют (например, ключ kms).   -  person Mike Ryan    schedule 27.02.2019
comment
@MikeRyan Перейдите в консоль и посмотрите группу автоматического масштабирования и посмотрите сообщения о том, почему она не запускает экземпляры. В любом случае, ваш ключ KMS включает в политику следующую запись: {Sid: разрешить использование ключа, Effect: Allow, Principal: {AWS: [«$ {service_linked_role}]}, Action: [kms: Encrypt, kms: Decrypt , kms: ReEncrypt *, kms: GenerateDataKey *, kms: DescribeKey], Resource: *} ---   -  person victor m    schedule 27.02.2019
comment
вы также можете создать роль: ресурс aws_iam_service_linked_role AWSServiceRoleForASG {aws_service_name = autoscaling.amazonaws.com}   -  person victor m    schedule 27.02.2019


Ответы (1)


Как могут два человека написать похожий код и совершить одну и ту же ошибку? ржу не могу

Я наткнулся на этот пост, и у меня был очень похожий код. Удалось отладить и исправить. Проблема в том, что этот код неверен.

Цитата

kms_key_id            = "${data.aws_kms_key.instances.id}"

Должен быть :

Цитата

kms_key_id            = "${data.aws_kms_key.instances.arn}"

Это может пригодиться кому-то другому. Следовательно, отправляю это.

person user11744583    schedule 05.07.2019