ALB에서는 리스너와 룰을 통해 다양한 설정을 할 수 있습니다. 이번에는 룰의 path를 이용해서 라우팅 하는 방법을 알아보도록 하겠습니다.
위 토폴로지대로 about 경로로 들어오면 about 컨테이너로 projects 경로로 들어오면 projects 컨테이너로 들어오도록 설정해보겠습니다.
ALB 리스너 룰
먼저 리스너 룰에 어떤 설정들이 있는지 알고 들어가면 좋을 것 같습니다. 룰 설정은 크게 IF절, THEN절로 나뉘게 됩니다. IF에 맞는 이벤트가 발생하면 TEHN이 실행되는 방식입니다. 이때 우선순위또한 지정해줄 수 있습니다.
IF절
옵션 | 내용 |
host header | 입력된 도메인에 따라 라우팅 |
path | 도메인 경로를 기반으로 라우팅 |
Source IP | 소스 IP에 의해 라우팅 |
Query string | 진짜 말 그래도 파라미터에 따라서 라우팅 |
http 헤더 | http헤더를 조작할 수 있는데 이 http 헤더 값에 따라서 라우팅 |
http request method | http method에 따라서 라우팅 |
THEN절
옵션 | 내용 |
Forward to | 들어오는 요청을 지정한 타겟 그룹으로 라우팅 |
Redirect to | https 로 리다이렉트 할때 가장 많이 사용 |
Return fixed response | 특정 http status code를 반환 |
Authenticate | OAuth2.0 같은 인증을 거치도록 지정하는거라고 합니다 |
flask 이미지 생성
#예시 코드
from flask import Flask
app = Flask(__name__)
@app.route('/about')
def hello():
return 'Hello about world'
if __name__ == '__main__':
app.run()
#예시 코드
from flask import Flask
app = Flask(__name__)
@app.route('/projects')
def hello():
return 'Hello projects World'
if __name__ == '__main__':
app.run()
코드 또는 웹 서버를 구성할때 타겟 그룹에서 라우팅 해주는 path의 위치에 꼭 페이지가 존재해야합니다. ALB를 통해 웹 서비스를 배포할때 타겟 그룹에서 Health Check를 진행하고 정상 상태일때 배포하게 됩니다. 이때 Health Check가 라우팅이 /board 라면 {DNS}/board 에 요청을 보내고 응답이 있냐 없냐 형식으로 진행되기 때문에 꼭 존재해야합니다. 저는 따라서 /about과 /projects를 생성했습니다.
FROM python:3.8
COPY . /app
RUN pip3 install flask
WORKDIR /app
CMD ["python3","-m","flask","run","--host=-0.0.0.0"]
Dockerfile은 똑같이 사용하겠습니다.
ALB, TG 생성
TG 생성
컨테이너 포트가 5000번이기 때문에 5000번으로 열어줍니다. 상태검사는 라우팅할 경로로 설정합니다. 일반적으로 /로 설정해도 상관은 없습니다.
ALB 생성 및 룰 설정
ALB 생성은 평소 하던 대로 똑같이 하시면 됩니다. 하지만 처음 생성할때 2개의 TG를 한번에 설정하지 못하기 때문에 추가해주는 작업이 필요합니다
ALB -> 리스너 편집에서 타겟 그룹 추가 후 저장합니다.
ALB -> 리스너 -> 규칙 관리로 이동합니다.
아래와 같이 구성합니다.
컨테이너 구성 및 ALB 연결
ecs를 통해 컨테이너를 배포하고 연결해보겠습니다. ecs 생성은 아래 링크를 참고하시기 바랍니다.
https://404notonc.tistory.com/131
빠른 시행을 위해 Fargate를 통해 연결하겠습니다.
결과 확인
위에서 설정한 것과 똑같이 라우팅 되는 것을 확인할 수 있습니다
'네트워크 > 클라우드 컴퓨팅' 카테고리의 다른 글
AWS CloudWatch로 SSH access logging (0) | 2023.10.19 |
---|---|
Kinesis,API gateway,Glue를 이용한 ETL 파이프라인 구성 (0) | 2023.04.09 |
ECS,ECR을 이용한 Flask web 배포 (0) | 2023.04.09 |
Lambda와 Event Bridge 이용해서 EC2 실행,종료 제어 (0) | 2023.03.16 |
AWS ECR 컨테이너 이미지 업로드, 다운로드 (1) | 2023.03.15 |