Lambda를 이용하여 Google Maps API에 요청을 보내는데 자꾸 TimeOut 에러가 뜹니다.

0

현재 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에서만 자꾸 통신 문제가 생기네요.

이 에러를 해결하기 위해 다음과 같은 시도를 했지만, 해결할 수 없었습니다.

  1. node 버전문제?

node가 최선버전이 아니라면 TimeOut 에러가 뜬다는 말을 StackOverFlow에서 확인 후, 최신버전으로 Node를 업데이트 하고 시도를 해봐도 여전히 TimeOut 에러가 발생했습니다.

  1. TimeOut 시간 늘리기

TimeOut을 최대 60000ms로 바꾸었음에도 여전히 timeOut이 발생했습니다. EC2에서 실행했을때는 TimeOut 설정을 따로 하지 않았음에도 잘 작동했었습니다.

  1. Axios 문제?

Axios는 에러가 많다는 이야기를 들은적이 있어서 fetch로 코드를 바꿔서 시도를 했음에도 불구하고 위와 같은 오류가 떴습니다.

  1. API 요청 문제

(1) 인증키 및 요청량

EC2에서 Lambda에서 설정했던 API 인증키와 동일한 인증키와 동일한 요청량의 데이터로 요청을 보냈을땐 여전히 잘 돌아갔지만, Lambda에서는 돌아가지 않았습니다.

(2) API 제한 설정

Google API키 제한 문제인가 싶어서 요청제한을 모두 없애고 시도를 했으나 해결되지 않았습니다.

  1. Lambda VPC 설정

현재 사용하고 있는 VPC는 EC2가 포함되어있는 VPC이기 때문에 기본적으로 인터넷 게이트웨이와 연결되어 있습니다. 그에 따라 외부와 통신할 수 있는 서브넷과 라우팅 테이블이 Lambda의 VPC 구성에 등록해놓았습니다.

질문됨 3달 전244회 조회
1개 답변
1
수락된 답변

안녕하세요.

Lambda를 VPC에 연결하는 경우 인터넷에 연결하려면 NAT 게이트웨이가 필요합니다.
Lambda는 인터넷 게이트웨이가 연결된 서브넷에 연결해도 Lambda에는 공용 IP가 없으므로 NAT 게이트웨이가 필요합니다.
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/configuration-vpc.html#vpc-internet

프라이빗 서브넷에서의 인터넷 액세스에는 NAT(Network Address Translation)가 필요합니다. 함수에 인터넷 액세스 권한을 부여하려면 아웃바운드 트래픽을 퍼블릭 서브넷의 NAT 게이트웨이로 라우팅합니다. NAT 게이트웨이는 퍼블릭 IP 주소가 있으므로 VPC의 인터넷 게이트웨이를 통해 인터넷에 연결할 수 있습니다. 유휴 상태의 NAT 게이트웨이 연결은 350초 후에 중단됩니다. 자세한 내용은 VPC에서 Lambda 함수에 인터넷 액세스 권한을 제공하려면 어떻게 해야 합니까?를 참조하세요.

profile picture
전문가
답변함 3달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인