我正在尝试使用数据 API 将带有 SQL 查询的 AWS Lambda 连接到 AWS RDS (MySQL),并为具有特定id
.
这是处理程序的样子:
'use strict';
const AWS = require('aws-sdk')
const RDS = new AWS.RDSDataService({ endpoint: '******.cluster-*********.us-west-2.rds.amazonaws.com' })
module.exports.fetchById = async (event, context, callback) => {
const req_id = event.pathParameters.id;
try {
const params = {
resourceArn: 'arn:aws:rds:us-west-2:***********',
secretArn: 'arn:aws:secretsmanager********',
sql: `SELECT * FROM user WHERE user_id = :id`,
database: '*********',
includeResultMetadata: true,
parameters: [
{ id: req_id },
]
}
const db_res = await rdsDataService.executeStatement(params).promise();
const response = {
body: JSON.stringify({
message: 'Data fetched!!',
data: db_res.records
})
};
callback(null, response);
} catch (error) {
console.log('Error Received', error)
}
};
无服务器.yml
functions:
fetchByIdId:
handler: handler.fetchById
events:
- http:
path: user/{id}
method: get
authorizer:
name: cognito-authorizer
arn: arn:aws:***********
request:
parameters:
paths:
id: true
我需要解决的几个问题:
如果我像这样实例化:
const RDS = new AWS.RDSDataService({ endpoint: '******.cluster-*********.us-west-2.rds.amazonaws.com' })
通过将端点集群作为参数包含在内,处理程序函数根本不会执行。它只是不断抛出:
{"errorMessage": "2020-10-30T07:31:12.258Z c4b4ca2d-3cbb-4733-8cfe-0c7aad228c29 Task timed out after 6.01 seconds"}
.
也尝试增加超时,但它没有任何区别并且错误仍然存在。但是如果端点被删除并且只使用如下:
const RDS = new AWS.RDSDataService()
,函数不会抛出超时错误,但是面临这两个新问题:
id
是必需的。我将所需的配置传递给 yml 文件,但它
似乎没有将其标记为必需。如果 http 端点被执行为
/user/
,它不会抛出任何错误。我需要对请求参数执行输入数据验证/清理。在执行端点
/user/123
时,它会抛出一个错误:INFO Error Received UnexpectedParameter: Unexpected key 'id' found in params.parameters[0]
.
我在文档中读出但找不到任何特定的线索来完成相同的任务。
任何解决此问题的帮助表示赞赏。