“Streamlit 80/443포트 사용 방법 1부-ALB+Route53”
Streamlit이 앱을 실행할 때 기본적으로 사용하는 포트는 8501 포트입니다.
포트를 변경하고 싶을때는
보통은 이와 같은 방식으로 포트 변경이 가능하고
config.toml 파일에서
[server] port = 8080
위와 같이 고정 포트 번호를 지정할 수 있습니다.
그러나,
80/443포트를 포함한 1024보다 작은 포트에 대해서는 Unix 계열 운영체제에서 특권이 있는 포트로 간주되며 일반적으로 슈퍼유저(또는 루트) 액세스가 필요합니다.
하지만, AWS ALB와 Route53을 이용하면 보다 쉽게 Streamlit 앱을 80/443포트로만 사용할 수 있게 만들 수 있습니다.
그럼 이제부터 저희 회사에서 Chatbot을 구현하고 Streamlit를 사용하여 배포할때 AWS에서 Application Load Balancer(ALB)와 Route 53을 사용하여 443 포트(HTTPS)로만 접근 가능하도록 설정했던 방법을 같이 살펴보면서 단계별로 알아보겠습니다.
1. AWS 인프라 개요
- ALB(Application Load Balancer): 80(HTTP)/443(HTTPS) 트래픽을 받아서 Streamlit 앱이 실행 중인 EC2로 전달
- Route 53: 사용자 도메인(예: chatbot.a-cloud.info)을 ALB의 DNS 이름으로 매핑.
- SSL/TLS 인증서: AWS Certificate Manager(ACM)에서 SSL 인증서를 발급하여 HTTPS 트래픽을 적용.
2. AWS ALB를 통해 Streamlit 앱을 443(HTTPS)으로만 접근하도록 설정하는 방법
1) Streamlit 앱 실행 환경 준비
Streamlit 앱을 실행하는 EC2 또는 ECS 컨테이너가 필요합니다. 여기선 EC2를 기준으로 설명드리겠습니다.
streamlit run app.py
이렇게 실행하면, Streamlit의 기본 포트인 8501
포트에서 모든 네트워크에서 접근 가능하도록 열리게 됩니다.
2) Security Group 설정
- ALB Security Group
- Inbound Rule
443 (HTTPS)
: 모든 IP (0.0.0.0/0
)
- Outbound Rule
8501 (TCP)
: Streamlit이 실행 중인 EC2 인스턴스로 전달
- Inbound Rule
- EC2 Security Group
- Inbound Rule
8501 (TCP)
: ALB의 보안 그룹에서만 허용
- Outbound Rule
0.0.0.0/0
(모든 트래픽 허용)
- Inbound Rule
3) AWS ACM에서 SSL 인증서 생성
- AWS Certificate Manager(ACM)으로 이동
Request a public certificate
선택- 도메인 입력 (예: chatbot.a-cloud.info)
- 인증 방법 선택 (Route 53 자동 인증 권장)
- 인증서 요청 후 발급 대기 (보통 몇 분 이내 완료)
4) ALB 생성 및 설정
- EC2 콘솔 → Load Balancers → “Create Load Balancer”
- “Application Load Balancer” 선택
- 설정 값 입력
- Name: chatbot
- Scheme:
Internet-facing
- IP address type:
IPv4
- Listeners:
HTTP (80)
,HTTPS (443)
추가 - Security Groups: 위에서 설정한 ALB Security Group 선택
- Target Group 생성
- Type:
Instance
- Protocol:
HTTP
- Port:
8501
- Health Check
- Protocol:
HTTP
- Path:
/
(Streamlit 기본 페이지) - Port:
8501
- Protocol:
- Type:
- Target 등록: Streamlit 앱이 실행 중인 EC2 인스턴스를 선택(cet-chatbot2)
- Listener Rule 설정
HTTPS:443
리스너의 Default action을Forward to Target Group
으로 설정
- SSL/TLS 설정
HTTPS:443
리스너의 SSL certificate을ACM에서 발급받은 인증서
로 설정
- ALB 생성 완료 후 DNS 확인
ALB DNS Name
을 복사 (chatbot-400109206.ap-northeast-2.elb.amazonaws.com)
5) Route 53에서 도메인 연결
- Route 53 콘솔 → Hosted Zones → 도메인 선택
- “Create Record” 클릭
- Record Type:
A
- Alias:
Yes
- Alias Target:
ALB DNS Name
선택
- Record Type:
- Save 후 적용 완료
3. ALB를 통한 443 포트 사용
- 데이터 보호를 위해 HTTP(80) 포트를 닫고 HTTPS(443)만 사용하려면,ALB에서
HTTP:80 → HTTPS:443 리디렉션
설정을 추가하면 됩니다.
- ALB → Listeners → HTTP:80 선택
- “Add action” → Redirect to HTTPS
- 저장 후 테스트
여기까지의 과정을 마치면 다음과 같은 chatbot이라는 이름의 ALB에 80/443 포트에 대한 리스너 및 규칙이 생기게 됩니다.
5. 테스트
https://chatbot.a-cloud.info
로 접속하여 정상 작동 확인http://chatbot.a-cloud.info
로 접속 시https://chatbot.a-cloud.info
으로 리디렉션되는지 확인
6. 결론
이를 통해 Streamlit 앱이 AWS에서 HTTPS(443) 포트만 사용하도록 설정되었습니다.
지금까지의 과정을 요약해드리겠습니다.
- EC2에서 Streamlit 앱 실행 (포트 8501)
- ACM SSL 인증서 생성
- ALB 설정 (HTTPS:443 → HTTP:8501)
- Route 53에서 도메인 연결
- ALB HTTP(80) → HTTPS(443) 리디렉션
- 테스트
다음 시간에는 CloudFront를 사용하여 streamlit 80/443포트 사용 방법에 대해 알아보겠습니다.
감사합니다.