0

我有一个用于 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 正在准备更改 Glue Connection:

~ connection_properties = (sensitive value)

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

我想指示 Terraform 不要用我的占位符凭据覆盖远程凭据。我试着简单地省略这个connection_properties论点,但问题仍然存在。是否有另一种方法可以诱使 Terraform 在申请时不覆盖主机、用户名和密码?

4

1 回答 1

1

根据评论。

您可以使用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,
    ]
  }


}
于 2021-08-16T22:20:45.340 回答