나는 EC2로 구축을 진행할려고 한다. 후에 Fargate로도 해봐야지!

https://dev.classmethod.jp/articles/ecs-container-service-establishment-2/


  • 클러스터 생성

NAT Gateway 생성: 클러스터에서 private subnet에 있는 ec2 인스턴스를 인식할 수 있게..

private rtb에 붙여준다.

 

클러스터를 생성해주자.

1) vpc는 private subnet으로

2) 인프라는 ec2 인스턴스로(새 ASG 생성 - Amazon Linux2 / t3.medium / 2-4 / 키페어 없음)

거의 깡통의 클러스터를 생성한 듯

 

  • ASG 관리

EC2 → ASG로 들어가면 클러스터를 만들면서 생성한 ASG가 보인다.

이를 손봐주자..

1) 시작템플릿 관련

현재 상황이다. 보안그룹을 변경해주자.(ecs-sg(container)) 

그러면 새로운 시작 템플릿 버전이 생기는데 이를 ASG에 연결해주자.

새로생성한 Latest(2)를 선택한다.

변경된 것을 확인할 수 있다.

후에 인스턴스 새로고침 진행

시작 템플릿 변경된 것을 적용시키기 위함이다!  → ec2 인스턴스의 정보를 확인해서 ecs-sg로 연결이 잘 되어있는지 확인.

 

  • 작업 정의(Task definition)

ALB를 먼저 생성해주자.

1) vpc는 퍼블릭으로

2) 보안그룹은 ecs-alb-sg로

3) 대상그룹은 생성하자.(ec2는 클러스터 생성을 통해 만들어진 인스턴스를 추가한다.)

4) alb로 돌아가 생성한 대상그룹 선택

alb를 생성하자.

 

  • 작업 정의(Task definition)

1) 컨테이너 생성의 경우 생성했던 ECR 리포지토리의 URI 삽입

2) 앱 환경은 EC2, 네트워크 모드는 브릿지

 

  • 서비스 생성

1) 클러스터의 경우 생성했던 클러스터 선택

2) 시작 유형 - EC2

3) 배포 구성에서 원하는 태스크의 수를 2개로

4) ELB 구성의 경우 위에서 생성했던 것들로 선택해서 진행

후에 배포를 진행..

타겟 그룹을 확인해 보면 49153 포트 번호로 EC2 인스턴스가 추가된 것을 확인할 수 있음.

위에서 설정을 동적 포트 매핑을 사용했기 때문에 호스트 포트를 0으로 설정하면 에페메랄 포트(32768-61000) 범위의 포트가 자동으로 할당되며 alb에 설정해놓은 target grp의 포트는 무시됨.

 

  • alb 확인

 

  • ECS 컨테이너에 접속

EC2 인스턴스에 연결되어 있는 ecsInstanceRole을 수정(EC2RoleforSSM 추가)

EC2를 Session Manager를 통해 들어가보자.

근데 연결이 되질 않네..? → 적용될 때 까지 시간이 걸림..ㅎㅎ

 

들어가서 설치 잘 되었는지 확인..

sudo -s
cd /var/lib/docker/overlay2
ls
find / -name "*.html"

변경해줘야할 index.html 파일을 찾아야하는데 find / -name "*.html" 명령어를 활용해서 찾자..

/var/lib/docker/overlay2/b2b5c3ddc547fd0347e12b129d7f3f52a5776b20b5d59e4b770a8dab2e6dd504/merged/usr/share/nginx/html/index.html

나는 위의 파일에 해당 내용이 있다.(참고로 merged 폴더 안의 파일이어야 한다..)

원하는대로 html 파일을 변경해주고 적용시키자!

 

A AZ에는 hello ecs! 가

C AZ에는 hello c AZ ecs! 가 나와야 한다. 확인해보자.

 

 

❗ 더 찾아봐야할 것! ❗

위와 같이 진행할 경우 target group에 맨 처음 생성했었던 흔적(?)이 남는다.. 물론 ec2의 경우 종료되어있지만 저거 어떻게 지우지?

→ 일단 내가 네트워크 모드를 bridge - 호스트포트 0번으로 설정을 했기에 포트가 변경된 것...

ECS 서비스를 이용해 타겟 그룹에 인스턴스를 등록하는 경우 타겟 그룹의 포트는 무시됨.

(+) 서비스에 지정하는 컨테이너 포트는 태스크 정의의 컨테이너 포트와 같아야한다.

정적 매핑
동적 매핑

 

근데 보통 awsvpc로 하니까 다음 실습 땐 awsvpc 모드로 실행해보자

'Cloud > AWS' 카테고리의 다른 글

[AWS] ECS Task Network Mode  (0) 2022.09.19
[AWS] Cloud9 - Github 연동  (0) 2022.09.16
[AWS] ECS 개념 + 실습 -1(Docker image push)  (2) 2022.09.14
[AWS] ECS에 HTTP API 구축  (0) 2022.09.13
[AWS] Mobile Backend 구성  (1) 2022.09.08

+ Recent posts