应用时避免覆盖 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,
]
}
}
我有一个用于 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,
]
}
}