인프런 커뮤니티 질문&답변

김진성님의 프로필 이미지

작성한 질문수

AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)

ECR private repository 이미지로 AWS ECS service 생성하기

ECS ALB설정을 위한 vpc 설정

작성

·

227

0

ECS FARGATE 생성시 ALB 생성에서 자꾸 에러가 발생해서 질문드립니다. 로그를 타고 들어가보니 서버동작은 올바르게 되는 것으로 보이는데, 로드밸런서의 타겟그룹이 unhealthy가 되네요. vpc는 자동생성 마법사로 생성한 것으로 가용역역 a,b에 각각 private/public 서브넷이 한개씩 존재하는 형태입니다.
검색을 해보니 이 형태로는 alb 부착이 안되는 것 같아서 Nat게이트웨이를 연결해서 private 서브넷으로 시도 해봤는데 차도가 없네요.

  1. vpc와 서브넷에 대한 이해가 부족하여 질문드립니다. 혹시 alb 부착을 위한 간단한 가이드라인을 주실 수 있을까요?

  2. 이미 완성되어 있는 프로젝트를 배포하는 거라 redis cloud를 사용중인데 이 경우 redis service는 하지 않아도 되는지 궁금합니다. 일단 cicd는 제쳐두고 dockerfile 환경변수를 직접 정의해 놓아 github에 올리지 않은 상태입니다.

답변 2

0

김시훈님의 프로필 이미지
김시훈
지식공유자

강의에서 ECS 서비스에 로드밸런서 부착하는 부분이 나오는데 혹시 보셨을까요? 그리고 redis 부분은 그냥 따라 해보시면 좋을듯 해요. 이 강의에서 다루는 레디스 배포는 레디스 사용 자체가 목적이 아니거든요. 그냥 또 하나의 서비스를 배포해보고 배포한 서비스들끼리 어떻게 상호작용 하는지를 보여주기 위함이에요. 실제로는 SSR 프론트 서버 + 백엔드 서버일 수도 있고 혹은 MSA일 수도 있고요

김진성님의 프로필 이미지
김진성
질문자

계속 질문드려서 죄송한데 꽤 오래 이 문제에 부딪혀서 조금 확실하게 이해하고 싶어서 다시 질문드립니다.

혹시 vpc 생성할 때 'vpc 등'이라는 체크박스에 체크하여 자동으로 생성하고 igw, nat을 따로 설정하지 않아도 로드밸런서 생성에 큰 문제는 없을까요?

영상에서는 4개 이상의 서브넷을 선택할 수 있는 것 같던데 제가 뭣모르고 라우팅테이블이랑 nat설정을 건드려서인지 각 AZ에서 하나의 서브넷만 선택할 수 있다는 에러 메시지가 뜨더라고요
이미 redis 환경변수가 nestjs 코드내에 존재하고 그게 redis 클라우드를 이용해서 만든 저장소라 host, port, password 세가지인데 혹시 redis service를 연결하면 환경변수를 바꿔줘야하는지 궁금합니다.

사실 그 부분이 문제인가 싶어 이미 redis service arn으로 바꿔도 봤는데 차도가 없었거든요.

김시훈님의 프로필 이미지
김시훈
지식공유자

네 자동으로 생성해도 문제가 없어야 합니다. VPC 설정을 건드리셔서 문제가 발생한것으로 추정되네요. 음 기본설정으로 된 VPC를 새로 만들어서 모든 서비스들을 해당 VPC에서 구동하도록 하면 어떨까 합니다.

 

ECS 컨테이너가 "외부" Redis에 연결이 안되는게 맞습니다. 이걸 허용을 해줘야 하는데요. 가장 간단한 방법은 ECS Service 생성시 (update에서는 안됩니다), Networking 파트에서 public ip를 적용하는겁니다. 그러면 각 task에 public ip가 부여가 되거든요. public ip가 있어야 외부에 요청을 할 있습니다. public ip를 만들어도 Security Group에서는 외부 요청을 차단 (Load balancer의 요청만 허용) 하기 때문에 안전하긴 합니다.

이게 강의에서 한 가장 간단한 방법이고요. 더 나아가서는 강의에서는 다루지 않은 NAT Gateway 설정, route table 설정, VPC Peering 같은 방법들도 있습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

김진성 님의 질문은 AWS ECS와 ALB(Application Load Balancer) 설정을 포함하여 VPC와 서브넷의 구성에 대한 이해를 돕고 ECS Fargate에서 발생하는 문제에 대한 해결 방안을 모색하는 내용으로 보입니다. 또한, Redis Cloud 사용과 관련하여 추가 서비스 구성에 대한 질문도 포함되어 있습니다.

이러한 문제는 일반적으로 VPC 설정, 서브넷 구성, NAT 게이트웨이 연결, 보안그룹 설정과 같은 네트워크 인프라 구성의 복잡성에서 발생할 수 있습니다. 타겟 그룹이 Unhealthy 상태를 보이는 경우, ALB가 ECS 서비스의 인스턴스와 올바르게 통신하지 못하고 있음을 의미할 수 있으며, 이는 포트 설정, 보안 그룹 규칙, 타겟 그룹의 health check 설정 오류 등 다양한 원인에 의해 발생할 수 있습니다.

비슷한 문제를 해결하기 위한 지침과 해결책을 제공하는 기존의 질의응답 정보가 제공되었습니다. 귀하의 상황과 가장 잘 맞는 내용은 다음과 같습니다:

  • service 생성시 public ip 를 설정하지 않는 경우
    • 이 토론에서는 AWS ECS 서비스를 생성할 때 public IP 설정을 하지 않고 NAT 게이트웨이를 사용하여 내부 서브넷에서의 외부 통신 방법을 설명합니다. 비록 직접적으로 ALB 설정과 관련된 질문이 아니지만, VPC와 서브넷 설정에 대한 이해 및 타겟 그룹과의 연결 문제를 해결하는 데 기본적인 지식을 제공할 수 있습니다.

귀하의 경우, ALB 설정은 보안 그룹, 타겟 그룹 설정, ECS 서비스와 ALB 간의 올바른 연결이 필요합니다. 또한, ALB의 헬스 체크 구성이 ECS 서비스 내의 컨테이너가 응답할 수 있는 경로와 포트로 정확히 설정되어 있는지 확인이 필요합니다.

Redis Cloud 사용과 관련해서는, 별도의 내부 Redis 서비스 구성 없이 외부 Redis 서비스를 사용하는 경우, ECS 서비스 설정에서 해당 Redis 서비스와의 연결을 위한 환경 변수 설정이 중요합니다. 기본적으로, Dockerfile 내에 환경 변수를 정의하고 이를 AWS ECS의 태스크 정의에서 참조하도록 설정할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.