【问题标题】:Unable to run SQL query on AWS RDS using golang SDK无法使用 golang SDK 在 AWS RDS 上运行 SQL 查询
【发布时间】:2020-02-11 01:18:20
【问题描述】:

我是 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)
    }

}

我遇到了错误 -

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

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

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

【问题讨论】:

    标签: amazon-web-services go amazon-rds


    【解决方案1】:

    问题终于解决了。

    实际上在我的案例中存在多个问题。

    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:cluster:database-1

    这就是我所缺少的。

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

    BadRequestException:未为集群数据库 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 Manager] 创建一个 secret 2。 AWS Secrets Manager 是一项 AWS 服务,可让您更轻松地管理密钥。秘密可以是数据库凭证、密码、第三方 API 密钥,甚至是任意文本。您可以使用 Secrets Manager 控制台、Secrets Manager 命令行界面 (CLI) 或 Secrets Manager API 和 SDK 集中存储和控制对这些密钥的访问。

    按照此link 为 RDS 创建密钥。开始时,您可以禁用 secret 的自动轮换。

    【讨论】:

    • 你能告诉我你是从哪里得到“SecretArn”字段的吗?
    • 我收到 BadRequestException: Access denied for user (using password: YES), 你有这个错误吗?
    • @JohnBalvinArias 请详细说明。当您收到此错误时?
    • 我使用的是 rds -> aurora -> serverless 并且没有在互联网上使用任何建议,我尝试了命令: telnet [enpoint] [port] 但它没有连接,但后来我改为 rds -> mysql ,然后它工作了
    • 其实问题不是秘密 ARN 而是因为我没有在参数 JSON 中使用 Camel Case。
    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 2017-10-25
    • 1970-01-01
    • 2019-11-16
    • 2022-06-10
    • 1970-01-01
    • 2019-05-14
    • 2021-01-22
    相关资源
    最近更新 更多