이두잉의 AWS 세상

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

CloudFront의 경우 저렴한 비용이 아니기 때문에 국내 사용자는 저렴한 국내 CDN 서비스를 이용하고, 국외는 CloudFront 서비스를 이용할 수 있습니다. 만약 Route53을 이용하여 DNS를 이용한다면 Geolocation을 통해서 국내외 사용자 분기가 가능합니다. 


해당 내용은 다음과 같습니다. 매우 간단합니다.

Route53 분기에 대한 확신이 없어 고민하실 수 있을 듯 해서 포스팅합니다.



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


이제 검증이 필요하겠죠. 아래와 같이 Python의 dns 모듈을 이용하여 검증을 할 수 있습니다. (각 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만 사용하고 싶습니다.


감사합니다.