source로 다른 소스의 변수 불러오기

문제 상황

회사에서는 AWS Lambda 위에서 node application을 돌리는데,
그 중에서 어느 기능이 Redis를 사용하게되서, ioredis를 사용해서 개발을 하였다.

local에서 개발과 개발자 테스트를 하고 production으로 함수를 배포하기 전 development로 함수를 배포하고 테스트를 하는데,
이때 개발용으로 간단하게 VPC 설정을 하지 않은 EC2 서버에 docker로 Redis container를 실행시켜 연결을 하였다.

근데 요청에 대해 정상적으로 응답하거나 응답하지 않을 때가 있어, Lambda 함수 로그를 확인 하였는데 아래와 같은 에러가 나는 것이었다.

1
[ioredis] Unhandled error event: Error: connect ETIMEDOUT

문제 원인

해당 Lambda 함수에는 AWS SDK를 사용해서 특정 기능을 하는 로직이 있는데,
AWS SDK를 사용하기 위해선 외부 인터넷 접근이 가능해야한다.
그런데 VPC

AWS document를 참고하여 VPC 내의 Lambda 함수가 외부 인터넷을 사용할 수 있도록 설정하였다.

document를 그대로 따라하면 public, private 두 개의 서브넷을 사용하게 되는데, 무작정 따라한 서브넷 설정이 문제였다.
하나는 VPC 외부 인터넷에 접근할 수 있는 서브넷인 반면,
다른 하나는 VPC 내부에서만 통신할 수 있는 서브넷인 것이다.

그래서

후기

AWS를 잘모르는 채로 사용하다보니 여러가지로 너무 뻘짓을 많이 한 것 같다.
개발도 그렇고, 인프라에 대한 지식도 많이 늘려야겠다.

Share