【问题标题】:Connect to AWS RDS PostgreSQL with AWS Lambda and Golang使用 AWS Lambda 和 Golang 连接到 AWS RDS PostgreSQL
【发布时间】:2018-11-27 05:15:23
【问题描述】:

我正在尝试从 Go 中的 lambda 连接到 AWS RDS PosgreSQL 数据库。

authToken 在日志中看起来不错。

creds := credentials.NewEnvCredentials()
authToken, err := rdsutils.BuildAuthToken("something.eu-west-3.rds.amazonaws.com", "eu-west-3", "Username", creds)

if err != nil {
    fmt.Println("Cannot create db auth token")
    return response.Status(500), err
}

// Create the DNS string for the DB connection
// // user:password@protocol(endpoint:port)/dbname?<params>
dnsStr := fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=verify-full",
    "Username", authToken, "something.eu-west-3.rds.amazonaws.com", "table_name",
)
db, err := sql.Open("postgres", dnsStr)

if err != nil {
    fmt.Println("Cannot open db")
    return response.Status(500), err
}

err = db.Ping()

if err != nil {
    fmt.Println("Cannot ping db")
    return response.Status(500), err
}

fmt.Println("Connection established")

我在db.Ping() 上有一个错误,在我得到的日志中

Cannot ping db
dial tcp: address tcp/something.eu-west-3.rds.amazonaws.com: unknown port: OpError
null

我使用pq 库,导入为_ "github.com/lib/pq"

我尝试在主机后的url中添加默认端口5432,但没有结果。

我确定我错过了一个愚蠢的关键点,请停止

【问题讨论】:

    标签: postgresql go aws-lambda amazon-rds


    【解决方案1】:

    您需要在手动创建连接 URL 时转义路径特殊变量:

    dnsStr := fmt.Sprintf("postgres://%s:%s@%s/testdb",
        "rdsadmin", url.PathEscape(authToken), "something.eu-west-3.rds.amazonaws.com")
    

    打印连接ping错误也可能有用:

    fmt.Printf("Cannot ping db: %s\n", err)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 2015-01-29
      • 2018-11-16
      • 2021-06-10
      • 2017-07-25
      • 2017-12-27
      • 1970-01-01
      相关资源
      最近更新 更多