当使用 AWS SDK 更新 Lambda 函数配置时,有时可能会遇到“Rate exceeded”错误。这通常是由于在给定时间段内发送了过多的 API 请求。
为了解决此问题,我们可以使用 AWS SDK 的 exponentialBackoffRetry 模块来推迟请求并在稍后重试。以下是一个示例代码:
const AWS = require('aws-sdk')
const lambda = new AWS.Lambda({region: 'us-west-2', apiVersion: '2015-03-31'})
const backoffRetry = require('aws-sdk/lib/exponentialBackoffRetry');
function updateFunctionConfig(params) {
return new Promise((resolve, reject) => {
const makeRequest = async () => {
try {
const result = await lambda.updateFunctionConfiguration(params).promise()
resolve(result)
} catch (err) {
if (err.statusCode === 429) {
backoffRetry(() => makeRequest(), err.retryDelay || 0)(err)
} else {
reject(err)
}
}
}
makeRequest()
})
}
const params = {
FunctionName: 'my-function',
// Other params...
}
updateFunctionConfig(params)
.then(result => {
// Handle success...
})
.catch(err => {
// Handle error...
})
在该示例中,我们使用了 exponentialBackoffRetry 模块将重试的过程推迟了一段时间。这样做有助于避免在短时间内发送过多的请求。