Получить параметр AWS ssm навалом - PullRequest
0 голосов
/ 17 октября 2018

Как можно получить параметры из AWS Systems Manager (хранилище параметров) оптом (или несколькими параметрами) одновременно?Используя aws-sdk, ниже приведен код Node.js, который я написал для получения параметра SSM из хранилища параметров:

      const ssm = new (require('aws-sdk/clients/ssm'))()

      const getSSMKey = async params => {
          const {Parameter: {Value: APIKey}} = await ssm.getParameter(params).promise()
          return APIKey
    }

    const [param1, param2, param3] = await Promise.all([
      getSSMKey({ Name: '/data/param/PARAM1', WithDecryption: true }),
      getSSMKey({ Name: '/data/param/PARAM2', WithDecryption: true }),
      getSSMKey({ Name: '/data/param/PARAM3', WithDecryption: true })
    ])
    console.log(param1, param2, param3)

Но с этим кодом я отправляю 3 запроса на получение 3 параметров, которые неэффективны вслучай большого количества параметров.Есть ли способ получить более одного параметра в одном запросе.если ssm.getParameters () - метод для этого, пожалуйста, приведите пример (в частности, параметр для этого метода).Я пытался, но ничего не получил.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Согласно документу AWS , GetParameter получает значение для одного параметра, тогда как GetParameters получает значение для нескольких.

Их использование также очень похоже.При использовании GetParameters для получения нескольких значений передайте несколько имен в виде списка для Names вместо передачи одного имени в виде строки для Name.

Пример кода, чтобы получить параметры с именем "foo"and" bar ", в регионе" us-west-1 ":

const AWS = require('aws-sdk');
AWS.config.update({ region: "us-west-1" });

const SSM = require('aws-sdk/clients/ssm');
const ssm = new SSM()
const query = {
    "Names": ["foo", "bar"],
    "WithDecryption": true
}
let param = ssm.getParameters(query, (err, data) => {
    console.log('error = %o', err);
    console.log('raw data = %o', data);
})
0 голосов
/ 25 октября 2018

Наконец-то это сработало для меня.Ниже приведен код:

        const ssmConfig = async () => {
          const data = await ssm.getParameters({ Names: ['/data/param/PARAM1', '/data/param/PARAM2', '/bronto/rest//data/param/PARAM3'],
WithDecryption: true }).promise()
          const config = {}
          for (const i of data.Parameters) {
            if (i.Name === '/data/param/PARAM1') {
              config.param1 = i.Value
            }
            if (i.Name === '/data/param/PARAM2') {
              config.rest.clientId param2 = i.Value
            }
            if (i.Name === '/data/param/PARAM3') {
              config.param3 = i.Value
            }
          }
          return config
        }
...