Могу ли я воссоздать ресурс кластера EMR в Terraform при изменении содержимого его загрузочного действия? - PullRequest
0 голосов
/ 21 декабря 2018

Я не совсем уверен, как решить эту проблему в terraform.

У нас есть кластер EMR с некоторыми действиями начальной загрузки, которые определены как ресурсы S3.Упрощенный вид нашей конфигурации terraform:

resource "aws_s3_bucket_object" "bootstrap_action" {
  bucket = "${var.s3_emr_bootstrap_bucket}"
  key    = "bootstrap"
  content = <<EOF
#!/bin/bash
echo "Doing bootstrap actions"
EOF
}

resource "aws_emr_cluster" "emr_cluster" {

    ...configuration of the EMR cluster...

    bootstrap_action {
        path = "s3://${aws_s3_bucket_object.bootstrap_action.bucket}/${aws_s3_bucket_object.bootstrap_action.key}"
        name = "Bootstrap Step"
    }
}

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

Я попытался использовать «зависящий_он», но это только влияет на порядок, на самом деле это не вызывает перестройку.

Существует обсуждение этого вопроса в: https://github.com/hashicorp/terraform/issues/8099 Считая, что я не вижу очевидного решения, но решил, что я все равно задам вопрос.

1 Ответ

0 голосов
/ 21 декабря 2018

Вы хотите найти некоторый параметр aws_emr_cluster, который при обновлении вызывает перестройку ресурса.Я обычно использую name или description, если они доступны, и принудительно восстанавливаю ресурсы.Имя кажется здесь разумным.

Сделайте что-то вроде этого:

locals {
  script = <<EOF
#!/bin/bash
echo "Doing bootstrap actions"
EOF
  script_sha = "${sha256(local.script)}"
}

...

name = "emr_cluster_name ${local.script_sha}"

Затем, когда содержимое вашего скрипта изменится, имякластер изменяется, и кластер вынужден перестраиваться.

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

...