Могу ли я воссоздать ресурс кластера EMR в 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"
    }
}

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

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

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


person Dave DeCaprio    schedule 21.12.2018    source источник


Ответы (1)


Вы хотите найти какой-то параметр 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 является изменяемым для ресурса. Связанная вами проблема - лучшее обсуждение того, как решить эту проблему в общем случае.

person Eric M. Johnson    schedule 21.12.2018