应用时避免覆盖 connection_properties 的 Terraform 粘合连接

Terraform glue connection that avoids overwriting connection_properties upon apply

我有一个用于 AWS Glue 连接的 Terraform 资源,如下所示:

resource "aws_glue_connection" "some-connection-name" {
  name = "some-connection-name"
  physical_connection_requirements {
    availability_zone = var.availability_zone
    security_group_id_list = var.security_group_id_list
    subnet_id = var.subnet_id
  }
  connection_properties = {
    JDBC_CONNECTION_URL = "jdbc:postgresql://change_host_name:5432/db_name"
    JDBC_ENFORCE_SSL    = "false"
    PASSWORD            = "change_password"
    USERNAME            = "change_username"
  }
}

对于上下文,此资源是导入的,而不是最初使用 Terraform 创建的。我一直在通过迭代导入、规划和应用将 Terraform 改造到现有项目。

我当然不想将凭据保存在 Terraform 文件中。所以我使用了占位符值,正如您在上面看到的那样。部署后,我假设我可以手动更改用户名、密码和连接 URL。

当我 运行 terraform plan 时,我得到 Terraform 正准备更改胶水连接的指示:

~ connection_properties = (sensitive value)

Terraform 计划修改 connection_properties,因为它们(有意)不同于实时配置。但我不想这样。我想 terraform apply 我的脚本而不覆盖凭据。定期申请是我开发工作流程的一部分。按照目前的情况,我每次申请后都必须手动恢复凭据。

我想指示 Terraform 不要用我的占位符凭据覆盖远程凭据。我尝试简单地省略 connection_properties 参数,但问题仍然存在。有没有其他方法可以让 Terraform 在申请时不覆盖主机、用户名和密码?

根据评论。

您可以使用 ignore_changes。因此,可能是:

resource "aws_glue_connection" "some-connection-name" {
  name = "some-connection-name"
  physical_connection_requirements {
    availability_zone = var.availability_zone
    security_group_id_list = var.security_group_id_list
    subnet_id = var.subnet_id
  }
  connection_properties = {
    JDBC_CONNECTION_URL = "jdbc:postgresql://change_host_name:5432/db_name"
    JDBC_ENFORCE_SSL    = "false"
    PASSWORD            = "change_password"
    USERNAME            = "change_username"
  }

  lifecycle {
    ignore_changes = [
      connection_properties,
    ]
  }


}