AWS lamda + api gateway + step function

1. 하고 싶은 것

- 클라이언트 요청 -> (1) 무조건 성공값을 반환 -> (2) 실제 계산, DB 입출력 등
- 이유 : 실제로 하고 싶은 연산이 꽤 오래 걸리고 사용자는 그 결과를 바로 볼 필요가 없음


2. 1차시도 : API gateway -> Lambda1 -> Lambda2  

1) lambda2를 실행시키고 바로 "ok"를 반환하는 lambda1 함수를 만듦(둘 다 node.js 8.1)

2) API gateway를 만들고 method로 Post를 추가, CORS 설정, lambda1을 end point로 설정.
-> CORS 설정했는데 테스트하니 안됨.
-> lambda1에서 CORS 헤더를 설정해서 이런식으로 return해야 함
return {
  "statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*"
}
}

3) CORS 문제는 발생하지 않으나 lambda2에 진입하지 않음
-> handler에서 return 하는 순간 함수가 종료되고 실행중인 연산을 종료해서 발생하는 문제.
-> callback() 사용.

4) lambda2에서 실제로는 10초 정도면 끝나는 연산을 lambda1에서 설정한 대기시간(30초였음)만큼 기다림

-> lambda1의 대기시간을 10초로 줄였더니 lambda2에서 10초 이상 걸리는 경우 마지막까지 수행하지 못함.

(기나긴 삽질의 시간)

3. 2차시도 : API gateway -> Step function(Lambda1 -> Lambda2)

1) Step function(state machine과 비슷하다고 느꼈다)을 사용하면 될 것 같아서 API gateway가 step function을 호출, step function에서
시작 -> lambda1 -> 끝
                       -> lambda2
처럼 구성하였으나 lambda1이 바로 리턴하지 못하고 lambda2가 끝날 때까지 기다리는 문제 발생.

(기나긴 삽질의 시간)

4. 3차 시도 : API gateway -> Lambda1 -> Step function(Lambda2)

1) lambda1에서 step function을 호출, step function에서 시작 -> lambda2 -> 끝하는 순서로 구성하니 원하는 대로 나옴. (lambda2에서는 그대로 callback()을 사용). 그러나 한 번 호출 시 총 4번의 request가 발생해 비용면에서 비효율적.

5. 결론 : API gateway -> Step function(lambda2) 

1) API gateway의 end point를 step function으로 하나 작업을 정확하기 지정하지 않고, request parameter에 step function arn을 같이 보내주면 그 step function이 실행된다.
post("api url", {
  stateMachineArn: "[ARN]",
  input: String({CUSTOM PARAMETERS})
})

이 블로그의 인기 게시물

Postgresql에서 5432 port가 열려있냐는 문제(Ubuntu 기준)

vue에서 v-html에 포함된 class의 css가 적용되지 않는 경우

Linux screen 명령어 정리