使用AWS Lambda和Golang连接到AWS RDS PostgreSQL

5
我正在尝试从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" 我已尝试在主机后面添加默认端口 5432 的 URL,但没有结果。
我确定我错过了一个愚蠢的关键点,请帮助我。
1个回答

3

当您手动创建连接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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接