无法使用 golang SDK 在 AWS RDS 上运行 SQL 查询

Rah*_*tal 2 go amazon-web-services amazon-rds

我是 AWS 新手,第一次使用关系数据库服务(RDS)。

我已经从 AWS 控制台在 RDS 上创建了一个数据库(MySQL)。现在我尝试在数据库中创建一些表,并使用Golang SDK简单地插入和检索数据。我在 Golang 中创建了以下代码来运行 SQL 查询,但出现如下错误。

package main

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

func main() {

    // Initialize a session in us-east-2 
    sess, _ := session.NewSession(&aws.Config{
        Region: aws.String("us-east-2")},
    )


    // Sending a request using the ExecuteStatementRequest method.

    SQLStatement := `CREATE TABLE Persons (
        PersonID int,
        LastName varchar(255),
        FirstName varchar(255),
        Address varchar(255),
        City varchar(255)
    );`

    // Create RDS service client
    rdsdataservice_client := rdsdataservice.New(sess)

    req, resp := rdsdataservice_client.ExecuteStatementRequest(&rdsdataservice.ExecuteStatementInput{
        Database:    aws.String("database-1"),
        ResourceArn: aws.String("arn:aws:rds:us-east-2:9xxxxxxxx9:db:database-1"),
        SecretArn:   aws.String("arn:aws:secretsmanager:us-east-2:9xxxxxxxx9:secret:RDS_Credentials-IZOXv0"),
        Sql:         aws.String(SQLStatement),
    })

    err1 := req.Send()
    if err1 == nil { // resp is now filled
        fmt.Println("Response:", resp)
    } else {
        fmt.Println("error:", err1)
    }

}
Run Code Online (Sandbox Code Playgroud)

我遇到以下错误 -

BadRequestException: Invalid cluster arn: arn:aws:rds:us-east-2:9xxxxxxxx9:db:database-1
        status code: 400, request id: a7744d7c-4f19-232f-8bf1-c25662968d55
Run Code Online (Sandbox Code Playgroud)

如果有人能帮助我找到问题,我将不胜感激。

我正在使用以下 API 参考文档 -链接。我怀疑这些 API 仅适用于 Aurora 数据库,不适用于其他数据库。如果我错了,请纠正我,并建议正确的 API 参考。

Rah*_*tal 8

最后,问题得到解决。

事实上,我的案例存在多个问题。

  1. 起初,我遇到了以下错误 -

BadRequestException:无效的集群 arn:arn:aws:rds:us-east-2:9xxxxxxxx9:db:database-1 状态代码:400,请求 id:a7744d7c-4f19-232f-8bf1-c25662968d55

这是因为我使用了错误的 ResourceArn。按照此找到 ResourceArn -

RDS --> 数据库

在此输入图像描述

并确保 ARN 中有集群,如下所示 -

arn:aws:rds:us-east-2:9xxxxxxxx9:集群:database-1

这就是我所缺少的。

  1. 然后我得到以下错误 -

BadRequestException:未为集群 database-2 启用 HttpEndpoint。请参阅https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api.troubleshooting 状态代码:400,请求 ID:f6ceef3e-c43c-43a3-a5f2-aeafdedd9b71

通过启用数据 API 可以解决此错误。详细信息在上面的链接中。

编辑

如何获取 SecretARN

要获取 SecretARN,您必须secret使用 [Secret Manager] 2创建一个。AWS Secrets Manager 是一项 AWS 服务,可让您更轻松地管理机密。秘密可以是数据库凭据、密码、第三方 API 密钥,甚至是任意文本。您可以使用 Secrets Manager 控制台、Secrets Manager 命令行界面 (CLI) 或 Secrets Manager API 和 SDK 集中存储和控制对这些机密的访问。

点击此链接为 RDS 创建密钥。首先,您可以禁用secret.