如何在 Lambda 中使用 putParameter 和 aws-sdk for nodejs 获取过去的错误?

How to get past errors using putParameter with aws-sdk for nodejs in Lambda?

我正在尝试使用 AWS SDK for JavaScript in Node.js 中的 putParameter 设置参数。特别是,我想利用 "Advanced" 层,并尽可能使用过期策略和标签。当我执行我的代码时,我不断收到如下错误:

There were 2 validation errors:
* UnexpectedParameter: Unexpected key 'Policies' found in params
* UnexpectedParameter: Unexpected key 'Tier' found in params

我怀疑问题出在我使用的 aws-sdk 版本上,所以我尝试 运行 使用 SAM local 在本地使用代码,并使用 nodejs8.10 和 Lambda 函数nodejs10.x 环境。错误不会消失。

const AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});
const ssm = new AWS.SSM({apiVersion: '2014-11-06'});

exports.lambdaHandler = async () => {

    const tokenExpiration = new Date();
    tokenExpiration.setSeconds(tokenExpiration.getSeconds() + 60);

    await ssm.putParameter({
        Name: 'SECRET_TOKEN',
        Type: 'SecureString',
        Value: '12345',
        Policies: JSON.stringify([
            {
               "Type":"Expiration",
               "Version":"1.0",
               "Attributes":{
                  "Timestamp": tokenExpiration.toISOString()
               }
            }
        ]),
        Overwrite: true,
        Tier: 'Advanced'
    }).promise();
};

我希望这段代码能够工作并设置一个过期参数。但是,sdk 似乎无法识别 "Policies" 和 "Tier" 参数,这些参数根据文档可用。我不知道这是否是等待 JavaScript 的最新 AWS SDK 的问题,但 runtimes page 建议 nodejs10.x 是 运行 JavaScript 的 AWS SDK ] 2.437.0。

了解我可以在没有相关参数的情况下正确获取代码 运行(即,仅 "Name"、"Type" 和 "Value"参数)。

遗憾的是直到 v2.442.0 (see diff)

才添加等级和策略

这意味着要使用这些功能,您必须使用您正在开发的 aws-sdk 版本进行部署。

应注意,developing/testing 针对 built-in 版本,或使用您使用的 aws-sdk 进行部署,通常被认为是良好做法。如果您正在部署您的版本,您可以使用显式客户端导入(例如 const SSM = require('aws-sdk/clients/ssm') 来减小部署大小。如果您针对预览 AWS-SDK Version 3.

进行开发,这将更加有效