Прежде чем продолжить, вам необходимо убедиться, что вы понимаете, где генерируется ошибка.
Если ваша лямбда-функция сама выполняет какое-то соединение с сокетом во время работы, а лямбда-функция получает "Сокет"«Отбой» во время выполнения, вероятно, он возвращает код состояния 5xx вашего вызывающего приложения.Вы можете сделать так, чтобы ваша лямбда-функция повторяла все, что она делала, используя любую обычную технику повторения.
Если ваше вызывающее приложение видит исключение Socket Hang Up, то проблема заключается в связи между вашим приложением и AWS.Лямбда, и добавление повторов внутри ваша лямбда-функция будет бесполезна.Вам нужно добавить повторы в ваше вызывающее приложение.
Вот пример того, как это может выглядеть:
function getUsers() {
let retries = 0;
let maxAttempts = 3;
function attempt() {
return lambda.invoke({
ClientContext: "MyApp",
FunctionName: "GetUsers",
Payload: JSON.stringify({ Active: true })
}).promise().catch(error => {
// We don't want to retry on EVERY error, because the error might
// be an application error or an AWS credentials error. So here we
// check specifically for the types of errors to retry. AWS will
// helpfully set the "retryable" property if it's a network issue
// that they caught.
//
// A socket connection might not be an AWS-generated error, so you
// need to check it directly... this is just an example you can
// extend:
if (error.retryable || error.code === 'ECONNRESET') {
retries++;
if (retries < maxAttempts) {
return attempt();
}
}
throw error;
});
}
return attempt();
}