AWS Global Accelerator 참고 링크
AWS 서비스 관련해서는 항상 최우선으로 'AWS 설명서' 를 읽어보는 것을 추천합니다.
한글 번역이 매끄럽지 못하면 언어를 영어로 변경 후 읽어보기 바랍니다.
1. AWS Global Accelerator 개요
1.1. AWS Global Accelerator 란?
•
AWS Global Accelerator는 로컬 또는 글로벌 사용자를 대상으로 애플리케이션의 가용성과 성능을 개선하는 서비스입니다.
•
AWS Global Accelerator는 AWS 글로벌 네트워크를 통해 사용자에서 어플리케이션으로 이어진 경로를 최적화하여 트래픽의 성능을 개선합니다.
1.2. AWS Global Accelerator 키워드
•
고정 Anycast IP
◦
정적 IP 주소를 제공하여 애플리케이션의 고정 진입점 역할 수행
◦
클라이언트 측 설정 변경 없이도 엔드포인트 교체 및 수정 가능
•
AWS 글로벌 네트워크 활용
◦
공용 인터넷 대신 AWS 글로벌 네트워크를 통해 트래픽 라우팅
◦
낮은 지연 시간과 높은 안정성 제공
•
엔드포인트 상태 검사 및 장애 조치(Failover)
◦
실시간 상태 검사를 통해 비정상 엔드포인트를 감지하고 트래픽을 자동으로 엔드포인트로 재라우팅
•
클라이언트 상태 유지(Client Affinity)
◦
상태 저장 애플리케이션의 경우 동일한 클라이언트를 동일한 엔드포인트로 지속적으로 라우팅
•
듀얼 스택 지원
◦
IPv4 및 IPv6 환경 모두에서 작동 가능.
•
커스텀 라우팅 액셀러레이터
◦
특정 EC2 인스턴스로 직접 트래픽 라우팅 가능.
•
크로스 계정 리소스 지원
◦
다른 계정의 리소스를 액셀러레이터에 연결 가능.
•
CloudWatch 메트릭 통합
◦
새로운 메트릭 추가로 더 세부적인 모니터링 가능.
•
보안 강화
◦
DDoS 보호(AWS Shield Standard) 기본 제공.
1.3. AWS Global Accelerator 작동 방식
[Caption] AWS Global Accelerator 아키텍처
•
Edge Location에서 알리는 2개의 고정 Anycast IP 주소를 통해, 사용자에게 가장 가까운 Edge Location으로 트래픽이 전송됩니다.
•
AWS 글로벌 네트워크를 통해 AWS Global Accelerator로 요청이 라우팅되면, 가장 가까운 정상 상태의 EndPoint Group을 선택하여 서비스 합니다.
•
Endpoint Group에 속한 Endpoint 유형은 EC2 인스턴스, Elastic IP, ALB, NLB로 지정할 수 있습니다.
•
Traffic Dial을 통해 Endpoint Group 별로 가중치를 부여하거나, Weight를 통해 Endpoint 별로 가중치를 부여해서 라우팅할 수 있습니다.
•
Client Affinity를 통해 출발지 IP 주소에 대한 선호도를 지정하여 제어할 수 있습니다.
AWS Global Accelerator 작동 방식의 핵심은 고정 Anycast IP을 제공하여 사용자 입장에서 고정 IP 주소로 접근이 가능하며, AWS 글로벌 네트워크를 경유하여 안정적이고 빠른 서비스가 가능한 점입니다.
2. AWS Global Accelerator 실습 준비
2.1. 실습 구성도
[Caption] AWS Global Accelerator 실습 구성도
•
시드니와 상파울루 리전에 웹 서버용 EC2 인스턴스 2대씩 배치합니다.
•
Global Accelerator에서 HTTP 서비스의 인바운드 처리를 위한 Listener를 구성하고, 2개의 Anycast IP를 할당합니다.
•
Global Accelerator에서 시드니와 상파울루 리전에 대한 Endpoint Group을 구분합니다.
◦
EndPoint Group의 EndPoint 지정 → 시드니 : ALB, 상파울루 : EC2 인스턴스 2대
•
서울과 버지니아 북부 리전에 테스트용 클라이언트를 구성하고 Anycast IP로 웹 접근하여 동작을 확인합니다.
2.2. AWS 기본 설정
•
이번 실습에서 활용할 AWS 리전은 서울, 버지니아 북부, 시드니, 상파울루 로 해당 리전에 대한 EC2 키 페어를 생성합니다.
•
서울, 버지니아 북부 리전은 클라이언트 영역으로 실습용 EC2 인스턴스를 1대씩 생성해서 사용합니다.
◦
Default VPC에 EC2 인스턴스 1대 생성
•
시드니, 상파울루 리전은 서비스 영역으로, CloudFormation에 의해 인프라를 배포합니다.
2.3. CloudFormation 배포(시드니, 상파울루 리전)
CloudFormation Template Code Review
•
CloudFormation 템플릿 파일을 다운받은 후 시드니, 상파울루 리전에서 스택을 생성합니다.
•
CloudFormation 스택 생성 시 리전별 KeyName 파라미터 값을 입력합니다. (EC2 키 페어)
•
CloudFormation에 의해 생성되는 리소스는 아래와 같습니다.
시드니 CF 생성 인프라
상파울루 CF 생성 인프라
2.4. 기본 환경 확인
•
사용자 PC에서 시드니 ALB의 도메인 주소로 웹 접근을 합니다. (새로고침 후 정상적인 로드밸런싱 확인)
•
사용자 PC에서 상파울루 EC2 인스턴스 IP 주소로 웹 접근을 합니다. (2대 모두 확인)
CloudFormation에 의해 리소스가 정상적으로 올라오기 까지 약간의 대기 시간이 필요합니다.
3. AWS Global Accelerator 생성
3.1. AWS Global Accelerator 생성
AWS Global Accelerator 서비스 접근
•
Global Accelerator → 액셀러레이터 → 액셀러레이터 생성
Step 1. 이름 입력
필드 | 설정 |
액셀러레이터 이름 | CloudNeta-GA |
액셀러레이터 유형 | 스탠다드 |
IP 주소 유형 | IPv4 |
Step 2. 리스터 추가
필드 | 설정 |
포트 | 80 |
프로토콜 | TCP |
클라이언트 선호도 | 없음 |
Step 3. 엔드포인트 그룹 추가
필드 | 설정 |
리전 | ap-southeast-2 |
트래픽 다이얼 | 100 |
상태 확인 구성 | 확장 |
상태 확인 프로토콜 | HTTP |
필드 | 설정 |
리전 | sa-east-1 |
트래픽 다이얼 | 100 |
상태 확인 구성 | 확장 |
상태 확인 프로토콜 | HTTP |
시드니 리전에 대한 설정 후 엔드포인트 그룹 추가로 다음 상파울루 리전에 대한 설정을 합니다.
Step 4. 엔드포인트 추가
•
리전 별로 엔드포인트 추가 버튼을 클릭 후 설정합니다.
엔드포인트 그룹: ap-southeast-2
필드 | 설정 |
엔드포인트 유형 | Application Load Balancer |
엔드포인트 | 대상 지정 |
가중치 | 128 |
[Caption] 시드니 리전의 엔프포인트 그룹의 엔드포인트 설정
엔드포인트 그룹: sa-east-1
필드 | 설정 |
엔드포인트 유형 | EC2 인스턴스 |
엔드포인트 | 대상 지정(각각 지정) |
가중치 | 128 |
[Caption] 상파울루 리전의 엔프포인트 그룹의 엔드포인트 설정
3.2. AWS Global Accelerator 정보 확인
액셀러레이터와 리스너 생성 확인
•
Global Accelerator → 액셀러레이터 → 대상 액셀러레이터 클릭
[Caption] 생성된 액셀러레이터와 리스너 확인
•
프로비저닝 선택은 배포됨 상태로 전환되었습니다.
•
액셀러레이터의 고정 IP 주소 세트에 Anycast IP 2개를 할당 받습니다.
•
TCP 80에 대한 리스너가 생성되었고 모두 정상 상태로 전환되었습니다.
엔드포인트 그룹 확인
•
Global Accelerator → 액셀러레이터 → 대상 액셀러레이터 클릭 → 대상 리스너 클릭
[Caption] 생성된 엔드포인트 그룹 확인
•
TCP 80에 대한 리스너 정보로 해당 리스너에 속한 엔드포인트 그룹을 확인합니다.
•
현재 각 엔드포인트 그룹에 대한 트래픽 다이얼은 모두 100%입니다. (트래픽 수용력 100%)
엔드포인트 확인
•
Global Accelerator → 액셀러레이터 → 대상 액셀러레이터 클릭 → 대상 리스너 클릭 → 대상 엔드포인트 그룹 클릭
[Caption] 생성된 엔드포인트 확인 (ap-southeast-2)
[Caption] 생성된 엔드포인트 확인 (sa-east-1)
•
ap-southeast-2의 엔드포인트 그룹에 대한 엔드포인트 정보를 확인합니다. (유형: ALB)
•
sa-east-1의 엔드포인트 그룹에 대한 엔드포인트 2대의 정보를 확인합니다. (유형: EC2)
4. AWS Global Accelerator 검증
4.1. 웹 접속 부하 테스트
웹 접속 테스트는 서울, 버지니아 북부 리전에 EC2 인스턴스를 생성하고 작업합니다. (Default VPC)
서울 리전의 EC2 인스턴스에서 테스트
GA_IP1=X.X.X.X
GA_IP2=Y.Y.Y.Y
Bash
복사
# Global Accelerator의 Anycast IP를 변수로 선언
각자 생성한 액셀러레이터의 IPv4 주소를 변수로 선언합니다.
for i in {1..100}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 100회 반복
=========================================
OUTPUT:
50 <h1>CloudNeta Web Server_2 [Region= ap-southeast-2] </h1>
50 <h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
:END
Bash
복사
•
100회 모두 시드니 리전에 존재하는 웹 서버로 접근합니다.
for ((i=0;i<10;i++)); do curl -w "%{time_total}\n" ${GA_IP1} ; done ;
Bash
복사
# [서울 리전] GA_IP1로 웹 접근의 지연 시간 확인 10회 반복
=========================================
OUTPUT:
<h1>CloudNeta Web Server_2 [Region= ap-southeast-2] </h1>
0.269032
<h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
0.287267
<h1>CloudNeta Web Server_2 [Region= ap-southeast-2] </h1>
0.269363
<h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
0.268564
<h1>CloudNeta Web Server_2 [Region= ap-southeast-2] </h1>
0.270009
<h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
0.284444
<h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
0.286411
<h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
0.270373
<h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
0.283502
<h1>CloudNeta Web Server_2 [Region= ap-southeast-2] </h1>
0.268684
:END
Bash
복사
•
10회 모두 시드니 리전에 존재하는 웹 서버로 접근하며 지연 시간은 약 0.27초 입니다.
traceroute -I 3.106.195.245
Bash
복사
# 시드니 리전의 EC2 인스턴스의 IP 주소의 통신 경로 확인
=========================================
OUTPUT:
traceroute to 3.106.195.245 (3.106.195.245), 30 hops max, 60 byte packets
1 ec2-52-79-0-143.ap-northeast-2.compute.amazonaws.com (52.79.0.143) 34.661 ms 34.647 ms 34.639 ms
2 * * *
...
6 * * *
7 100.65.9.129 (100.65.9.129) 10.099 ms 19.200 ms 11.254 ms
8 54.239.122.7 (54.239.122.7) 1.626 ms 1.273 ms 1.416 ms
9 * * *
10 242.7.197.7 (242.7.197.7) 2.718 ms 2.706 ms 2.698 ms
11 240.1.192.13 (240.1.192.13) 148.526 ms 148.726 ms 149.253 ms
12 242.4.123.97 (242.4.123.97) 141.122 ms 141.114 ms 141.106 ms
13 240.1.188.7 (240.1.188.7) 149.218 ms 149.211 ms *
14 * 242.4.112.129 (242.4.112.129) 145.993 ms 150.047 ms
15 * * *
...
:END
Bash
복사
[Caption] GA 미사용에 대한 도식화
•
서비스를 위해 수많은 네트워크를 거쳐 가며, 각 Hop은 성능에 영향을 주며 위험을 초래할 수 있습니다.
traceroute -I ${GA_IP1}
Bash
복사
# [서울 리전] GA_IP1 주소의 통신 경로 확인
=========================================
OUTPUT:
traceroute to 15.197.228.104 (15.197.228.104), 30 hops max, 60 byte packets
1 ec2-52-79-0-139.ap-northeast-2.compute.amazonaws.com (52.79.0.139) 14.437 ms 14.424 ms 14.416 ms
2 * * *
...
6 * * *
7 100.65.11.65 (100.65.11.65) 1.261 ms 1.063 ms 1.357 ms
8 52.93.247.3 (52.93.247.3) 1.446 ms 1.239 ms 1.209 ms
9 * 54.239.123.50 (54.239.123.50) 20.107 ms 20.097 ms
10 54.239.123.49 (54.239.123.49) 20.068 ms 19.975 ms 19.965 ms
11 150.222.116.186 (150.222.116.186) 19.957 ms 19.939 ms 19.923 ms
12 54.239.122.194 (54.239.122.194) 19.919 ms 19.904 ms 19.896 ms
13 a4caa6a655b1bb6d4.awsglobalaccelerator.com (15.197.228.104) 19.860 ms 19.846 ms *
:END
Bash
복사
[Caption] GA 사용에 따른 도식화
•
AWS Global Accelerator를 추가하면 AWS 글로벌 네트워크를 활용하여 성능이 개선 및 효율적인 통신을 보장합니다.
버지니아 북부 리전의 EC2 인스턴스에서 테스트
GA_IP1=X.X.X.X
GA_IP2=Y.Y.Y.Y
Bash
복사
# Global Accelerator의 Anycast IP를 변수로 선언
for i in {1..100}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [버지니아 북부 리전] GA_IP1로 웹 접근 100회 반복
=========================================
OUTPUT:
51 <h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
49 <h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
:END
Bash
복사
•
100회 모두 상파울루 리전에 존재하는 웹 서버로 접근합니다.
for ((i=0;i<10;i++)); do curl -w "%{time_total}\n" ${GA_IP1} ; done ;
Bash
복사
# [버지니아 북부 리전] GA_IP1로 웹 접근의 지연 시간 확인 10회 반복
=========================================
OUTPUT:
<h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
0.224849
<h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
0.232038
<h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
0.231924
<h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
0.230215
<h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
0.224406
<h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
0.229938
<h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
0.226152
<h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
0.230407
<h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
0.231130
<h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
0.226040
:END
Bash
복사
•
10회 모두 상파울루 리전에 존재하는 웹 서버로 접근되며 지연 시간은 약 0.23초 입니다.
traceroute -I ${GA_IP1}
Bash
복사
# [버지니아 북부 리전] GA_IP1 주소의 통신 경로 확인
=========================================
OUTPUT:
traceroute to 15.197.228.104 (15.197.228.104), 30 hops max, 60 byte packets
1 ec2-3-236-61-255.compute-1.amazonaws.com (3.236.61.255) 5.884 ms 5.869 ms 5.860 ms
2 240.0.228.96 (240.0.228.96) 0.661 ms 0.653 ms 0.644 ms
3 240.3.180.11 (240.3.180.11) 1.502 ms 1.495 ms 1.504 ms
4 240.3.180.21 (240.3.180.21) 0.707 ms 1.470 ms 1.462 ms
5 240.3.180.21 (240.3.180.21) 1.454 ms 1.446 ms 1.437 ms
6 * * *
7 a4caa6a655b1bb6d4.awsglobalaccelerator.com (15.197.228.104) 0.826 ms 0.775 ms *
:END
Bash
복사
인스턴스 별로 웹 접속 흐름 도식화
[Caption] 리전 별 인스턴스에서 웹 서버 접근 시 논리적인 흐름
•
사용자 입장에서 가장 가까운 Edge Location으로 트래픽이 전송합니다. (Anycast IP 사용)
•
AWS 글로벌 네트워크를 통해 최적의 엔드포인트 그룹으로 전송하여 서비스합니다.
•
예를 들어, 대한한국에서 접근하는 사용자는 서울 리전의 Edge Location으로 웹 접근 요청을 보내고, Edge Location에서 가장 가깝고 Healthy한 시드니 (ap-southeast-2)리전의 엔드포인트 그룹으로 AWS 글로벌 네트워크를 통해 서비스합니다.
4.2. 트래픽 다이얼과 가중치 조정 테스트
트래픽 다이얼은 EndPoint Group에 대한 트래픽 수용력이며, 가중치는 EndPoint 별 트래픽 전송 가중치입니다.
트래픽 다이얼 확인
•
Global Accelerator → 액셀러레이터 → 대상 액셀러레이터 클릭 → 대상 리스너 클릭
◦
현재 구성된 2개의 엔드포인트 그룹은 모두 트래픽 다이얼이 100%로 설정되어 모든 트래픽을 수용하고 있습니다.
트래픽 다이얼 조정 (시드니 리전 50%)
•
… → 엔드포인트 그룹 선택(시드니 리전) → 편집
필드 | 설정 |
트래픽 다이얼 | 50 |
[Caption] 시드니 리전의 엔드포인트 그룹의 트래픽 다이얼 조정 (50%)
서울 리전의 EC2 인스턴스에서 테스트
for i in {1..100}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 100회 반복
=========================================
OUTPUT:
29 <h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
26 <h1>CloudNeta Web Server_2 [Region= ap-southeast-2] </h1>
26 <h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
19 <h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
:END
Bash
복사
•
서울 리전 인스턴스 기준으로 약 50%정도는 시드니(ap-southeast-2)리전에서 처리되고 나머지는 상파울루(sa-east-1)리전에서 처리됩니다.
트래픽 다이얼 조정 (시드니 리전 0%) 후 테스트
•
… → 엔드포인트 그룹 선택(시드니 리전) → 편집
필드 | 설정 |
트래픽 다이얼 | 0 |
for i in {1..100}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 100회 반복
=========================================
OUTPUT:
62 <h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
38 <h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
:END
Bash
복사
•
서울 리전 인스턴스 기준으로 모든 트래픽이 상파울루(sa-east-1)에서 처리됩니다.
◦
비록 사용자 입장에서 시드니리전에 인접해 있지만 트래픽 다이얼이 0% 이기 때문
•
테스트 완료 후 트래픽 다이얼 값을 100%로 원상 복구합니다.
트래픽 다이얼 0%는 언제 사용할까?
트래픽 다이얼 0% 설정은 리전 내에서 응용 프로그램을 업그레이드하거나 유지 관리가 필요할 때, 먼저 0%으로 설정하여 트래픽을 차단합니다.
작업을 완료하고 다시 사용할 준비가 되면, 트래픽 다이얼을 100%로 조정하여 트래픽을 다시 수용합니다.
가중치 확인
•
Global Accelerator → 액셀러레이터 → 대상 액셀러레이터 클릭 → 대상 리스너 클릭 → 상파울루 엔드포인트 그룹 클릭
•
현재 상파울루 리전의 엔드포인트 그룹의 2개의 엔드포인트의 가중치 값은 128로 동일한 비중으로 설정하고 있습니다.
◦
Weight에 대한 트래픽 처리 공식 (자신의 Weight / 전체 Weight 합)
▪
엔드포인트#1 계산값: 128 / (128+128) = 1/2
▪
엔드포인트#2 계산값: 128 / (128+128) = 1/2
가중치 조정 (상파울루 리전 엔드포인트#1 가중치: 64)
•
… → 첫 번째 엔드포인트 선택 → 편집
필드 | 설정 |
가중치 | 64 |
[Caption] 상파울루 리전의 엔드포인트 그룹의 첫 번째 엔드포인트 가중치 조정 (64)
버지니아 북부 리전의 EC2 인스턴스에서 테스트
for i in {1..100}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [버지니아 북부 리전] GA_IP1로 웹 접근 100회 반복
=========================================
OUTPUT:
33 <h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
67 <h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
:END
Bash
복사
•
가중치에 따른 트래픽 가중을 계산해 보면
◦
엔드포인트#1: 64 / (64+128) = 1/3
◦
엔드포인트#2: 128 / (64+128) = 2/3
가중치 조정 (상파울루 리전 엔드포인트#1 가중치: 0) 후 테스트
•
… → 첫 번째 엔드포인트 선택 → 편집
필드 | 설정 |
가중치 | 0 |
for i in {1..100}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [버지니아 북부 리전] GA_IP1로 웹 접근 100회 반복
=========================================
OUTPUT:
62 <h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
38 <h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
:END
Bash
복사
•
엔드포인트#1의 가중치가 0이므로 트래픽이 전달되지 않고 엔드포인트#2로 모두 전달됩니다.
•
테스트 완료 후 Weight 값을 128으로 원상 복구합니다.
트래픽 다이얼 값을 조정하여 엔드포인트 그룹의 트래픽 처리 비중을 조절할 수 있으며,
가중치 값을 조정하여 엔드포인트의 트래픽 처리 비중을 조절할 수 있습니다.
4.3. 클라이언트 선호도 테스트
•
AWS Global Accelerator에서 특정 소스 IP 주소로 사용자 요청을 동일한 엔드포인트로 보내도록 클라이언트 선호도를 유지하도록 할 수 있습니다.
클라이언트 선호도 활성화
•
Global Accelerator → 액셀러레이터 → 대상 액셀러레이터 클릭 → 대상 리스너 선택 → 편집
필드 | 설정 |
클라이언트 선호도 | 소스 IP |
# AWS Global Accelerator 리스너의 클라이언트 선호도 활성화
•
출발지 IP 기준으로 특정 엔드포인트 대상으로 지속적인 연결을 보장합니다. (마치 Sticky Session)
버지니아 북부 리전의 EC2 인스턴스에서 테스트
for i in {1..100}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [버지니아 북부 리전] GA_IP1로 웹 접근 100회 반복
=========================================
OUTPUT:
100 <h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
:END
Bash
복사
•
상파울루리전에서 하나의 엔드포인트로만 접속이 이루어 집니다.
서울 리전의 EC2 인스턴스에서 테스트
•
서울리전에서 접속 시 시드니 리전의 웹 서버로만 접속되므로, 트래픽 다이얼을 0으로 조정하여 상파울루리전으로 향하도록 설정한 후 테스트합니다.
for i in {1..100}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 100회 반복
=========================================
OUTPUT:
100 <h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
:END
Bash
복사
•
상파울루리전에서 하나의 엔드포인트로만 접속이 이루어 집니다.
•
테스트 완료 후 트래픽 다이얼과 클라이언트 선호도 설정을 복구합니다.
4.4. 클라이언트 IP 주소 보존 테스트
•
AWS Global Accelerator의 기능으로 클라이언트 IP 주소를 유지하여 보존하는 기능입니다.
◦
엔드포인트 유형 별 클라이언트 IP 주소 보존 기능
▪
EC2 인스턴스: 항상 활성화
▪
ALB: 기본 값으로 활성화 (설정 가능)
▪
보안 그룹이 없는 NLB, 탄력적 IP 주소: 항상 비활성화
EC2 인스턴스 엔드포인트 유형에서 확인 (상파울루)
•
Global Accelerator → 액셀러레이터 → 대상 액셀러레이터 클릭 → 대상 리스너 클릭 → 대상 엔드포인트 그룹 클릭(sa-east-1)
[Caption] 상파울루 엔드포인트 그룹의 엔드포인트의 클라이언트 IP 주소 보존 기능 확인
엔드포인트를 선택 후 편집 페이지에 진입하면 클라이언트 IP 주소 보존 기능을 설정할 수 없도록 구성되어 있습니다. (항상 활성화로 고정)
버지니아 북부 리전의 EC2 인스턴스에서 테스트
for i in {1..10}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [버지니아 북부 리전] GA_IP1로 웹 접근 10회 반복
curl ipinfo.io/ip
Bash
복사
# [버지니아 북부 리전] EC2 인스턴스의 퍼블릭 IP 주소 확인
=========================================
OUTPUT:
52.23.169.2
:END
Bash
복사
상파울루 리전의 EC2 인스턴스에서 확인
sudo tail /var/log/httpd/access_log | grep curl
Bash
복사
# [상파울루 리전] EC2 인스턴스의 HTTP 액세스 로그 확인 (curl 필터링)
=========================================
OUTPUT:
52.23.169.2 - - [23/Dec/2024:09:25:26 +0000] "GET / HTTP/1.1" 200 53 "-" "curl/8.5.0"
52.23.169.2 - - [23/Dec/2024:09:25:26 +0000] "GET / HTTP/1.1" 200 53 "-" "curl/8.5.0"
52.23.169.2 - - [23/Dec/2024:09:25:27 +0000] "GET / HTTP/1.1" 200 53 "-" "curl/8.5.0"
52.23.169.2 - - [23/Dec/2024:09:25:27 +0000] "GET / HTTP/1.1" 200 53 "-" "curl/8.5.0"
52.23.169.2 - - [23/Dec/2024:09:25:28 +0000] "GET / HTTP/1.1" 200 53 "-" "curl/8.5.0"
:END
Bash
복사
•
상파울루 리전의 웹 서버에서 HTTP 로그를 확인해 보면, 클라이언트 IP 주소가 보존되어 그대로 인입되는 것을 확인할 수 있습니다.
타이밍적으로 보이질 않으면 버지니아 리전에서 웹 접근을 다시 시도한 후 로그를 확인합니다.
ALB 엔드포인트 유형에서 확인 (시드니)
•
Global Accelerator → 액셀러레이터 → 대상 액셀러레이터 클릭 → 대상 리스너 클릭 → 대상 엔드포인트 그룹 클릭(ap-southeast-2)
[Caption] 시드니 엔드포인트 그룹의 엔드포인트의 클라이언트 IP 주소 보존 기능 확인
클라이언트 IP 주소 보존 활성화 상태
sudo su -
cat << EOF >> /etc/httpd/conf/httpd.conf
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
EOF
Bash
복사
# [시드니 리전] httpd.conf 파일 수정
systemctl restart httpd
Bash
복사
# [시드니 리전] httpd 재시작
for i in {1..10}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 10회 반복
curl ipinfo.io/ip
Bash
복사
# [서울 리전] EC2 인스턴스의 퍼블릭 IP 주소 확인
=========================================
OUTPUT:
3.35.222.155
:END
Bash
복사
tail /var/log/httpd/access_log | grep curl
Bash
복사
# [시드니 리전] EC2 인스턴스의 HTTP 액세스 로그 확인 (curl 필터링)
=========================================
OUTPUT:
3.35.222.155 10.0.1.141 - - [23/Dec/2024:09:41:43 +0000] "GET / HTTP/1.1" 200 58 "-" "curl/8.5.0"
3.35.222.155 10.0.1.141 - - [23/Dec/2024:09:41:44 +0000] "GET / HTTP/1.1" 200 58 "-" "curl/8.5.0"
3.35.222.155 10.0.0.32 - - [23/Dec/2024:09:41:44 +0000] "GET / HTTP/1.1" 200 58 "-" "curl/8.5.0"
3.35.222.155 10.0.0.32 - - [23/Dec/2024:09:41:45 +0000] "GET / HTTP/1.1" 200 58 "-" "curl/8.5.0"
:END
Bash
복사
•
시드니 리전의 웹 서버에서 HTTP 로그를 확인해 보면, 클라이언트 IP 주소가 보존되어 그대로 인입되는 것을 확인할 수 있습니다.
클라이언트 IP 주소 보존 비활성화 상태
•
… → 대상 리스너 클릭 → 대상 엔드포인트 그룹 클릭(ap-southeast-2) → 엔드포인트 선택 → 편집
필드 | 설정 |
클라이언트 IP 주소 보존 | 비활성화 |
•
시드니리전의 ALB 엔드포인트의 클라이언트 IP 주소 보존을 체크를 해제합니다. (비활성화)
•
Global Accelerator가 재시동 되어 약간의 대기가 필요합니다.
for i in {1..10}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 10회 반복
tail /var/log/httpd/access_log | grep curl
Bash
복사
# [시드니 리전] EC2 인스턴스의 HTTP 액세스 로그 확인 (curl 필터링)
=========================================
OUTPUT:
99.82.168.138 10.0.0.32 - - [23/Dec/2024:09:50:11 +0000] "GET / HTTP/1.1" 200 58 "-" "curl/8.5.0"
99.82.168.140 10.0.1.141 - - [23/Dec/2024:09:50:11 +0000] "GET / HTTP/1.1" 200 58 "-" "curl/8.5.0"
99.82.168.142 10.0.1.141 - - [23/Dec/2024:09:50:12 +0000] "GET / HTTP/1.1" 200 58 "-" "curl/8.5.0"
99.82.168.141 10.0.0.32 - - [23/Dec/2024:09:50:13 +0000] "GET / HTTP/1.1" 200 58 "-" "curl/8.5.0"
:END
Bash
복사
•
시드니 리전의 웹 서버에서 HTTP 로그를 확인해 보면 클라이언트 IP 주소가 보존되지 않고, GA에서 사용하는 내부 주소로 들어 옵니다.
클라이언트 IP 주소 보존 기능을 사용하면?
IP 별 필터링을 수월하게 수행할 수 있고, 특정 IP마다 제공 컨텐츠 분류하거나 통계 정보 활용에 유용합니다.
4.5. Failover 테스트
•
시드니리전에 위치하는 웹 서버를 한대 씩 중지 후 동작을 확인합니다.
•
클라이언트는 서울리전을 기준으로 합니다.
시드니 리전의 웹 서버 1대 중지 후 테스트
for i in {1..10}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 10회 반복
=========================================
OUTPUT:
10 <h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
:END
Bash
복사
•
시드니 리전에 존재하는 1대의 웹 서버에서 처리합니다.
시드니 리전의 웹 서버 모두 중지 후 테스트
for i in {1..10}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 10회 반복
=========================================
OUTPUT:
6 <h1>CloudNeta Web Server_2 [Region= sa-east-1] </h1>
4 <h1>CloudNeta Web Server_1 [Region= sa-east-1] </h1>
:END
Bash
복사
•
시드니 리전에 존재하는 활성화된 웹 서버가 없어 상파울루 리전에 존재하는 웹 서버가 처리해 줍니다.
대상의 헬스 체크 확인 과정에 따른 지연으로 일시적으로 통신이 되지 않습니다. (재시도)
[Caption] 시드니 리전의 엔드포인트 상태 (비정상)
시드니 리전의 웹 서버 모두 시작 후 테스트
for i in {1..10}; do curl -s -q ${GA_IP1} ; done | sort | uniq -c | sort -nr
Bash
복사
# [서울 리전] GA_IP1로 웹 접근 10회 반복
=========================================
OUTPUT:
5 <h1>CloudNeta Web Server_2 [Region= ap-southeast-2] </h1>
5 <h1>CloudNeta Web Server_1 [Region= ap-southeast-2] </h1>
:END
Bash
복사
•
시드니 리전에 존재하는 활성화된 웹 서버가 처리합니다.
대상의 헬스 체크 확인 과정에 따른 지연으로 일시적으로 상파울루 리전의 웹 서버로 통신됩니다. (재시도)
다시 시드니 리전의 엔드포인트 상태가 정상으로 돌아온 것을 확인합니다.
5. 자원 삭제
1.
AWS Global Accelerator - 액셀러레이터 사용 중지 (약 5분 소요)
2.
AWS Global Accelerator - 액셀러레이터 삭제
3.
시드니 CloudFormation - 스택 삭제
4.
상파울루 CloudFormation - 스택 삭제
5.
서울 EC2 - 인스턴스 종료
6.
버지니아 북부 EC2 - 인스턴스 종료
순서에 따라 진행하며, 모든 자원을 반드시 삭제해서 불필요한 과금이 발생하지 않도록 합니다.