실시간 강의를 통해 배운 내용을 공부를 하던 도중 문득 궁금증이 생겼다. 실습 내용은 이렇다.
ESC를 통한 Fargate Cluster를 만들었다 그렇게 만든 뒤 각각 작업정의서를
80 : Front 8080 : Backend로 나눠서 만들었다. 하지만 이렇게 만든다면 각각
위 와같은 제공된 DNS를 통해 port별로 접속이 가능하지만 아직까지 AWS의 대한 지식이 부족해서 나는 어떻게 이렇게 각각의 독립적인 Container끼리 요청과 응답을 주는지는 의문이였다. 그렇기에 미약하게나마 나만의 해결책을 선택하기로 했다. 바로 axios 요청을 Host를 alb Dns이름으로 바꿔 보면서 통신해보는 실습을 해보려한다.
먼저 실습을 하기 위해서는 필자는 위와 같은 vpc 구성도를 가지고 있다는 가정하에 실습을 진행하려 한다. 이 때 나의 목표는 private 한 공간의 내 container를 넣어두고 public으로 접근하려 한다.
ALB를 만들기 위해서는 Listener Port가 필요하다. 그렇기 위해서는 일단 EC2를 에서 대상그룹을 먼저 만들어야 한다.
IP addresses 를 체크한 뒤
포트를 만들어주자 해당 포트를 통해서 우리는 원하는 target container로 향하게 할 수 있다.
vpc 또한 마찬가지이다. 내가 설계한 vpc를 넣어주자! 그렇게 한다면 마지막으로 HealthCheck가 있는데 이부분은 자기가 원하는 경로를 지속적으로 서버가 따운이 됐는지를 알려줄 수 있다.
필자는 frontend 와 backend 를 80 , 8080 으로 넣어줬다.
alb는 Application Load Balancer를 선택해주자 이는 L7계층이라고 생각하시면 된다.
이름은 원하는 이름을 지정해주자
그 다음으로는 alb에 접근하기 위해서는 public subnet을 사용해야한다.
이후는 security group을 만들라 할것이다. 아마도 이부분이 중요할 것이라 생각이 든다. alb dns 이름으로 포트별로 접속을 한다면 포트별 image repository로 접근이 가능해야한다. 만든 다음 해당 security group를 넣어주자
Listener port는 좀전에 만들어준 대상그룹을 포트를 잘 지정하고 넣어주면 된다. 그렇다면 이제 alb는 다 만들었다. 바로 ECS로 가보자!
필자는 Cluster를 Fargate로 만들것이다. ECS Cluster에는 크게 Fargate 와 EC2가 있다. 다만 내가 Fargate를 선택한 이유는 간편하게 만들 수 있기 때문이다. Fargate는 간편한 이유로는 별도의 구성 또는 조정을 할필요가 없기 때문이다. 즉 서버 유형을 선택하거나 클러스터를 조정할 시점을 결정 및 클러스터 패킹을 최적화할 필요가 없기 때문이다.
그 이후 간단하게 이름을 만들고나면 끝난다.
실행하고 싶은 애플리케이션의 가장 작은 단위인 태스크를 설명합니다.
태스크 정의에는 여러개의 컨테이너가 포함될 수 있고 환경변수, 개방할 포트, 컨테이너 간 공유할 디스크 볼륨을 지정할 수 있습니다
똑같이 Fargate로 만들어 주자
이름을 지정고 태스크 역할은 없음으로 선택해주자
작업 크기는 최소한으로 맞추어 주었다.
컨테이너 이름은 작업정의서 하나 당 Frontend Backend 으로 만들어 줬다. 이미지는 Docker image 사용 했으며 해당 이미지를 Expose할 때 frontend는 80 backend 8080으로 만들 줬기 때문에 (참고로 밑에 내려가면 CloudWatch가 켜저있을 것이다. 이는 꺼주자 비용이 많이 나간다.) 그 외 설정은 필자의 글에서는 필요가 없다.
위 와 같이 두개의 Task를 만들어 줬다면 이제 내가 만들어 줬던 Cluster로 가주자!
내가 만들어 줬던 cluster에서 생성을 눌러주자
시작 유형은 Fargate로 만들어주고 그 외 설정은 위와 같이 맞춰주자! 나머지 설정이 있지만 다음으로 넘어가주자
내가 기존에 만들어 줬던 vpc에서 private-subnet-a , private-subnet-c를 넣어줬다. 자동 할당 퍼블릭은 disabled 그 다음으로는 보안그룹을 또 만들어줘야 한다...(이놈의 보안 그룹....)
보안 그룹은 위에서 alb를 만들때 보안 그룹으로 만들었던 보안 그룹을 선택해주자
로드벨렁싱은 alb 선택
로드 벨런서 추가에서 내가 기존에 만들었던 대상 그룹이 있다. 해당 그룹에 맞게 잘 섵택하고 만들면 된다. 경로 확인은 내가 만들었던 image의 경로에서 health check경로를 입력해주면 된다. 필자는
front : /
back : /root
로 해줬다.
!!!자 이제 내가 만든 경로로 front 와 vue가 잘 접속되는지 확인해준 뒤 axios 요청을 Dns이름으로 맞춰주고 front에서 backend 요청을 잘 받는지 확인해 보자
오른쪽은 Backend 왼쪽은 Frontend 이다 front에서 내가 backend로 요청을 시켜보겠다.
성공적으로 받아올 수 있는것을 알 수 있다.
오늘은 Alb를 고, ECS의 Fargate를 통해 독립적인 Task와 작업정의서를 만들었다. 그리고 frontend 서버와 backend 서버끼리 통신까지 성공했다 하지만 이는 안좋은 예일 수 있다.하지만 아직까지 제대로 모르기 때문에 차근차근 하나씩 해나갈려고 한다.