node.js - AWS Lambda SSM 调用随机超时

标签 node.js amazon-web-services aws-lambda aws-ssm

我在 AWS 上部署了一个 lambda,位于可通过 NAT 访问互联网的 VPC 中。使用 Serverless 进行部署。 lambda 使用一些 Middy中间件并从 SSM 获取一些凭据。

问题是 SSM 获取随机超时!

这是 lambda 代码:

/* requirements are omitted */

const authorize = async (_event, _context) => {
  try {
    const ssm = new SSM({
      maxRetries: 6, // lowers a chance to hit service rate limits, default is 3
      retryDelayOptions: { base: 200 }
    })
    const params = {
      Names: ["param1", "param2"],
      WithDecryption: true
    }
    const fetch = () => new Promise(resolve => {
      ssm.getParameters(params, function(err, data) {
        if (err) resolve(err, err.stack); // an error occurred
        else     resolve(data);           // successful response
      })
    })
    const res = await fetch()
    return {
      statusCode: 200,
      body: JSON.stringify(res)
    }
  } catch (_err) {
    console.error(_err)
    return {
      statusCode: 500,
      body: 'error'
    }
  }
}

export default middy(authorize)
  .use(warmup({ waitForEmptyEventLoop: false }))
  .use(doNotWaitForEmptyEventLoop({ runOnError: true }))
  .use(httpSecurityHeaders())

最佳答案

lambda 超时,因为 ssm 使用当前配置限制您(6 次重试,200 毫秒),您的 lambda 大约需要 26 秒才会放弃。

你在这里对抗SSM standard throughput limits .

您可以启用increased throuhgput与:

aws ssm update-service-setting --setting-id arn:aws:ssm:*region*:*account-id*:servicesetting/ssm/parameter-store/high-throughput-enabled --setting-value true

请注意extra cost此后每次调用 getParameter 都会产生费用(0.05 美元/10.000 个请求)。

关于node.js - AWS Lambda SSM 调用随机超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65951537/

相关文章:

node.js - Postgres 连接池错误排查

java - 使用java从aws lambda中的/tmp目录写入然后读取文件

javascript - 可以在 nodeJS 中创建 3D 多人游戏服务器

node.js - 使用服务帐户 key 列出来自谷歌驱动器的公开共享文件未获取公共(public)文件

amazon-web-services - 如何将 AWS ELB 内置于 AWS Cloudformation 模板中?

amazon-web-services - AWS CodeDeploy 能否为 lambda 进行跨账户部署?

node.js - 如何在 NodeJS 中创建多个数据库 Sequelize session

javascript - 如何将带有序数后缀的数字转换为javascript中的数字

node.js - NodeJS Heroku 部署错误

java - 使用 DynamoDBMapper 更新 map 属性中的现有条目