ECS에 대해서는 ECS에 대하여 페이지에서 설명했으니 바로 실습으로 넘어간다.
현재 ECS 블루-그린 배포는 클래식 콘솔로만 작업이 가능하다. 2023년 12월 4일부터 클래식 콘솔을 못 쓴다고 하니 아래 자습서를 참고해서 CLI로 생성하는 방법도 찾아봐야겠다. 🤔 (AWS에 의견 보내기를 통해 알리긴 했지만, 일정 내로 고쳐줄 것 같지 않은 느낌…)
자습서: 블루/그린 배포를 사용하여 서비스 생성 - Amazon Elastic Container Service
[클러스터 생성] 을 눌러서 진행하자.
[클러스터 이름] 에 dev-nestjs-guide
를 넣어주었다.
[VPC] 는 dev-vpc
를 사용한다.
[서브넷] 은 Private Subnet만 남겨준다.
[인프라] 는 [AWS Fargate] 가 기본 설정되어 있으니 놔두자.
[생성] 을 눌러서 클러스터 생성을 마무리 한다.
task-definition.json
은 ECS에서 실행될 Task의 설정을 담고 있는 json 형식 파일이다.
NestJS 프로젝트에서 다음 경로에 파일을 생성하자.
ecs/develop/task-definition.json
{
"executionRoleArn": "arn:aws:iam::000000000000:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::000000000000:role/ecsTaskRole",
"containerDefinitions": [
{
"name": "nestjs-guide-api",
"essential": true,
"image": "dummy",
"cpu": 0,
"portMappings": [
{
"hostPort": 3000,
"containerPort": 3000,
"protocol": "tcp"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/develop/nestjs-guide-api",
"awslogs-region": "ap-northeast-2",
"awslogs-stream-prefix": "ecs"
}
},
"ulimits": [
{
"name": "nofile",
"softLimit": 65535,
"hardLimit": 65535
}
]
}
],
"requiresCompatibilities": ["FARGATE"],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"family": "develop-nestjs-guide-api"
}
ECS 페이지에서 [태스크 정의] 를 누르고, [새 태스크 정의 생성] 을 눌러준다.
[JSON을 사용하여 새 태스크 정의 생성] 을 눌러준다.
기존에 있던 내용은 지우고 위에서 생성한 task-definition.json
의 내용을 붙여넣는다.
또한 “image”: “dummy”
를 아래 처럼 바꾸어주자.
"image": "000000000000.dkr.ecr.ap-northeast-2.amazonaws.com/dev-nestjs-guide-api"
노파심에 덧붙이자면
000000000000
는 전부 자신의 [Account ID] 로 바꿔서 넣자.
[생성] 을 눌러서 태스크 정의를 마무리한다.
블루-그린 배포로 인해서 이 부분이 조금 복잡하니 잘 따라해보자.
[로드 밸런서] 페이지로 이동한다.
Load Balancer 에서 생성한 로드 밸런서를 누르고 상세에서 **[리스너]**를 누른다.
HTTPS:443
리스너에서 [규칙 보기/편집] 을 눌러준다.
상단 네비게이션의 연필 모양 [편집] 버튼을 누르면 규칙을 편집할 수 있는 연필 모양이 또 나타난다.
[전달 대상…] 을 dev-nestjs-guide-api-green
으로 수정해주자.
이렇게 하는 이유는 ECS 생성시 콘솔에서 대상 그룹을 인식하게 하기 위해서이다.
(이걸 안해주면 새로 생성해야하는데, 포트 매핑 설정이 안되서 더 귀찮아진다.)
[업데이트] 를 눌러서 마무리 한다.