首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量检索AWS ssm参数

批量检索AWS ssm参数
EN

Stack Overflow用户
提问于 2018-10-18 00:11:58
回答 4查看 11.7K关注 0票数 8

如何一次从AWS Systems Manager (参数存储)批量(或多个参数)检索参数?使用aws-sdk,下面是我编写的用于从参数存储中检索SSM参数的Node.js代码:

代码语言:javascript
复制
      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()是这样做的方法,那么请给出一个例子(特别是该方法的参数)。我试过了,但什么也没收到。

EN

回答 4

Stack Overflow用户

发布于 2018-12-06 03:32:15

根据AWS documentGetParameter获取一个参数的值,而GetParameters获取多个参数的值。

它们的用法也非常相似。使用GetParameters获取多个值时,请将多个名称作为Names的列表传递,而不是将单个名称作为字符串传递给Name

代码示例,获取名为"foo“和"bar”的参数,位于"us-west-1“区域:

代码语言:javascript
复制
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);
})
票数 11
EN

Stack Overflow用户

发布于 2018-10-25 23:25:39

最后,它对我起作用了。代码如下:

代码语言:javascript
复制
        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
        }
票数 7
EN

Stack Overflow用户

发布于 2019-10-31 01:15:47

这就是我从特定路径检索所有参数所做的工作。

代码语言:javascript
复制
**your SSM function  client :**
'use strict';
const SSM = require('aws-sdk/clients/ssm');
let ssmclient;
module.exports.init = () => {
    const region = process.env.REGION === undefined ? 'us-east-1' : process.env.REGION ;
    ssmclient = new SSM({region: region});
}
module.exports.getParameters = async (path) => {
    try {
        let params = {
            Path: path,
            WithDecryption: true
        };
        let allParameters = [];
        let data =  await ssmclient.getParametersByPath(params).promise();
        allParameters.push.apply(allParameters, data.Parameters);
        while(data.NextToken) {
            params.NextToken = data.NextToken;
            data =  await ssmclient.getParametersByPath(params).promise();
            allParameters.push.apply(allParameters, data.Parameters);
        }
        return allParameters;
    } catch (err) {
        return Promise.reject(err);
    }
}
calling this client:

const ssm = require("yourssmclinet");
ssm.init();
// you call only once to retrieve everything which falls under /data/param
const parameters = await getParameters("/data/param");
//from here you can fetch parameters['what ever needed'].
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52859297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档