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
ECS,ECR을 이용한 Flask web 배포
MAS 같은 마이크로 서비스 아키텍쳐등이 유행?이라고 하더라고요 그런 배포방식을 위해선 도커와 도커 오케스트레이션 툴을 이용한 배포가 가장 최적의 방법입니다. AWS에선 컨테이너 오케스트
404notonc.tistory.com
빠른 시행을 위해 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 |