AWS EC2 도메인을 연결해보자

Date:     Updated:

카테고리:

태그: ,

1. 도메인 적용 동기

AWS Ec2를 설정하고 사용하는 도중 갑자기 장애가 발생했다. 접속이 안되고 응답도 없었다. 급하게 AWS접속을 확인하니 이유는 알 수 없지만 인스턴스가 응답이 없어서 연결도 안되었으며, 종료 후 시작을 했을 때 에러가 발생했다. 15분 경과 후 재시작을 했더니 정상적으로 접속을 할 수 있었으나…. IPv4가 변경되었다. 서버인데 IP가 변경되다니 당황했었다. 그런데 다음날 같은 증상이 다시 발생했다. 이건 아니다 싶어서 2단계로 나눠서 대응하기로 했다.

  1. 도메인을 설정하여 IP가 변경되어도 같은 도메인으로 접속이 가능하도록 한다.
  2. 같은 증상이 계속 발생할 경우 리전을 변경하여 EC2를 새로 생성한다.(유럽 스톡홀름 -> 미국 오레곤) 이번에는 도메인 작업을 먼저 해보고자 한다.

2. 도메인 선정하기

무료도메인 : https://www.duckdns.org/ image

동적으로 IP가 변경되는 환경(개인 PC, AWS)에서 변경되는 IP를 즉시 사이트를 통해 변경이 가능하고 환경에 맞게 자동으로 변경된 IP를 클라이언트에서 DNS서버측으로 갱신이 가능한 서비스를 무료로 제공한다. 일단 사용 후 괜찮다면 Donate를 양심적으로 해 볼까 한다.

duckdns 회원가입


상단에 회원 가입중 어떤 것을 사용하든 상관이 없다.

image

일단 진행은 구글로 하였다.

image

회원 가입 후 로그인을 하면 첫 화면에 계정과, Token이 표시가 된다 이 정보가 도메인 연동에 매우 중요하니 유출되지 않도록 주의 한다.

duckdns 도메인 생성하기

image

메인화면에서 사용할 도메인을 입력 후 add domain을 클릭한다.

image

도메인이 생성된 후 ip를 알고 있다면 그냥 ip를 입력하고 update ip를 클릭 하면 된다. 설명이 끝났다. 너무 쉽다. 그리고 생성된 도메인으로 접속해보자.

image

80포트를 code-server로 설정해두었기 때문에 연결확인을 바로 할 수 있다. 이제 IP가 변경될 때마다 사이트에 들어가서 도메인의 IP만 갱신하면 된다. 클라이언트나 개발환경은 도메인으로 접속하도록 설정해두면 소스쪽은 변경하지 않아도 된다. 그런데 뭔가 귀찮다. ip 변경 -> ip 갱신 이것을 유동 ip라면 매번해야한다. 그래서 duckdns는 클라이언트가 서버 데이터를 갱신하도록 명령어를 제공한다.

이것을 설정해보도록 하자.

duckdns 도메인 IP 서버에서 자동으로 변경 되도록 설정

image

상단메뉴의 install을 클릭한다.

image

유동IP를 서버로 사용하기 위해서 많은 OS마다 설정하는 방법을 제공한다. 이 중에 지금 쓸것은 EC2다. EC2만 확인한다.

image

내용을 읽어보면 SSH로 터미널에 접속하라는 거다. 그런데 문제는 OS가 ubunto로 되어있다. 현재 사용 중인 OS는 amazon linux이니 설정에 차이가 날 수 있다. 유의해 두자

# root 계정으로 변경한다.
su
# root의 home으로 이동한다.
cd ~

mkdir duckdns
cd duckdns
vi duck.sh

설치 가이드의 문서대로 duckdns 폴더를 만들고 이동하여 duck.sh라는 파일을 만들고 아래 내용을 입력한다.

#!/bin/bash
current=""
while true; do
	latest=`ec2-metadata --public-ipv4`
	echo "public-ipv4=$latest"
	if [ "$current" == "$latest" ]
	then
		echo "ip not changed"
	else
		echo "ip has changed - updating"
		current=$latest
		echo url="https://www.duckdns.org/update?domains=도메인명&token=토큰명&ip=아이피주소" | curl -k -o ~/duckdns/duck.log -K -
	fi
	sleep 5m
done

설치 가이드 문서가 복잡하게 되어 있는데 핵심은 딱 한줄이다.

#갱신하는 명령어를 본인의 서버에 맞게 변경해서 확인해보자
curl -k "https://www.duckdns.org/update?domains=도메인명&token=토큰명&ip=아이피주소"

# ex (토큰은 메인화면에서 확인했던 값을 입력한다.)
curl -k "https://www.duckdns.org/update?domains=testsub0410&token=토큰입력&ip=44.33.22.11"

#응답값
OK

image

이와 같이 도메인의 주소가 갱신되는 것을 알 수 있다.

가이드 문서의 명령어는

current 기존 마지막에 저장된 IP주소
#AWS EC2의 현재상태의 외부 IP를 반환
ec2-metadata --public-ipv4

비교하여 변경되었을경우 자동으로 5분간격으로 무한히 실행하며 IP를 서버갱신하는 것이다.

문제는 스크립트를 실행하면 주기적으로 동작하여 IP변동시 반영하겠지만… 시스템이 다운되면 매번 재기동을 해야한다.

duckdn daemon 기동

image

가이드 문서에 친절하게 나와 있다. 그런데 따라하다 보면 막힌다. 저건 ubunto 기준이기 때문이다.

하나씩 설정을 해보자

# 권한을 루토르 변경한다.
chmod 700 duck.sh

# daemon 파일을 생성한다.
vi duck_daemon.sh
# 가이드 문서의 권장 내용
#!/bin/bash
su - ubuntu -c "nohup ~/duckdns/duck.sh > ~/duckdns/duck.log 2>&1&"

# 가이드 문서의 ubuntu기준으로 작성된 duck_daemon.sh내용을 아래와 같이 변경한다.
nohup ~/duckdns/duck.sh > ~/duckdns/duck.log 2>&1&

권한을 설정한다.

chmod +x duck_daemon.sh
sudo chown root duck_daemon.sh
sudo chmod 744 duck_daemon.sh

# 데몬을 실행한다.
sudo ./duck_daemon.sh

# 실행 중인 데몬을 확인한다.
ps -ef | grep duck

# 갱신 결과를 확인한다.
cat duck.log
# 데몬을 부팅시 실행할수 있도록 링크파일을 생성한다.
ln -s ~/duckdns/duck_daemon.sh /etc/rc2.d/S10duckdns

# 부팅 후 실행되는 파일들에 등록 된 것을 확인한다.
ls -la /etc/rc2.d/

# 프로세스를 종료한다.
pkill duck

# 데몬을 직접 실행이 아닌 부팅시 실행되는 링크를 통해 실행한다.
/etc/rc2.d/S10duckdns

# 프로세스가 정상적으로 실행 되어 있는지 확인한다.
ps -ef | grep duck

3. AWS EC2 도메인 연결을 종료하면서

환경은 계속 변화한다. 몇 개월이나 1년만 지나도 설정이 변경되면서 똑같이 해도 안될 수 있다. 당연히 그것을 해결하는 것이 기술자이며 개발자다. 이해 하는 것이 힘들었지만 좋은 경험이었고, 중간 설정은 건너뛰어도 된다 IP가 변경되면 그냥 duckdns.org로 가서 로그인하고 ip갱신하는 것이 빠르다. 그러나 사람은 실수의 가능성이 존재한다. 그래서 시스템을 만들고 자동화를 통해 실수를 줄이고자 한다. 쉽게 수동으로 고치는 것보다 차후를 위해 시스템을 만들고 자동화 할 수 있는 방법을 생각해 볼 수 있었다.

숙제가 남았다.

Amazon Elastic IP를 사용하면 IP가 변경되지 않는다. 데몬이나 설정 자체가 무의미해진다. 시간이 되면 AWS를 고정IP로 변경한 후 사용을 해봐야 겠다. 과금은 진리인듯 하다.


개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
댓글 또는 메일로 알려주시면 감사하겠습니다.

맨 위로 이동하기

aws 카테고리 내 다른 글 보러가기

댓글 남기기