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

Terraform创建的Secrets Manager密钥无法连接Redshift求助

问题解决:Terraform创建的Secrets Manager密钥无法用于Python连接Redshift

问题根源

  1. Host字段格式错误:Terraform中直接使用aws_redshift_cluster.redshift_cluster.endpoint作为host,该值包含端口(如cluster-name.xxx.region.redshift.amazonaws.com:5439),导致DNS解析时将带端口的字符串当作域名,无法识别。
  2. 缺少必要字段:手动创建的Redshift凭证密钥包含dbname字段,而Terraform生成的密钥中缺失该字段,awswrangler连接时依赖此信息。
  3. 密钥类型标识缺失:手动创建的密钥会自动添加Redshift类型的标签,Terraform创建的普通密钥缺少这些标识,导致awswrangler无法正确识别凭证类型。

解决方案:修改Terraform代码

1. 修正Secrets Manager密钥的标签

给密钥添加Redshift类型标识标签,与手动创建的密钥保持一致:

# Creating a AWS secret for Redshift
resource "aws_secretsmanager_secret" "redshiftcred" {
  name                    = "redshift"
  recovery_window_in_days = 0
  tags = {
    "aws:secretsmanager:resource:type" = "redshift"
    "SecretType"                       = "REDSHIFT"
  }
}

2. 修正Secret Version的字段内容

拆分endpoint获取纯主机名,添加dbname字段:

# Creating a AWS secret versions for Redshift
resource "aws_secretsmanager_secret_version" "redshiftcred" {
  secret_id = aws_secretsmanager_secret.redshiftcred.id
  secret_string = jsonencode({
    engine              = "redshift"
    host                = split(":", aws_redshift_cluster.redshift_cluster.endpoint)[0]
    username            = aws_redshift_cluster.redshift_cluster.master_username
    password            = aws_redshift_cluster.redshift_cluster.master_password
    port                = "5439"
    dbname              = aws_redshift_cluster.redshift_cluster.database_name
    dbClusterIdentifier = aws_redshift_cluster.redshift_cluster.cluster_identifier
  })
  depends_on = [
    aws_secretsmanager_secret.redshiftcred,
    aws_redshift_cluster.redshift_cluster
  ]
}

3. 额外检查项

  • 确认Redshift集群的安全组允许Python脚本所在环境访问5439端口。
  • 验证运行Python脚本的IAM实体拥有secretsmanager:GetSecretValue权限(你已通过手动密钥验证过权限,此步可快速排查异常)。

内容的提问来源于stack exchange,提问作者Amir Damirov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:55:30