【问题标题】:AWS parameter store access in lambda functionlambda 函数中的 AWS 参数存储访问
【发布时间】:2017-07-14 17:48:18
【问题描述】:

我正在尝试访问 AWS lambda 函数中的参数存储。这是我的代码,根据此处的文档:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html

var ssm = new AWS.SSM({apiVersion: '2014-11-06'});
var ssm_params1 = {
    Name: 'XXXX', /* required */
    WithDecryption: true
};

ssm.getParameter(ssm_params1, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     clientId = data.value;
});

执行时出现错误:

“TypeError: ssm.getParameter 不是函数”

亚马逊是否在不更改文档的情况下更改了这一点?此函数是否移动到另一种类型的对象?

【问题讨论】:

  • 我有一个 c# lambda,我正在尝试获取一个参数。由于 IAM 许可,它似乎有麻烦。 lambda 获取参数值需要什么策略?

标签: amazon-web-services amazon-ec2 lambda


【解决方案1】:

请检查并尝试最新版本的 SDK。亚马逊并没有放弃 getParameter 方法而只支持 getParameters。其实方法是getParameter,和getParametersByPath一起,是新增加的方法。旧版本的 SDK 无法解析这些方法。

【讨论】:

  • 这是由 Lambda 函数执行的。我使用了与文档中相同的 API 版本的 SSM 库。
【解决方案2】:

这里的答案是,亚马逊必须放弃 getParameter() 方法,转而只维护一个方法 getParameter(s)()。但他们没有更新文档。这种方法似乎工作得很好。

【讨论】:

  • 添加新功能时,SDK 客户端的 API 版本不会改变,正如您在另一个答案的评论中所暗示的那样。例如,S3 仍在版本“2006-03-01”上表示向后兼容性,而不是上次更新的时间。 Lambda 不在最新的 sdk 版本上运行。在撰写本文时,它运行的是“2.108.0”,而最新的是“2.131.0”。您尝试使用的方法非常存在于 sdks 中,您很可能碰巧使用了在提出此问题时不支持它们的 sdk 版本。您还可以选择自己捆绑 sdk。
  • 这是不正确的。这两种方法在 AWS 中仍然可用。
【解决方案3】:

getParameter 和 getParameters 函数我都试过了,它们都工作正常。

您可能会遇到错误,因为您将“apiVersion: '2014-11-06'”传递给 SSM 构造函数。

不要将任何 apiVersion 参数传递给函数。它应该可以正常工作。

【讨论】:

    【解决方案4】:

    AWS 中似乎存在一个错误,在某些环境中未包含正确的 sdk 版本。这可以通过记录使用的 sdk 版本来确认。

    console.log("AWS-SDK Version: " + require('aws-sdk/package.json').version);
    

    包含所需的 aws-sdk 包为我们解决了问题。

    尝试在 package.json 中添加以下内容:

        "aws-sdk": "^2.339.0"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2017-06-06
      • 2019-07-14
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      相关资源
      最近更新 更多