【发布时间】:2019-09-19 02:24:51
【问题描述】:
在 AWS-Lambda 中,我正在调用以从 DynamoDB 表中检索数据并使用该数据向 API Gateway 发出发布请求。 我使用 Async / await 从 DynamoDB 检索数据。但是,在向 API Gateway 发出发布请求时,Https.request 不会被调用。
我是 NodeJs 和 Lambda 的新手,感谢您帮助获得解决方案。
我尝试实现 Promise 没有任何运气。如果我删除 Async / await ,则 Https.request 调用可以正常工作。但是数据不可用于 https.request 发出发布请求(由于异步调用)。
// Dynamo DB Params
var {promisify} = require('util');
var AWS = require('aws-sdk');
var dynamoDB = new AWS.DynamoDB.DocumentClient();
var dynamoDBGetAsync = promisify(dynamoDB.get).bind(dynamoDB );
var https = require('https');
exports.handler = async function(event,context) {
let probID = JSON.stringify(event.ID);
probID = probID.replace(/"/g, '');
let params = {
TableName : '<dummy_table>',
Key:{
'Server':<serverid>,
'Service':'process2'
}
};
//fetching the details from Dynamo DB
var dataResult= await dynamoDBGetAsync(params);
var obj;
var message = 'Sample Message';
functionCall(dataResult,callback => {
obj = JSON.parse(callback);
});
}
function functionCall(data,result) {
// Options and headers for the HTTP request
var options = {
host: 'dummy.execute-api.us-east-1.amazonaws.com',
port: 443,
path: '/dev/test',
method: 'POST',
headers: {
'Accept':'*/*',
'cache-control':'no-cache',
'Content-Type': 'application/json'
}
};
const body= "{\"msg\": "+ data + "\"}";
console.log('BODY.....:'+body); //able to see this comment in console
let req = https.request(options, (res) => { // This is not getting invoked and cannot see below comment in console
console.log('IN HTTPS REQUEST.....');
var responseString = '';
console.log("statusCode:" + res.statusCode);
res.setEncoding('UTF-8');
// Collect response data as it comes back.
res.on('data', function(data) {
responseString += data;
});
res.on('end', function() {
result(responseString);
});
});
// Handler for HTTP request errors.
req.on('error', function(e) {
console.error('HTTP error: ' + e.message);
result('Request completed with error(s).');
});
req.write(body);
req.end();
}
【问题讨论】:
标签: amazon-web-services async-await aws-lambda amazon-dynamodb