Я использую лямбда-функцию в AWS, чтобы выполнить некоторую работу, и мне нужно, чтобы эта функция получила некоторые данные из ресурса AWS SSM, чтобы завершить работу. Однако я изо всех сил пытаюсь получить код для ожидания вызова на getParameter
, чтобы дождаться завершения обратного вызова, прежде чем двигаться дальше.
Я пытался структурировать код двумя разными способами.
Структурная ссылка # 1
Структурная ссылка № 2
Кажется, что ни один из способов не заставляет выполнение остановиться.
С моей текущей реализацией, которая основана на "Структурной ссылке # 2", я не уверен, что делаю неправильно.
const aws = require('aws-sdk');
const crypto = require('crypto');
const ssm = new aws.SSM();
exports.handler = async (event, context, callback) => {
console.log(event.headers);
var webhook = JSON.parse(event.body);
var key = "";
var parameterRequest = ssm.getParameter( {
Name: "param1",
WithDecryption: true
}, function(err, data) {
if (err)
{
console.log(err);
}
else
{
key=data.Parameter.Value;
console.log(data);
}
});
await parameterRequest;
var hash = crypto.createHmac('sha1', key).update(JSON.stringify(webhook)).digest('hex');
console.log("HASH: sha1=" + hash);
console.log("Key:" + key);
}
const response = {
"statusCode": 200,
"statusDescription": "200 OK"
};
return callback(null, response);
Почему console.log("HASH: sha1=" + hash);
и console.log("Key:" + key);
будут выполнены до console.log(data);
?
Обновление 7/2/2019
Ожидание и обещание, примененные без улова попытки:
const aws = require('aws-sdk');
const crypto = require('crypto');
const ssm = new aws.SSM();
exports.handler = async (event, context, callback) => {
console.log(event.headers);
var webhook = JSON.parse(event.body);
var key = "";
var parameterRequest = await ssm.getParameter( {
Name: "param1",
WithDecryption: true
}, function(err, data) {
if (err)
{
console.log(err);
}
else
{
key=data.Parameter.Value;
console.log(data);
}
}).promise();
var hash = crypto.createHmac('sha1', key).update(JSON.stringify(webhook)).digest('hex');
console.log("HASH: sha1=" + hash);
console.log("Key:" + key);
}
const response = {
"statusCode": 200,
"statusDescription": "200 OK"
};
return callback(null, response);