You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform导入的aws_glue_connection如何避免覆盖connection_properties属性

解决方案

方案1:使用lifecycle规则忽略敏感字段变更(推荐适配你当前的需求)

直接在aws_glue_connection资源块中添加lifecycle配置,指定忽略connection_properties的整体或部分字段的变更,Terraform执行plan和apply时就不会覆盖你手动在控制台配置的凭证信息:

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的所有变更
      connection_properties
      // 如果需要保留对部分非敏感字段(比如JDBC_ENFORCE_SSL)的管理能力,可以只忽略敏感字段:
      // connection_properties["JDBC_CONNECTION_URL"],
      // connection_properties["USERNAME"],
      // connection_properties["PASSWORD"]
    ]
  }
}

为什么省略connection_properties参数不生效?

对于Terraform而言,资源的所有参数如果没有显式在配置中声明,且没有被纳入ignore_changes规则,Terraform会默认将配置值与远端实际值对比,尝试将远端值对齐为配置中的预期值(未声明的属性会被Terraform判定为需要移除,因此仍然会触发覆盖操作)。

方案2:结合AWS密钥服务托管敏感配置(进阶,适合长期标准化管理)

如果你不想完全放弃对connection_properties的Terraform管理,又不希望在代码中存储明文凭证,可以将敏感值存储到AWS Secrets Manager或SSM Parameter Store中,通过Terraform数据源动态读取填充:

// 读取SSM参数存储中的敏感配置,需提前在AWS中配置好对应参数并授予Terraform访问权限
data "aws_ssm_parameter" "db_jdbc_url" {
  name            = "/prod/glue/connection/jdbc_url"
  with_decryption = true
}
data "aws_ssm_parameter" "db_username" {
  name            = "/prod/glue/connection/username"
  with_decryption = true
}
data "aws_ssm_parameter" "db_password" {
  name            = "/prod/glue/connection/password"
  with_decryption = true
}

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 = data.aws_ssm_parameter.db_jdbc_url.value
    JDBC_ENFORCE_SSL    = "false"
    PASSWORD            = data.aws_ssm_parameter.db_password.value
    USERNAME            = data.aws_ssm_parameter.db_username.value
  }
}

该方案不需要手动在控制台修改配置,代码中无明文凭证,同时也能保证Terraform配置与远端实际值一致,不会触发不必要的变更。

注意事项

如果后续需要通过Terraform修改被ignore_changes覆盖的字段,只需临时将对应字段从ignore_changes列表中移除,修改配置完成apply后再重新添加即可。

内容的提问来源于stack exchange,提问作者John Skiles Skinner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 03:24:03