- mysql
- 스프링
- spring mvc
- Git
- DI
- nginx
- PYTHON
- jpa
- spring
- spring security 6
- 1차원 배열
- string
- spring boot
- springboot
- @transactional
- select
- ORM
- 자바
- sql
- java
- AWS
- 스프링부트
- 문자열
- session
- join
- 데이터베이스
- 프로그래머스
- Docker
- Django
- SSL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
개발하는 자몽
[AWS] ELB 생성 본문
AWS의 ELB를 이용하여 로드밸런싱을 해보자! 그전에 ACM을 먼저 요청해야 한다.
🔗 2024.04.05 - [Architecture & Tool/AWS] - [AWS] ACM을 이용한 HTTPS 적용
ELB 생성
🔗 참고
AWS EC2 왼쪽 메뉴에서 로드 밸런서를 클릭한다. 아래 화면에서 로드 밸런서 생성을 클릭한다.
아래 유형 중에서 `Application Load Balancer 아래의 생성 버튼을 클릭한다.
로드 밸런서 이름을 입력한다.
네트워크 매핑 영역에서 EC2 인스턴스와 동일한 네트워크를 포함한 2개 이상의 영역을 선택한다. 예를 들어, 현재 사용 중인 인스턴스가 `ap-northeast-2a` 네트워크를 사용하고 있으면 해당 네트워크를 포함하여 선택하면 된다.
잘 모르겠다면 모두 선택해도 괜찮다.
보안 그룹도 EC2 인스턴스와 동일한 것으로 선택한다. 모르겠다면 EC2의 ID를 클릭하여 보안 탭에서 확인하자.
리스너 및 라우팅 차례이다. 여기에서 HTTP 80 포트와 HTTPS 443 포트를 설정한다. 우선 아래 화면에서 대상 그룹 생성을 클릭한다.
그룹 세부 정보 지정의 기본 구성에서 대상 유형은 인스턴스로 선택하고, 대상 그룹 이름을 입력한다.
나머지는 그대로 두고, 맨 아래로 스크롤을 내려서 다음을 클릭한다.
💡 상태 검사 경로는 로드 밸런서와 연결되어 있는 인스턴스가 살아있는지 정기적으로 확인하는 health check를 위한 경로이다. 만일 접속이 불가능한 경우 해당 인스턴스를 불능상태로 인식하고 트래픽을 보내지 않는다.
아래 화면에서 로드 밸런서를 적용할 인스턴스를 선택하고, 아래에 보류 중인 것으로 포함을 클릭한다.
그다음 대상 그룹 생성을 클릭한다.
생성이 완료되면 아래와 같은 화면이 나온다.
다시 리스너 및 라우팅으로 돌아와서 리스너 설정을 진행한다. 리스너 태그 추가를 클릭하여 HTTP, HTTPS 모두 생성하며, 모두 HTTP 대상 그룹을 선택한다. 생성한 대상 그룹이 보이지 않으면 옆에 새로 고침 버튼을 클릭하자.
보안 리스너 설정에서 EC2 인스턴스에 적용한 ACM을 선택한다.
이후 로드 밸런서 생성을 클릭한다.
이후 아래 화면에서 아래로 스크롤하고, 리스너 및 규칙에서 `HTTPS`를 선택합니다. 선택한 상태에서 리스너 관리 > SNI용 SSL 인증서 추가를 클릭합니다.
이동된 화면에서 이전에 발급받은 ACM을 선택하고 아래에 보류 중인 것으로 포함을 클릭한다.
그리고 보류 중인 인증서 추가를 클릭한다.
번외.
나중에 필요한 리스너나 규칙을 추가하려면 로드 밸런서 창으로 돌아와 리스너 및 규칙에서 리스너 추가를 클릭하면 된다.
로드 밸런서 대상 그룹 unhealthy 이슈
🔗 참고
- 웹앱이 https이면 api서버와 소켓 서버도 https로 이루어져야 하나요?AWS로 Django 프로젝트 배포하기(중급) 9. ELB Health Check 통과하기
- EC2 메타데이터 서비스 (IMDS)
- NGINX 다중 서버 upstream 설정
- 로드밸런서 대상그룹 unhealthy 해결(with 권한설정)
✅ Health Check URL
HTTPS 적용이 안 돼서 어떤 문제인지 확인해 봤더니, 등록한 모든 대상 그룹의 상태가 `Unhealthy`로 나와 있었다!
생각해 보니 대상 그룹의 상태 확인을 위한 경로를 `root url(/)`로만 지정해 놓은 상태였다. 그래서 헬스 체크를 위한 코드를 추가하고 상태 확인 경로를 수정했다.
# views.py
@api_view(['GET'])
def health_check(request):
"""
헬스 체크용 함수 -> 별도의 로직 필요없음
"""
return Response(status.HTTP_200_OK)
# urls.py
urlpatterns = [
...
path('health-check', views.health_check),
]
그리고 Django를 사용한 개발이므로 prod.py(==settings.py)의 `ALLOWED_HOSTS`에 EC2 인스턴스의 프라이빗 IPv4 주소를 추가했다.
...
ALLOWED_HOSTS = [
# 여기서는 실제 주소 대신 문자열로 대체
"ALLOWED_HOST_IP_PUB",
"ALLOWED_HOST_IP_PRI", # here
"ALLOWED_HOST_DOMAIN",
]
...
이후 상태가 `Healthy`로 변한 것을 확인할 수 있다!
'Architecture & Tool > AWS' 카테고리의 다른 글
[TIL] ACM(ELB)와 NGINX (0) | 2024.04.07 |
---|---|
[AWS] ACM을 이용한 HTTPS 적용 (0) | 2024.04.05 |
[AWS] EC2 인스턴스 용량 확장 (0) | 2024.03.29 |
[AWS] EC2 인스턴스 내 Docker 설치와 Django 프로젝트 설정 (1) | 2024.03.23 |
VSCode로 AWS EC2 인스턴스 접속 (0) | 2024.03.16 |