Home
home

5장 실습 - Amazon Route 53 구성 및 라우팅 정책 확인

1. CloudFormation을 통한 기본 인프라 배포

이번 실습의 기본 인프라 구성을 CloudFormation을 통해 스택을 생성하고 자원을 배포할 것입니다.
CloudFormation 템플릿 다운로드
아래 CloudFormation 템플릿 파일을 다운로드합니다.
CH5_LAB2.yaml
5.7 KB
Parameters: KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameter Type: AWS::EC2::KeyPair::KeyName ConstraintDescription: must be the name of an existing EC2 KeyPair. InstanceType: Description: Enter t2.nano, t2.micro Default is t2.micro. Type: String Default: t2.micro AllowedValues: - t2.nano - t2.micro LatestAmiId: Description: (DO NOT CHANGE) Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64' AllowedValues: - /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64 Resources: MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.5.0.0/16 EnableDnsSupport: true EnableDnsHostnames: true Tags: - Key: Name Value: LAB5-VPC MyIGW: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: LAB5-IGW MyIGWAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref MyIGW VpcId: !Ref MyVPC MyPublicRT: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref MyVPC Tags: - Key: Name Value: LAB5-PUBLIC-RT MyDefaultPublicRoute: Type: AWS::EC2::Route DependsOn: MyIGWAttachment Properties: RouteTableId: !Ref MyPublicRT DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref MyIGW MyPublicSN1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC AvailabilityZone: !Select [ 0, !GetAZs '' ] CidrBlock: 10.5.1.0/24 Tags: - Key: Name Value: LAB5-PUBLIC-SN-1 MyPublicSN2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC AvailabilityZone: !Select [ 2, !GetAZs '' ] CidrBlock: 10.5.2.0/24 Tags: - Key: Name Value: LAB5-PUBLIC-SN-2 MyPublicSNRouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref MyPublicRT SubnetId: !Ref MyPublicSN1 MyPublicSNRouteTableAssociation2: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref MyPublicRT SubnetId: !Ref MyPublicSN2 WEBSG: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable HTTP access via port 80 and SSH access via port 22 VpcId: !Ref MyVPC Tags: - Key: Name Value: WEB-SG SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: '22' ToPort: '22' CidrIp: 0.0.0.0/0 - IpProtocol: icmp FromPort: -1 ToPort: -1 CidrIp: 0.0.0.0/0 MYEC21: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: !Ref LatestAmiId KeyName: !Ref KeyName Tags: - Key: Name Value: LAB5-WEB-1 NetworkInterfaces: - DeviceIndex: 0 SubnetId: !Ref MyPublicSN1 GroupSet: - !Ref WEBSG AssociatePublicIpAddress: true UserData: Fn::Base64: !Sub | #!/bin/bash hostnamectl --static set-hostname LAB5-WEB-1 dnf install httpd -y systemctl start httpd && systemctl enable httpd echo "<h1>[인프런] CloudNet@ LAB5-WEB-1 Server</h1>" > /var/www/html/index.html MYEC22: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: !Ref LatestAmiId KeyName: !Ref KeyName Tags: - Key: Name Value: LAB5-WEB-2 NetworkInterfaces: - DeviceIndex: 0 SubnetId: !Ref MyPublicSN2 GroupSet: - !Ref WEBSG AssociatePublicIpAddress: true UserData: Fn::Base64: !Sub | #!/bin/bash hostnamectl --static set-hostname LAB5-WEB-2 dnf install httpd -y systemctl start httpd && systemctl enable httpd echo "<h1>[인프런] CloudNet@ LAB5-WEB-2 Server</h1>" > /var/www/html/index.html MyEIP1: Type: AWS::EC2::EIP Properties: Domain: vpc MyEIP1Assoc: Type: AWS::EC2::EIPAssociation Properties: InstanceId: !Ref MYEC21 AllocationId: !GetAtt MyEIP1.AllocationId MyEIP2: Type: AWS::EC2::EIP Properties: Domain: vpc MyEIP2Assoc: Type: AWS::EC2::EIPAssociation Properties: InstanceId: !Ref MYEC22 AllocationId: !GetAtt MyEIP2.AllocationId ALBTargetGroup: Type: AWS::ElasticLoadBalancingV2::TargetGroup Properties: Name: LAB5-ALB-TG Port: 80 Protocol: HTTP VpcId: !Ref MyVPC Targets: - Id: !Ref MYEC21 Port: 80 - Id: !Ref MYEC22 Port: 80 ApplicationLoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Name: LAB5-ALB Scheme: internet-facing SecurityGroups: - !Ref WEBSG Subnets: - !Ref MyPublicSN1 - !Ref MyPublicSN2 ALBListener: Type: AWS::ElasticLoadBalancingV2::Listener Properties: DefaultActions: - Type: forward TargetGroupArn: !Ref ALBTargetGroup LoadBalancerArn: !Ref ApplicationLoadBalancer Port: 80 Protocol: HTTP Outputs: Web1: Value: !GetAtt MYEC21.PublicIp Web2: Value: !GetAtt MYEC22.PublicIp
YAML
복사
# CH5_LAB2.yaml 파일 내용
CloudFormation 스택 생성 설정
CloudFormation 서비스 → 스택 (메뉴 진입) → 스택 생성 (버튼 클릭)
1단계 - 스택 생성
템플릿 준비: 기존 템플릿 선택 (선택)
템플릿 소스: 템플릿 파일 업로드 (선택)
파일 선택 → 템플릿 파일 선택 (CH5_LAB2.yaml) → 열기
다음 (버튼 클릭)
2단계 - 스택 세부 정보 지정
스택 이름: LAB5-CF-2 (입력)
InstanceType: t2.micro or t2.nano
KeyName: 각자 생성한 키 페어 (선택)
다음 (버튼 클릭)
3단계 - 스택 옵션 구성
다음 (버튼 클릭)
4단계 - 검토 및 작성
전송 (버튼 클릭)
생성 자원 확인
VPC
VPC 서비스 → VPC (메뉴 진입) → 대상 VPC (선택)
리소스 맵 (탭 진입)
EC2 인스턴스
EC2 서비스 → 인스턴스 (메뉴 진입) → 대상 인스턴스 (선택)
보안 그룹
EC2 서비스 → 보안 그룹 (메뉴 진입) → 대상 보안 그룹 (선택)
인바운드 규칙 (탭 진입)
탄력적 IP
EC2 서비스 → 탄력적 IP (메뉴 진입)
대상 그룹
EC2 서비스 → 대상 그룹 (메뉴 진입) → 대상 그룹 (선택)
대상 (탭 진입)
로드 밸런서
EC2 서비스 → 로드 밸런서 (메뉴 진입) → LAB5-ALB (선택)
세부 정보 (탭 진입) → DNS 이름 (복사)
리스너 및 규칙 (탭 진입)
리소스 맵 (탭 진입)
이전 실습의 CloudFormation 스택(LAB5-CF-1)에서 생성한 MY-EC2 인스턴스에 접근해서 작업합니다.
대상 인스턴스는 인스턴스 중지인스턴스 시작으로 전환합니다.
기본 통신 확인
ALB_DNS=[ALB_DNS_ADDRESS]
Bash
복사
# ALB 도메인 주소 변수 지정
dig +short $ALB_DNS
Bash
복사
# ALB 도메인 주소 해석
dig +trace $ALB_DNS
Shell
복사
# ALB 도메인 주소 해석 과정 확인
curl $ALB_DNS
Bash
복사
# HTTP 1회 접근
for i in {1..20}; do curl $ALB_DNS --silent ; done | sort | uniq -c | sort -nr
Shell
복사
# HTTP 20회 접근 (반복문)

2. Amazon Route 53 라우팅 정책 확인

Amazon Route 53의 라우팅 정책 중 “단순 라우팅 정책”, “가중치 기반 라우팅 정책”, “장애 조치 라우팅 정책”에 대해 실습을 진행합니다.
LAB5-CF-2 스택에서 출력 탭으로 진입해서, 웹 서버-1과 웹 서버-2의 퍼블릭 IP 주소를 기록해 둡니다.

2.1. 단순 라우팅 정책 확인

단순 라우팅 레코드 생성 - 1
Route 53 서비스 → 호스팅 영역 (메뉴 진입) → 대상 호스팅 영역 (클릭)
레코드 생성 (버튼 클릭)
레코드 이름: test
레코드 유형: A
: (아래)
[웹 서버-1 퍼블릭 IP] [웹 서버-2 퍼블릭 IP]
Plain Text
복사
TTL: 60
라우팅 정책: 단순 라우팅
레코드 생성 (버튼 클릭)
단순 라우팅 정책 검증 - 1
MyDomain=[각자의 도메인]
Shell
복사
# 각자의 도메인 주소를 변수에 선언
curl test.$MyDomain
Shell
복사
# test.$MyDomain의 HTTP 1회 접근
dig +short test.$MyDomain dig +trace test.$MyDomain
Shell
복사
# test.$MyDomain의 dig 명령어 활용
while true; do curl test.$MyDomain \ && date && echo; sleep 30; done
Shell
복사
# test.$MyDomain의 HTTP로 30초 간격으로 무한 접근
단순 라우팅 레코드 생성 - 2
Route 53 서비스 → 호스팅 영역 (메뉴 진입) → 대상 호스팅 영역 (클릭)
레코드 생성 (버튼 클릭)
레코드 이름: alb
레코드 유형: A
별칭: 활성
엔드포인트 선택: Application/Classic Load Balancer에 대한 별칭
리전: 아시아 태평양(서울)
로드 밸런서 선택: LAB5-ALB
라우팅 정책: 단순 라우팅
레코드 생성 (버튼 클릭)
단순 라우팅 정책 검증 - 2
curl alb.$MyDomain
Shell
복사
# alb.$MyDomain의 HTTP 1회 접근
for i in {1..20}; do curl alb.$MyDomain --silent ; done | sort | uniq -c | sort -nr
Shell
복사
# alb.$MyDomain의 HTTP 20회 접근

2.2. 가중치 기반 라우팅 정책 확인

가중치 기반 라우팅 레코드 생성
Route 53 서비스 → 호스팅 영역 (메뉴 진입) → 대상 호스팅 영역 (클릭)
레코드 생성 (버튼 클릭)
레코드 이름: weight
레코드 유형: A
: (아래)
[웹 서버-1 퍼블릭 IP]
Plain Text
복사
TTL: 60
라우팅 정책: 가중치 기반
가중치: 8
레코드 ID: WEB1
다른 레코드 추가 (버튼 클릭)
레코드 이름: weight
레코드 유형: A
: (아래)
[웹 서버-2 퍼블릭 IP]
Plain Text
복사
TTL: 60
라우팅 정책: 가중치 기반
가중치: 2
레코드 ID: WEB2
레코드 생성 (버튼 클릭)
가중치 기반 라우팅 정책 검증
curl weight.$MyDomain
Shell
복사
# weight.$MyDomain의 HTTP 1회 접근
for i in {1..10}; do curl weight.$MyDomain --silent ; sleep 60 ; done | sort | uniq -c | sort -nr
Shell
복사
# weight.$MyDomain의 HTTP 10회 접근 (60초 간격)
60초 간격으로 HTTP 10회 접근을 모두 마친 후에 결과가 출력됩니다.
명령어를 입력 후 10분 정도 대기해 주세요.

2.3. 장애 조치 라우팅 정책 확인

상태 검사 생성
Primary-Check
Route 53 서비스 → 상태 검사(확인) (메뉴 진입) → 상태 확인 생성 (버튼 클릭)
이름: Primary-Check
리소스: 엔드포인트 (선택)
엔드포인트 지정 기준: IP 주소 (선택)
IP 주소: HTTP, [웹 서버-1 퍼블릭 IP]:80
고급 구성 (확장)
요청 간격: 빠름(10초) (선택)
실패 임계값: 2
상태 확인 생성 (버튼 클릭)
Secondary-Check
Route 53 서비스 → 상태 검사(확인) (메뉴 진입) → 상태 확인 생성 (버튼 클릭)
이름: Secondary-Check
리소스: 엔드포인트 (선택)
엔드포인트 지정 기준: IP 주소 (선택)
IP 주소: HTTP, [웹 서버-2 퍼블릭 IP]:80
고급 구성 (확장)
요청 간격: 빠름(10초) (선택)
실패 임계값: 2
상태 확인 생성 (버튼 클릭)
장애 조치 라우팅 레코드 생성
Route 53 서비스 → 호스팅 영역 (메뉴 진입) → 대상 호스팅 영역 (클릭)
레코드 생성 (버튼 클릭)
레코드 이름: failover
레코드 유형: A
: (아래)
[웹 서버-1 퍼블릭 IP]
Plain Text
복사
TTL: 60
라우팅 정책: 장애 조치
장애 조치 레코드 유형: 기본
상태 확인 ID: Primary-Check (선택)
레코드 ID: Primary-WEB
다른 레코드 추가 (버튼 클릭)
레코드 이름: failover
레코드 유형: A
: (아래)
[웹 서버-2 퍼블릭 IP]
Plain Text
복사
TTL: 60
라우팅 정책: 장애 조치
장애 조치 레코드 유형: 보조
상태 확인 ID: Secondary-Check (선택)
레코드 ID: Secondary-WEB
레코드 생성 (버튼 클릭)
장애 조치 라우팅 정책 검증
curl failover.$MyDomain
Shell
복사
# failover.$MyDomain의 HTTP 1회 접근
while true; do curl failover.$MyDomain --connect-timeout 5 \ && date && echo; sleep 5; done
Shell
복사
# failover.$MyDomain의 HTTP로 5초 간격으로 무한 접근

3. 생성 자원 삭제

Route 53 상태 검사 삭제
Route 53 서비스 → 상태 검사 (메뉴 진입) → 대상 상태 검사 (선택)
작업 → 삭제 (클릭)
Route 53 호스팅 영역 - 레코드 삭제
Route 53 서비스 → 호스팅 영역 (메뉴 진입) → 대상 호스팅 영역 (클릭)
실습에 사용한 A 레코드 (모두 선택) → 레코드 삭제 (버튼 클릭)
삭제 (버튼 클릭)
Route 53 호스팅 영역 삭제
Route 53 서비스 → 호스팅 영역 (메뉴 진입) → 대상 호스팅 영역 (선택) → 삭제 (버튼 클릭)
삭제 (입력) → 삭제 (버튼 클릭)
CloudFormation 스택 삭제
CloudFormation 서비스 → 스택 (메뉴 진입)
대상 스택 선택 → 삭제 (버튼 클릭)
약 5분 내외 시간 소요
여기까지 5장 실습 - Amazon Route 53 구성 및 라우팅 정책 확인 실습을 마칩니다.
수고하셨습니다 :)