【发布时间】:2020-03-22 17:31:14
【问题描述】:
按照教程,我正在尝试设置一个 AWS Lambda 函数,该函数将使用 Data API 将 SQL 查询传递给 AWS RDS Aurora Serverless MySQL 数据库并返回查询结果(可能是 JSON)。
我使用的代码如下(参数存储为环境变量):
const AWS = require('aws-sdk')
const RDS = new AWS.RDSDataService()
exports.handler = async (event, context) => {
console.log(JSON.stringify(event, null, 2)) // Log the entire event passed in
// Get the sqlStatement string value
// TODO: Implement a more secure way (e.g. "escaping") the string to avoid SQL injection
var sqlStatement = event.sqlStatement;
// The Lambda environment variables for the Aurora Cluster Arn, Database Name, and the AWS Secrets Arn hosting the master credentials of the serverless db
var DBSecretsStoreArn = process.env.DBSecretsStoreArn;
var DBAuroraClusterArn = process.env.DBAuroraClusterArn;
var DatabaseName = process.env.DatabaseName;
const params = {
awsSecretStoreArn: DBSecretsStoreArn,
dbClusterOrInstanceArn: DBAuroraClusterArn,
sqlStatements: sqlStatement,
database: DatabaseName
}
try {
let dbResponse = await RDS.executeSql(params)
console.log(JSON.stringify(dbResponse, null, 2))
return JSON.stringify(dbResponse)
} catch (error) {
console.log(error)
return error
}
}
我从 Lambda 控制台运行以下测试(其中“Bonds”是我数据库中现有表的名称):
{
"sqlStatement": "SELECT * FROM Bonds"
}
我的测试记录为成功,输出为空白 {} 并记录了以下错误信息:
INFO TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Request'
| property 'response' -> object with constructor 'Response'
--- property 'request' closes the circle
at JSON.stringify (<anonymous>)
at Runtime.exports.handler (/var/task/index.js:25:24)END
有谁知道我如何使用这种方法成功检索数据,和/或上述错误意味着什么?
【问题讨论】:
-
您不能使用
JSON.stringify将circular object转换为字符串,要检查响应,您可以直接控制台dbResponse -
您可以查看stackoverflow.com/questions/11616630/… 以获取转换为json字符串的参考
标签: javascript mysql json aws-lambda amazon-rds