为 Amazon Aurora 启用数据 Api

Enable DATA Api for Amazon Aurora

我们有一个 运行 AWS Aurora 集群(不是无服务器版本)。 我已经通过 Querious(SQL 的 GUI)从外部成功连接到数据库 使用 Golang RDS SDK 时出现以下错误消息:

没有为集群 sample-db-cluster 启用 HttpEndpoint。请参考https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api.troubleshooting

这个 links 告诉我激活数据 API。

问题:这个 link 以及我到目前为止发现的任何其他问题总是与无服务器 Aurora 相关,我找不到任何方法为我的 Aurora 实例启用它。

我还尝试通过 CLI 启用数据 Api:

aws rds modify-db-cluster --db-cluster-identifier my-cluster-id --enable-http-endpoint --region us-east-1

这没有用!

下面是我连接到 Aurora 的代码:

package main

import (
"fmt"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/rdsdataservice"
    "log"
    "os"
)

func main() {

    sess:= getSession()
    SQLStatement := `SELECT * FROM testTable`
    fmt.Println("SQLStatement",SQLStatement)
    rdsdataservice_client := rdsdataservice.New(sess)
    req, resp := rdsdataservice_client.ExecuteStatementRequest(&rdsdataservice.ExecuteStatementInput{
        Database:    aws.String("my-database-name"),
        ResourceArn: aws.String("arn:aws:rds:us-east-1:XXXXXXXXXXX:cluster:XXXXXXXX"),
        SecretArn:   aws.String("arn:aws:secretsmanager:us-east-1:XXXXXXXXXXX:secret:XXXXXXXX"),
        Sql:         aws.String(SQLStatement),
    })

    err1 := req.Send()
    if err1 == nil {
        fmt.Println("Response:", resp)
    } else {
        fmt.Println("error:", err1) // Produces the mentioned error
    }
}


func getSession() *session.Session {

    var sess *session.Session
    var err error
    if os.Getenv("aws_access_key_id") != "" && os.Getenv("aws_secret_access_key") != "" && os.Getenv("aws_region") != "" { // explicit credentials
        creds := credentials.NewStaticCredentials(os.Getenv("aws_access_key_id"), os.Getenv("aws_secret_access_key"), "")
        sess, err = session.NewSession(&aws.Config{
            Region:      aws.String("us-east-1"),
            Credentials: creds,
        })
        if err != nil {
            log.Println("Error cred")
        }
    } else {
        sess = session.Must(session.NewSession()) // credentials are passed implicit by role lambda-news-parser-executor (defined in IAM)
    }
    return sess
}

I could not find any way to enable this for my Aurora instance

这是因为不支持。数据 API 仅适用于 Serverless Aurora。

好的!我发现了那个问题 github.com/aws/aws-sdk-go/service/rdsdataservice 仅可用于无服务器 Aurora 而不是“正常”实例。

Link here

Package rdsdataservice provides the client and types for making API requests to AWS RDS DataService. Amazon RDS provides an HTTP endpoint to run SQL statements on an Amazon Aurora Serverless DB cluster. To run these statements, you work with the Data Service API.