在 Terraform 中,当 bootstrap 操作内容发生变化时,我可以重新创建 EMR 集群资源吗?
In Terraform, can I recreate an EMR cluster resource when its bootstrap action contents change?
我不太确定如何在 terraform 中解决这个问题。
我们有一个 EMR 集群,其中一些 bootstrap 操作被指定为 S3 资源。我们的地形配置的简化视图是:
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"
}
}
我们想要做的是让更改 bootstrap 操作脚本的内容导致集群重建。如果这种情况发生变化,现在我们必须手动污染集群。
我试过使用 "depends_on",但这只会影响排序,实际上并不会强制重建。
关于这个问题的一些讨论在:https://github.com/hashicorp/terraform/issues/8099 读到我没有看到明显的解决方案,但我想我还是 post 一个问题。
您想找到 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
在资源上是可变的,这显然不起作用。您链接的问题更好地讨论了在一般情况下如何解决此问题。
我不太确定如何在 terraform 中解决这个问题。
我们有一个 EMR 集群,其中一些 bootstrap 操作被指定为 S3 资源。我们的地形配置的简化视图是:
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"
}
}
我们想要做的是让更改 bootstrap 操作脚本的内容导致集群重建。如果这种情况发生变化,现在我们必须手动污染集群。
我试过使用 "depends_on",但这只会影响排序,实际上并不会强制重建。
关于这个问题的一些讨论在:https://github.com/hashicorp/terraform/issues/8099 读到我没有看到明显的解决方案,但我想我还是 post 一个问题。
您想找到 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
在资源上是可变的,这显然不起作用。您链接的问题更好地讨论了在一般情况下如何解决此问题。