본문 바로가기
사이드 프로젝트/뉴스구독 웹서비스

aws whats'new 뉴스레터 업그레이드3 | Flask웹 aws배포(Route53)

by 카프리썬 2021. 5. 12.
728x90

잠깐, 생각해보니

2개의 프로그램이 시간차를 두고 진행이 되어야 하는 거잖아?

언제든지 구독이메일을 받을수 있도록 웹프로그램은 계속 켜져있고, 

그렇게 내 서버에 메일을 저장해두고 있다가

매주 화요일 오전10시가 되면, 이제 메일전송 서버가 동작되는거니까! 동시에 진행되는 구조, 하나의 flow는 아니다!

 

Flask웹 aws배포

그래서 일단 웹개발은 어느정도 완성이 되었다고 생각이 들어서 지금까지 만든 웹을 aws에 배포하려고 한다.

구글링해보니 배포를 하는 방법은 몇가지가 있었다.

1. ec2에서 git으로 clone하기

2. beanstalk사용하기

+CI/CD 공부해보기

 

일단 AWS인프라를 PUBLIC하게 구성해보았다. 

1. VPC 생성 : test-vpc

2. IGW 생성

3. igw를 vpc에 attach한다.

4. Public Subnet을 생성한다. VPC 안에서 구역을 나누는거라고 보면 된다.

5. 라우팅테이블을 설정한다.  라우팅테이블에 IGW를 넣는걸 잊지말자! 

외부랑 통신을 하려면, IGW를 통해서 나가야하니까 꼭 필요하다

6. EC2 생성(Ubuntu)

그리고 이렇게 생성한 VPC,서브넷을 선택해서 EC2를 생성한다. 나는 OS로 우분투를 선택했다.

7. EC2 연결 

어차피 PUBLIC 단에 있기 때문에 PUBLIC IP 주소를 가지고 접근하면 된다.

아, SSH클라이언트에서 직접 접근하는 방법이 있긴 하다.

다만 위에 나와있는 경우 chmod는 리눅스 명령어이다. 

그래서 윈도우에서 인스턴스에 접근할 경우 아래의 블로그들을 참고했다.

 

나는 moba 프로그램 써서 접속함 히히

 

윈도우에서 ssh로 인스턴스 접속 참고 : lelana.tistory.com/101

 

8.Flask웹 배포(git clone)

아무튼 이제 ec2에 접속했으니, 개발서버(내 로컬서버)에 있는 웹을 지금 ec2에 배포해볼 것이다.

그냥 간단하게 git으로 끌어왔다.그리고 이 안에서 python을 실행시켰다.

9. 패키지 설치

아, 로컬에서 사용했던 python환경이 다르니까 똑같이 패키지들을 다시 설치해야한다..

-----이런 번거로운걸 해주는게 도커일까----

ec2안에서 설치한 패키지들

sudo apt-get update
sudo apt-get install python3-pip

 

pip3 install pymongo

pip3 install flask

----번거롭다 번거로워-------

 

10.python 프로그램 실행

아아아,, 보안그룹에서 변경해줘야햐 한다.

인바운드 규칙으로 5000포트로 들어올 수 있는 규칙을 추가해줘야한다.

그 결과, public ip에 내가 개발한 웹을 배포할 수 있었다.


하지만 여기에 2가지 문제가 있다.

1. ip주소가 바뀐다는 점이다. -> EIP생성 -> ELB생성

EC2를 재기동하게 되면 PUBLIC IP는 바뀐다. 그래서 고정IP를 지정한다. EIP를 생성해서 이 EC2에 연결해주는 것이다.

비용이 조금 들것 같지만, 프리티어일때는 EIP가 무료이다. 다만 늘 RUNNING된 EC2에 연결되어야 한다.

 

탄력적ip를 ec2에 연결하기

 

 

2. 도메인이 필요하다. -> 가비아에서 도메인구매 -> ROUTE53 도메인등록

사용자들이 IP를 외워서 페이지에 들어오는게 아니니까 도메인이 필요하다.

사실 aws를 쓰기로 작정한 만큼 aws에서 도메인을 살 수도 있었지만, 뭔가 아까웠다랄까....

 

▼ 아래는 무료 도메인 쓰려다가 뻘짓한 썰..

더보기

여기에서 무료도메인을 받았다. 하지만 결과적으론 실패..결국 가비아가서 500원주고 shop 삿다.,..

 

FreeDNS - Free DNS - Dynamic DNS - Static DNS subdomain and domain hosting

Free DNS Hosting, Dynamic DNS Hosting, Static DNS Hosting, subdomain and domain hosting. Dynamic update demonstration example (v2 interface) [~] $ curl https://sync.afraid.org/u/CyTXMbtq5cPnLjEg5vKHTPDE/ Updated demo.freshdns.com from 107.170.238.X to 50.2

freedns.afraid.org

'무료도메인' 을 발급받았다. 새로 발견한 홈페이지인데 서브도메인들이 재미있는게 많고 꽤나 기능이 훌륭하다.

 

FreeDNS 홈페이지 사용하기 참고 : lelana.tistory.com/101

 

처음에 이메일로 간단하게 가입을 할 수 있다. 그리고 가입인증 메일을 받아야 가입성공이다.

그런데 외국 홈페이지라 그런지 네이버메일은 안되는것 같았다. 구글메일로 다시하니 금방 해결되었다.

 

그리고 왼쪽에서 [For Members] 탭중에  [Dynamic DNS] 부분으로 서브도메인까지 포함한 무료도메인을 만든다.

내가 원하는 도메인 이름을 짓고, Destination은 ec2의 public ip를 지정하면 된다.

 

띠용, 근데 이상하다. 계속 destination이 내 공유기 ip번호로 바뀐다. 

아니 direct url을 누르면 등록된 ip가 바뀐다..!! 이상하네 

그래서 그 주소로 들어가면, 개발한 웹이 아니라 공유기 홈페이지가 나온다.. 

 

 

도메인 구매, 가비아

무튼 가비아 가서 결국 도메인을 샀다.

도메인이름에는 혹시몰라서 AWS라는 이름을 넣진 않았다.

고작 550원인데 뭔가 아깝다랄까.. 이걸? 사람들이 봐주기나 할까? 그래서 유용하게 쓰긴 할까? 이런생각으로

운영비용만 aws인프라 비용만 드는건 아닐까? 마이너스만 생기는거 아닐까..? 휴

 

▼ 한달에 얼마나 나오는지 비용 계산해본것, 한달기준으로 만원정도 나오겠네......

더보기

그래서 먼저 비용을 먼저 생각해봤다. 5월한달동안만 운영한다고 했을때 약 한달간 기준으로.

- Route53에 호스팅 등록비용 500원정도? 

- 도메인 구입 비용 500원

- EC2 켜놔서 하루에 24시간, 18일 하면 432시간 -> 시간당 비용으로쳐서 6.2달러?  7천원?!

- 고정IP, EIP는 프리티어에서 1개 무료라네? 

오 그럼 한달동안 최대로 쳐서 만원정도 나가는 꼴이 된다. 

비용 찾아보면서 비용관련 한 내용을 정리했다. 

2021.05.12 - AWS FreeTier 과금은? | AWS 비용 2탄, 과금대상 특이사항

 

AWS FreeTier 과금은? | AWS 비용 2탄, 과금대상 특이사항

2021.03.21 - AWS FreeTier 어디까지 무료인가?| 프리티어 사용량 AWS FreeTier 어디까지 무료인가?| 프리티어 사용량 AWS에서 가장 뭐니뭐니해도 중요한건 뭐다? 요 To the 금 프리티어라고해서 그냥 1년내내

pearlluck.tistory.com

 

도메인등록, Route53

이제 가비아에서 받은 도메인에 나의 EC2 ip와 연결해서 route53에 등록하면 된다. 이떄 IP는 고정IP이다. 

 

즉, 일반 사용자들이 what-new.shop 이라는 도메인으로 들어오면

EC2의 IP를 통해 내 웹페이지에 접속할 수 있게 되는 작업이다. 

 

Route53은 aws에서 제공하는 DNS(Domain Name System) 이다.

그러니까 도메인이나 호스트명을 IP주소로 변환해주는 서비스인것이다.  

 

1. Hosted Zone생성

하나의 호스트존을 등록하면 비용은 월에 한화로 500원정도이다. 

 

2. 가비아에서 ns레코드 등록

위에 있는 NS유형의 값을을 가비아의 네임서버에 등록한다. 

대신, 레코드값의 맨 마지막에 있는 .을 지우고 입력해야한다

 

3. 레코드 생성

이 도메인에 어떤ip, 어떤 대상을 연결할 것인지 지정하는 작업이다.

 

이때 레코드 유형으로 A 레코드와 CNAME이 있다. 

A 레코드 : 직접 ip를 지정하는 형식으로, FQDN에 대한 IP 주소정보를  의미한다. 

CNAME : 별칭으로 지정하는 형식으로, FQDN에 대한 별칭을 의미한다. 

A레코드 형식으로 지정 

우리는 ec2랑 연결된 고정ip인 eip가 있으니까, a 레코드의 값으로 eip를 넣으면 끝나겠지~

엥, 그런데 아니다!!

 

그러고보니 내 웹은 포트가 5000번이다.

이렇게 route53에 a레코드에 eip를 지정한다고 한들,

http프로토콜로 들어오는 5000번 포트를 알아야 내 웹으로 들어오게 되는데 이건 어떻게하지?

 

다시 미궁속으로 빠졋다... 결국 elb를 넣어야하는 것인가보다..

 

 

 

 

참고 

가비아에서 발급받은 도메인 ROUTE53에 등록하기

hannut91.github.io/blogs/route53/gabia

 

가비아에서 구매한 도메인을 AWS Route53에서 호스팅하기 – Yunseok's Dev Blog

가비아에서 구매한 도메인을 AWS Route53에서 호스팅하기

hannut91.github.io

 

A레코드와 CNAME으로 ROUTE53 도메인 등록 테스트해보기

medium.com/@labcloud/aws-route-53-%EC%97%90-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%93%B1%EB%A1%9D%ED%95%98%EC%97%AC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-e2d9da2e864d

 

AWS Route 53 에 도메인 등록하여 사용하기

Route 53은 AWS에서 제공하는 관리형 DNS (Domain Name System)서비스입니다. DNS 서비스는 아시다시피 도메인 또는 호스트명을 IP로 변환해주는 서비스입니다. DNS 서비스는 계층적으로 구성되어 있어, 특

medium.com

 

반응형