본문 바로가기

Networking/Route 53

Amazon Route53 Geolocation을 활용한 Client 로케이션 별 분기

Route53은 AWS의 DNS 서버로 Simple, Weighted, Latency, Failover, Geolocation 정책으로 도메인 리졸빙이 가능.


CloudFront의 경우 저렴한 비용이 아니기 때문에 국내 사용자는 저렴한 국내 CDN 서비스를 이용하고, 국외는 CloudFront 서비스를 이용할 수 있음. 만약 Route53을 이용하여 DNS를 이용한다면 Geolocation을 통해서 국내외 사용자 분기가 가능함(ISP 별 분기는 불가하지만 Latecy 분기로 비슷한 효과는 가능)


해당 내용은 다음과 같이. 매우 간단함.



추가로 해당 여러 CDN 업체를 사용할 때는 CNAME 분기된 도메인 하위 레코드를 Weighted 기능을 사용하여 비율을 조정할 수 있음. Weight 5, 5 값을 넣어 절반으로 CloudFront와 다른 CDN을 동시에 사용 가능함.



검증은 아래와 같이 dns.resolver를 이용하여... (각 Telco DNS마다 테스트 수행을 권장합니다.)

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import dns.resolver #import the module
 
ETC_CDN = ['52.78.51.87']
AWS_CDN = ['52.85.122.105''52.85.122.154''52.85.122.15''52.85.122.75''52.85.122.234''52.85.122.176''52.85.122.115''52.85.122.245''52.85.230.108']
 
def dns_query():
    """DNS QUERY"""
    response = dns.resolver.query('cdn.leedoing.com''A')
    record = str(response[0])
 
    """CDN CHECK"""
    for number in enumerate(ETC_CDN):
        if record in number[1]:
            print('ETC_CDN: ' + record)
            return "etc"
    for number in enumerate(AWS_CDN):
        if record in number[1]:
            print('AWS_CDN: ' + record)
            return "aws"
 
    """NOT FOUND IP"""
    print('Not Found CDN List')
    print("Not Found Record:" + record)
    return 'not'
 
if __name__ == "__main__":
    etc_count = 0
    aws_count = 0
    not_count = 0
 
    for i in range(0500):
        result = dns_query()
        elif result in 'etc':
            etc_count += 1
        elif result in 'aws':
            aws_count += 1
        elif result in 'not':
            not_count += 1
 
    print('etc_count: %d' % etc_count)
    print('aws_count: %d' % aws_count)
    print('not_count: %d' % not_count)
cs


아래와 같이 Traffic flow를 이용해서도 가능함. 쉽게 구성 가능하며 직관적으로 내용을 이해할 수 있으나, 추가 비용 발생과 Route 53의 추가 기능을 사용하기 때문에, 가능하다면 Hosted zones 만을 사용하는게 좋을듯.



참고로 Zone File Import의 경우 레코드셋이 1000개로 제한되어 있음. 아래 갓바니버그님의 오픈소스를 통해 1000개 이상의 Zone File Import가 가능하다. 

갓바니버그: https://github.com/barnybug/cli53