从 AWS 中的参数存储中获取值
Getting values from parameter store in AWS
这是我的代码:
const AWS = require('aws-sdk');
const { Client } = require('pg');
function main() {
AWS.config.update({region:'eu-west-2'});
let db_user = {
Name: "postgres_db_user",
WithDecryption: false
};
let db_host = {
Name: "postgres_db_host",
WithDecryption: false
};
let db_database = {
Name: "postgres_db_name",
WithDecryption: false
};
let db_password = {
Name: "postgres_db_password",
WithDecryption: true
};
let db_port = {
Name: "postgres_db_port",
WithDecryption: false
};
let database_user_name;
let database_host;
let database_name;
let database_port;
let database_password;
let ssm = new AWS.SSM();
ssm.getParameter(db_user, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_user_name = data;
}
});
ssm.getParameter(db_host, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_host = data;
}
});
ssm.getParameter(db_database, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_name = data;
}
});
ssm.getParameter(db_password, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_password = data;
}
});
ssm.getParameter(db_port, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_port = data;
}
});
console.log(database_user_name);
console.log(database_host);
console.log(database_name);
console.log(database_password);
console.log(database_port);
let client = new Client({
user: database_user_name,
host: database_host,
database: database_name,
password: database_password,
port: database_port,
});
}
main();
问题是当我打印变量时它们是未定义的,我不知道为什么。 SSM getParameter 函数正在运行,因为如果我使用调试器,我会看到这些值,但由于某些奇怪的原因,它似乎没有将数据变量保存在变量中。
如果有人可以帮助我了解为什么这段代码为变量打印未定义,我将不胜感激。
当约翰发表评论时,我正在起草我的答案:)。
getParameter
是异步函数,它在您使用属性初始化客户端时执行。
这里是编码初始化的一些示例方法。(不完美,但你可以理解)。
var AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });
var ssm = new AWS.SSM();
function getParameter(param) {
return new Promise(function (success, reject) {
ssm.getParameter(param, function (err, data) {
if (err) {
reject(err);
} else {
success(data);
}
});
});
};
function main() {
let db_user = {
Name: "postgres_db_user",
WithDecryption: false
};
let database_user_name;
var promises = [];
promises.push(getParameter(db_user));
Promise.all(promises)
.then(function (result) {
database_user_name = result[0].Parameter.Value;
console.log(database_user_name);
let client = new Client({
user: database_user_name
//rest of the properties
});
//rest of the main() function code
})
.catch(function (err) {
console.log(err);
});
}
main();
参考-
这是我的代码:
const AWS = require('aws-sdk');
const { Client } = require('pg');
function main() {
AWS.config.update({region:'eu-west-2'});
let db_user = {
Name: "postgres_db_user",
WithDecryption: false
};
let db_host = {
Name: "postgres_db_host",
WithDecryption: false
};
let db_database = {
Name: "postgres_db_name",
WithDecryption: false
};
let db_password = {
Name: "postgres_db_password",
WithDecryption: true
};
let db_port = {
Name: "postgres_db_port",
WithDecryption: false
};
let database_user_name;
let database_host;
let database_name;
let database_port;
let database_password;
let ssm = new AWS.SSM();
ssm.getParameter(db_user, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_user_name = data;
}
});
ssm.getParameter(db_host, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_host = data;
}
});
ssm.getParameter(db_database, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_name = data;
}
});
ssm.getParameter(db_password, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_password = data;
}
});
ssm.getParameter(db_port, function (err, data) {
if (err) {
console.log(err, err.stack);
} else {
database_port = data;
}
});
console.log(database_user_name);
console.log(database_host);
console.log(database_name);
console.log(database_password);
console.log(database_port);
let client = new Client({
user: database_user_name,
host: database_host,
database: database_name,
password: database_password,
port: database_port,
});
}
main();
问题是当我打印变量时它们是未定义的,我不知道为什么。 SSM getParameter 函数正在运行,因为如果我使用调试器,我会看到这些值,但由于某些奇怪的原因,它似乎没有将数据变量保存在变量中。
如果有人可以帮助我了解为什么这段代码为变量打印未定义,我将不胜感激。
当约翰发表评论时,我正在起草我的答案:)。
getParameter
是异步函数,它在您使用属性初始化客户端时执行。
这里是编码初始化的一些示例方法。(不完美,但你可以理解)。
var AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });
var ssm = new AWS.SSM();
function getParameter(param) {
return new Promise(function (success, reject) {
ssm.getParameter(param, function (err, data) {
if (err) {
reject(err);
} else {
success(data);
}
});
});
};
function main() {
let db_user = {
Name: "postgres_db_user",
WithDecryption: false
};
let database_user_name;
var promises = [];
promises.push(getParameter(db_user));
Promise.all(promises)
.then(function (result) {
database_user_name = result[0].Parameter.Value;
console.log(database_user_name);
let client = new Client({
user: database_user_name
//rest of the properties
});
//rest of the main() function code
})
.catch(function (err) {
console.log(err);
});
}
main();
参考-