在 NodeJS Lambas 中访问 AWS SSM 参数

Accessing AWS SSM Parameters in NodeJS Lambas

我能够在 NodeJS 中从本地的 AWS SSM Parameter Store 检索数据,但是当我将我的代码移动到 Lambdas 时无法检索数据。

我已经搜索并没有找到很多使用 NodeJS 设置 Lambda 的示例,这些示例没有使用 "Serverless" 框架。

我知道我遗漏了一些简单的东西。我只是还不知道。

我已授予我的 lambda 的 IAM 策略以下权限:

"Effect": "Allow",
"Action": [
    "ssm:PutParameter",
    "ssm:GetParameter"
],
"Resource": [
    "arn:aws:ssm:region:account-id:parameter/Name/Of/Parameter"
]
AWS.config.update({region: 'my-region'})
const ssm = new AWS.SSM()
ssm.getParameter({
  Name: '/Name/Of/Parameter',
  WithDecryption: false
}, (err, data) => {
  if (err) {
    reject(err);
  }
  if (data.Parameter !== undefined) {
     resolve(data.Parameter.Value);
  }
  reject(new Error('No Parameter'));
});

本地数据已定义。 在我的 lambda 中,我收到错误消息:“{ TypeError: Cannot read 属性 'Parameter' of null” 意思是 'data' 是空的,错误。

如有任何见解,我们将不胜感激。

试试下面的 promise 语法——它对我有用。请注意,我也获得了多个参数,因此调用也不同。

"Action": [
    "ssm:GetParameters",
    "ssm:GetParameter"
],

然后...

ssm.getParameters({
      Names: [`/path/${environmentStage}/more/path/${name}`],
      WithDecryption: true,
    }).promise()).then(data => data.Parameters.length ? data.Parameters[0].Value : Promise.reject(new Error(`SSM Parameter ${name} is not set.`)));