从AWS中的参数存储获取值 [英] Getting values from parameter store in AWS

查看:258
本文介绍了从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函数正在工作,因为如果我使用调试器,我会看到值,但由于某些奇怪的原因,似乎没有将数据变量保存在变量中。

The problem is that when I print the variables they are undefined, and I have no idea why. The SSM getParameter function is working because if I use the debugger, I see the values, but it doesn't seem to save the data variable in the variables for some strange reason.

如果有人可以帮我解释为什么这个代码打印未定义的变量我会很感激。

If someone could help me as to why this code is printing undefined for the variables I would appreciate it.

推荐答案

我是在John评论时起草我的答案:)。

I was drafting my answer when John commented :).

getParameter 是异步函数,它正在初始化时执行具有属性的客户端。

getParameter is async function and it's being executed while you are initializing the client with properties.

下面是一些编码初始化的示例方法。(不完美,但你可以得到这个想法)。

Here is some sample way of coding initialization.(not perfect but you can get the idea).

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();

参考 -
https://stackoverflow.com/a/44868681/5030709

这篇关于从AWS中的参数存储获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆