서버에 트래픽이 많아지면 서버의 확장을 고려하게 된다. AWS ECS
를 사용하면 원하는 개수만큼의 서버를 손쉽게 프로비저닝 및 배포할 수 있으며 트래픽 등에 따라 자동으로 스케일 아웃(수평 확장)이 진행되게 할 수 있어 급격한 트래픽에 대비할 수 있다. 또한 ECS
와Fargate
를 함께 사용하면 불변 인프라를 구성하기에 용이하다. (Fargate
는 도커 이미지를 사용하기에 불변 인프라와 잘 들어맞는다)
ECS
와 fargate
를 사용하여 서버를 프로비져닝 및 배포해본다.fargate
에 Secret Manager
를 적용해 환경변수를 설정해본다.실제 서버의 환경을 시뮬레이션하기 위해 하나의 DB서버와 다중의 벡엔드 서버를 구현해보자.
(현업에서는 DB서버를 fargate
로 생성하지는 않을테지만 공부차원에서 ECS로 생성할 예정)
몽고DB용 task
생성
mongo:latest
를 사용 27017
기입 (몽고DB 포트) 및 사용할 몽고디비 ID, PWD 기입 MONGO_INITDB_ROOT_USERNAME
, MONGO_INITDB_ROOT_PASSWORD
) NLB 로드밸런서
생성
클러스터 서비스 생성
로드밸런서에서는 하나의 가용영역(az)안에 하나의 서브넷만 사용가능하므로 주의한다.
보안그룹에는 80포트와 27017포트를 허용하는 보안그룹을 사용한다.
ECR private repository생성
생성 옵션
키는 실제로 애플리케이션에서 사용할 환경 변수 이름입니다.
값 유형은 ValueFrom으로 설정해 둡니다.
값은 Secrets Manager에 저장되어 있는 보안 암호의 키/값의 ARN으로 지정합니다. 다음과 같은 형식입니다.
arn:aws:secretsmanager:ap-northeast-2:725601756882:secret:VELOG_MONGO_URL-Rpur08:MONGO_URL::
VELOG_MONGO_URL 은 보안 암호 이름입니다.
Rpur08 일종의 해시값으로 ARN에서 확인할 수 있습니다.
MONGO_URL은 보안 암호의 키입니다. 우리는 MONGO_USERNAME 등으로 지정하면 됩니다.
다음 옵션은 기본값으로 설정하고 생성한다.
사용하고 있는 테스크 역할에 권한을 추가해준다.
SecretsManagerReadWrite을 추가해준다.
벡엔드 클러스터 서비스 생성
9. 보안그룹은 포트 3000이 열려있는 보안그룹을 선택해준다.
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 725601756882.dkr.ecr.ap-northeast-2.amazonaws.com
docker pull mongo
docker tag mongo:latest 725601756882.dkr.ecr.ap-northeast-2.amazonaws.com/velog-mongo:latest
docker push 725601756882.dkr.ecr.ap-northeast-2.amazonaws.com/velog-mongo:latest
An error occurred (UnrecognizedClientException) when calling the GetAuthorizationToken operation: The security token included in the request is invalid. Error: Cannot perform an interactive login from a non TTY device
해당 오류가 발생할시 해결법 링크
주의! 하나의 가용영역 즉 az 하나에 한개의 서브넷만 사용하도록 한다
이미지 URL은 위에서 생성한 ECR의 URL을 입력해주고
포트 매핑을 추가하여 mongo의 포트인 27017을 입력해준다.
앱 프로토콜은 NONE으로 설정해준다.
환경 변수를 추가하여 mongoDB의 사용자와 비밀번호를 적어준다.
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
CPU와 메모리는 기본값으로 사용하고 태스크역할과 실행역할만 설정하고 넘어간다.
처음 생성하는 경우 역할이 뜨지 않을 수 있다. 그경우에는 비우고 넘어간다.
가용영역 전부 선택
로드밸런서에서는 하나의 가용영역(az)안에 하나의 서브넷만 사용가능하므로 주의한다.
보안그룹에는 80포트와 27017포트를 허용하는 보안그룹을 사용한다.
backend 코드에서 MONGO_URL로 환경변수를 받아와서 사용하기에 MONGODB 연결 URL을 담아준다.
이미지 URL은 위에서 생성한 ECR의 URL을 입력해주고
포트 매핑을 추가하여 사용중인 포트를 입력해준다.
키는 실제로 애플리케이션에서 사용할 환경 변수 이름입니다.
값 유형은 ValueFrom으로 설정해 둡니다.
값은 Secrets Manager에 저장되어 있는 보안 암호의 키/값의 ARN으로 지정합니다. 다음과 같은 형식입니다.
arn:aws:secretsmanager:ap-northeast-2:725601756882:secret:VELOG_MONGO_URL-Rpur08:MONGO_URL::
VELOG_MONGO_URL 은 보안 암호 이름입니다.
Rpur08 일종의 해시값으로 ARN에서 확인할 수 있습니다.
MONGO_URL은 보안 암호의 키입니다. 우리는 MONGO_USERNAME 등으로 지정하면 됩니다.
다음 옵션은 기본값으로 설정하고 생성한다.
SecretsManagerReadWrite을 추가해준다.
보안그룹은 포트 3000이 열려있는 보안그룹을 선택해준다.
로드밸런서는 ALB로 서비스와 함께 새로 생성해준다.