问题描述
我已使用具有 Go Lambda 函数的后端设置 AWS Amplify。我正在尝试连接到 RDS 上的 postgres 数据库,但它似乎无法 ping 通它(我可以使用具有相同输入的 SQL 工作台进行连接)。
在日志上,您可以看到“尝试连接”,但除了结束请求 ID 等之外别无其他
如果它适用于 SQL 工作台,那么它应该适用于 Go。我哪里出错了?
Go 代码是:
package main
import (
"bytes"
"context"
"database/sql"
"encoding/json"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
_ "github.com/lib/pq"
)
type Response events.APIGatewayProxyResponse
const (
host = "***.***.***.*****.amazonaws.com"
port = 5432
user = "postgres"
password = "********"
dbname = "*******"
)
func Handler(ctx context.Context,request events.APIGatewayProxyRequest) (Response,error) {
var buf bytes.Buffer
fmt.Println("trying to connect")
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=require",host,port,user,password,dbname)
db,err := sql.Open("postgres",psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("connected")
body,err := json.Marshal(map[string]interface{}{
"message": a2,})
if err != nil {
return Response{StatusCode: 404},err
}
json.HTMLEscape(&buf,body)
resp := Response{
StatusCode: 200,IsBase64Encoded: false,Body: buf.String(),Headers: map[string]string{
"Content-Type": "application/json","X-MyCompany-Func-Reply": "hello-handler","Access-Control-Allow-Origin": "*","Access-Control-Allow-Methods": "POST,GET,OPTIONS,PUT,DELETE","Access-Control-Allow-Headers": "Accept,Content-Type,Content-Length,Accept-Encoding,X-CSRF-Token,Authorization",},}
return resp,nil
}
func main() {
lambda.Start(Handler)
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)