我在AWS上部署了一个lambda,部署在一个通过NAT访问互联网的VPC中。部署是使用Serverless完成的。lambda使用一些Middy中间件,并从SSM获取一些凭据。
问题是SSM fetch随机进入超时!
下面是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())发布于 2021-01-29 17:43:59
lambda超时了,因为ssm正在用您当前的配置限制您(6次重试200ms),大约需要26秒,您的lambda才会放弃。
您在这里运行的是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请注意,之后的每个getParameter调用都会产生extra cost (0.05美元/10.000个请求)。
https://stackoverflow.com/questions/65951537
复制相似问题