我在AWS RDS上有一个postgres实例。此实例允许您使用
IAM身份验证
。我还有一个lambda函数,它执行在函数实现的单独文件中定义的各种查询。此函数在调用API网关中定义的端点时执行。
带查询的文件实现:
const { Pool } = require("pg");
const region = process.env.REGION;
const signer = new aws.RDS.Signer({
region: process.env.REGION,
hostname: process.env.PG_HOST,
port: 5432,
username: "db_iamuser",
});
const pool = new Pool({
user: "db_iamuser",
host: process.env.PG_HOST,
database: process.env.PG_DATABASE,
port: 5432,
ssl: {
rejectUnauthorized: false,
},
password: () => signer.getAuthToken(),
});
async function destroy() {
await pool.end().then(() => console.log("DB Connection ended"));
}
async function getInfo1() {
const query = `SELECT field1, field2 FROM public.table1`;
try {
const response = await pool.query(query);
return response.rows;
} catch (error) {
throw error;
}
}
async function getInfo2() {
const query = `SELECT field1, field2 FROM public.table2`;
try {
const response = await pool.query(query);
return response.rows;
} catch (error) {
throw error;
}
}
async function getInfo3() {
const query = `SELECT field1, field2 FROM public.table3`;
try {
const response = await pool.query(query);
return response.rows;
} catch (error) {
throw error;
}
}
module.exports = {
getInfo1,
getInfo2,
getInfo3,
};
在同一个函数中,我在AWS Cognito中创建了一个用户。
const { Responses } = require("../../libs/response");
const {
getInfo1,
getInfo2,
getInfo3,
} = require("../../libs/queries");
const { CognitoService } = require("../../libs/cognito");
exports.handler = async function (event, context) {
const { Authorization } = event.headers;
const user = JSON.parse(event.body);
try {
console.log("Getting Info1 ");
const info1 = await getInfo1();
console.log("Getting Info2 ");
const info1 = await getInfo2();
console.log("Getting Info3 ");
const info1 = await getInfo3();
await provider
.adminCreateUser(request)
.promise();
await provider
.adminAddUserToGroup({ request, GroupName })
.promise();
return Responses._200({ });
} catch (error) {
console.log("Error ", error);
throw error;
}
};
当我调用执行lambda函数的端点时,查询的执行不会出现问题。
但是,如果我再次调用,并且端点立即抛出此错误:
PAM authentication failed for user \"db_iamuser\"
注意:我将查询隔离在一个lambda函数中,该函数不会在Cognito中执行任何操作,并且每次调用它时它都会工作。
请有人帮我理解为什么会发生这种情况。