현재 Javascript, node 개발 환경에서 Lambda를 이용하여 Google Place API에게 요청을 보내어 장소에 대한 정보를 가져오는 기능을 구현하려고 하고 있습니다.
Lambda는 RDS에서 필요한 데이터를 사용하기 위해 VPC 내부로 설계했습니다.
2024-01-16T12:23:34.471Z ac2ea388-09c0-4b9a-9438-a1313293245d INFO TypeError: fetch failed
at Object.fetch (node:internal/deps/undici/undici:11730:11)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at runNextTicks (node:internal/process/task_queues:64:3)
at process.processImmediate (node:internal/timers:449:9)
at async getPlaceId (/var/task/scheduler/updatePlaceData.js:20:22)
at async /var/task/scheduler/updatePlaceData.js:171:19
at async Promise.allSettled (index 0)
at async main (/var/task/scheduler/updatePlaceData.js:301:21)
at async exports.handler (/var/task/index.js:6:20) {
cause: ConnectTimeoutError: Connect Timeout Error
at onConnectTimeout (node:internal/deps/undici/undici:6869:28)
at node:internal/deps/undici/undici:6825:50
at Immediate._onImmediate (node:internal/deps/undici/undici:6857:13)
at process.processImmediate (node:internal/timers:478:21) {
code: 'UND_ERR_CONNECT_TIMEOUT'
}
}
하지만 다음과 같이 TimeOut 에러만 나고 있습니다.
해당 모듈은 EC2에서 같은 로직으로 코드를 실행했을때는 통신이 성공적으로 이루어졌습니다.
하지만 Lambda에서만 자꾸 통신 문제가 생기네요.
이 에러를 해결하기 위해 다음과 같은 시도를 했지만, 해결할 수 없었습니다.
- node 버전문제?
node가 최선버전이 아니라면 TimeOut 에러가 뜬다는 말을 StackOverFlow에서 확인 후, 최신버전으로 Node를 업데이트 하고 시도를 해봐도 여전히 TimeOut 에러가 발생했습니다.
- TimeOut 시간 늘리기
TimeOut을 최대 60000ms로 바꾸었음에도 여전히 timeOut이 발생했습니다.
EC2에서 실행했을때는 TimeOut 설정을 따로 하지 않았음에도 잘 작동했었습니다.
- Axios 문제?
Axios는 에러가 많다는 이야기를 들은적이 있어서 fetch로 코드를 바꿔서 시도를 했음에도 불구하고 위와 같은 오류가 떴습니다.
- API 요청 문제
(1) 인증키 및 요청량
EC2에서 Lambda에서 설정했던 API 인증키와 동일한 인증키와 동일한 요청량의 데이터로 요청을 보냈을땐 여전히 잘 돌아갔지만, Lambda에서는 돌아가지 않았습니다.
(2) API 제한 설정
Google API키 제한 문제인가 싶어서 요청제한을 모두 없애고 시도를 했으나 해결되지 않았습니다.
- Lambda VPC 설정
현재 사용하고 있는 VPC는 EC2가 포함되어있는 VPC이기 때문에 기본적으로 인터넷 게이트웨이와 연결되어 있습니다. 그에 따라 외부와 통신할 수 있는 서브넷과 라우팅 테이블이 Lambda의 VPC 구성에 등록해놓았습니다.