aws lambda handler callback

example.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import {
APIGatewayProxyCallback,
APIGatewayProxyEvent,
APIGatewayProxyResult,
Context,
} from 'aws-lambda';
import { makeResponse } from './makeResponse';
import { service } from './service';

export const handler = async (
_e: APIGatewayProxyEvent,
_c: Context,
callback: APIGatewayProxyCallback
): Promise<APIGatewayProxyResult | undefined> => {
let response;

try {
const res = await service();
response = makeResponse(200, res);
} catch (err) {
console.error(err);
callback(err as any);
}

return response;
};

상황

  • 람다 로직에서 외부 api를 호출하는 경우가 있다
  • 근데 종종이 운 나쁘게 실패할 때가 생긴다
  • 람다는 에러가 발생하면 알아서 재시도를 한다
  • 재시도를 시키기 위해 실패를 알려야 한다
  • catch에 잡히면 재시도를 했으면 좋겠다

해결

  • 3번째 인자로 callback을 받고, catch에서 호출해준다

참고