我不太确定如何在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中对此问题进行了一些讨论,读到我没有看到明显的解决方案,但认为我仍然会提出问题。
答案 0 :(得分:0)
您要查找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
在资源上是可变的,那么这显然将不起作用。您链接的问题是在一般情况下如何解决此问题的更好的讨论。