我在 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/