[英]AWS Lambda SSM calls randomly goes in timeout
我在 AWS 上部署了一個 lambda,在一個通過 NAT 具有 inte.net 訪問權限的 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 毫秒),大約需要 26 秒后您的 lambda 才會放棄。
您在此處運行時違反了SSM 標准吞吐量限制。
您可以通過以下方式啟用增加的吞吐量:
aws ssm update-service-setting --setting-id arn:aws:ssm:*region*:*account-id*:servicesetting/ssm/parameter-store/high-throughput-enabled --setting-value true
請注意,之后每次調用 getParameter 都會產生額外費用(0.05 美元/10.000 次請求)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.