[AWS] ConoHa 에서 AWS 로 이전하면서 느낀점 4. 서버이야기 | Posted on 2019. 9. 25. 14:42
라이트세일을 버리고, EC2로 갈아탔습니다.
( 그리고 마음에 평온이;; )
일단 라이트세일에서 긴급하게 EC2로 갈아탄 이유는..
라이트세일의 한계 때문입니다.
개인적으로 본인이 서비스중인 사이트는 여러가지가 있는데, 과거 말했다시피 가장 활성화된것들이 1위가 각기 태국과 미국입니다.
( 콩라인 한국.. )
VPC간 연결로 한번 구성해볼까 했는데..
Lightsail VPC 와 AWS VPC의 피어링 이후 다른곳과의 피어링이 엄청나게 빡셉니다.
옛날 IT 초창기 시절을 살아본 분들이라면 연결이 가능할거 같은데, 추후 확장성을 고려해도 개인적으로 비추천합니다.
일단 현재 구성은 아래와 같습니다.
EC2 서울 -> 서울 VPC - 피어링 -> RDS 및 ElastiCache VPC 서울
EC2 싱가포르 -> 싱가포르 VPC - 피어링 -> RDS 및 ElastiCache VPC 서울
( 미국이 없는 이유는 아직 미국은 동쪽에 박을지, 서쪽에 박을지 고민중이라;; 일단 확실하고 테스트 겸해서 서울과 싱가포르만.. 태국은 리스트에 없고, 태국에서 가장 가까운게 싱가포르라 싱가포르에 박았습니다. )
RDS 및 ElastiCache VPC 서울은 동일한 VPC 입니다.
중심은 RDS 및 ElastiCache VPC 서울이고, 여기에 각 EC2 리전 VPC 를 피어링 하는 방법을 사용했습니다.
만약 내 서비스는 망할때까지 한국에서만 서비스 할거야! 하는 분들은 라이트세일에서 확장하시면 될듯합니다.
저처럼 계속해서 리전이 늘어날 확률이 있다면, 기본 VPC 말고, VPC 를 생성해서 셋팅을 하신후 작업하시는걸 추천합니다.
( 당연한 이야기지만, VPC의 IP ( CIDR )은 다 다른 범위로 주셔야 합니다. )
살펴보시면 아시겠지만, 기본 VPC는 각 리전별로 다 동일한 IP ( CIDR )를 소지하고 있습니다.
이게 뭐가 문제가 되냐면, 라우팅 테이블 설정때 문제가 됩니다.
IP 별로 라우팅 테이블 설정을 해줘야하는데, 동일한 IP ( CIDR )는 설정이 불가능합니다.
VPC를 생성하신후에는 기본 VPC 와 설정을 동일하게 잡아주시고..
( 서브넷, 라우팅 테이블, 인터넷 게이트웨이.. )
VPC 메뉴에서 새롭게 생성한 VPC 를 선택하고, 마우스 오른쪽을 누르면, 메뉴들이 나오는데요.
"DNS 확인 편집", "DNS 호스트 이름 편집" 에서 체크박스가 체크되어있는지 확인합니다.
( 피어링후 설정시 필요합니다. )
서브넷 메뉴에서는 "자동 IP 할당 설정 수정" 에서 체크박스에 체크를 해주세요.
( EC2 생성할때 이 체크박스가 해제되어있으면, EC2에서 퍼블릭 접속이 불가능해집니다. )
주의사항은 이정도고, 피어링 이후에 라우팅 테이블을 작성해주시면 됩니다.
( 해당 부분은 네트워크의 전문적인 부분이니 넘깁니다. )
어찌어찌 여차여차 해서 VPC 연결이 다 재대로 되면, AWS RDS 와 AWS ElastiCache가 정상적으로 프라이빗 IP 로 접근되게 됩니다.
ps. 라이트세일의 장렬한 최후..
상위버전으로 끌어올려도 장렬하게 최후를 맞이하였길래 한컷;;
ps2. Route53의 지연 속도 기반 라우팅 ( LBR )은 리전당 딱 하나만 생성이 가능하네요.
그래서 꼼수를 부려서, 루트 도메인에 LBR 을 걸고, 와일드 카드를 별칭으로 연결하였습니다.
지연 속도 기반 라우팅에 대해서 한가지 이야기를 하자면, 기준이 사이트 로딩 속도가 아니라, ping 속도로 추정됩니다.
( 즉, 사이트가 아무리 죽어도 DNS가 응답이 미친듯이 빠르면, 죽은 사이트랑 매칭시켜줍니다. )
싱가포르 서버 부터 설정하고, 한국 서버를 설정해보니까, 한국 서버만 만들어 둔 상태에서, 한국은 계속 한국쪽으로 IP 할당해주더군요.
ps3. AWS ACM이 아닌, Let's Encrypt 를 사용하여, 구축하는경우..
sudo certbot certonly --dns-route53 -d manana.kr --deploy-hook 'systemctl reload apache2'
로 Route53 과 연계해서 발급받는것이 가능합니다.
sudo apt-get -y install certbot
certbot 이야 저렇게 설치하시면 되고..
Route53 플러그인이 있어야합니다.
sudo apt-get -y install python3-pip
sudo pip3 install certbot-dns-route53
로 플러그인을 설치합니다.
그 다음에 권한을 줘야하는데요.
https://certbot-dns-route53.readthedocs.io/en/stable/#credentials
문서를 보면 그래서 뭐 어쩌라고? 란 느낌이 강합니다.
1. IAM 메뉴로 이동해서, 사용자를 추가합니다.
키를 발급받을거기 때문에, 엑세스 키와 비밀 엑세스 키를 주는걸 선택합니다.
2. 권한은 뭘 쓸지 모르니, Route53 에 대한 전권한을 줬습니다.
아마도, Route53 에서 cname 을 추가했다 삭제했다 할거 같아서, 쓰기 읽기 등등 권한을 줬습니다.
그렇게 발급받은 KEY 는 꼭 백업하시기 바랍니다.
추후에 안보여줍니다.
3. 서버에서 ~/.aws/config 파일을 생성합니다.
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
안에 내용은 위와 같이 작성해주시면 됩니다.
기본키와 비밀키를 발급받은걸로 넣어주시면 됩니다.
각종 웹문서 보면 막 복잡한 json 파일 만들고 뭐 어디다 넣으라는데, 가장 간단하게 저렇게 넣으면 해결됩니다.
ps4. EC2 에서 get_file_contents, curl, wget 등등이 안되는 경우..
보안그룹에서 막힌겁니다.
80번 포트, 필요하다면 443 포트도 모든 접속 허용하도록 규칙을 추가하면 사용이 가능하게 됩니다.
( 인터넷 검색해보니까 모든 TCP에 대해서 0.0.0.0/0 으로 열라는 문서들도 있던데, 그러면 방화벽 쓸 필요가 없습니다. 해커 : 개이득.. )
ps5. 아마존아!!!