AWS 서버 환경을 만들어 보자
목차
1. AWS EC2
1.1 AWS 회원가입
1.2 EC2 인스턴스 생성하기
1.3 EC2 서버에 접속하기
1.4 아마존 리눅스 1 서버 생성시 꼭 해야 할 설정들
1. AWS EC2
외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필요하다. 24시간 작동하는 서버에는 3가지 선택지가 있다.
- 집에 있는 PC를 24시간 구동시킨다.
- 호스팅 서비스(Cafe24, 코리아호스팅 등)을 이용한다.
- 클라우드 서비스(AWS, AZURE, GCP)등을 이용한다.
일반적으로 비용은 호스팅이나 집PC를 이용하는 것이 저렴하다. 만약 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다.
클라우드 서비스는 인터넷(클라우드)를 통해, 서버, 스토리지, 데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것이다. 단순히 물리장비를 대여하는 것이 아니다.
예를 들어 AWS의 EC2는 서버 장비를 대여하는 것이지만, 실제로는 그 안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 지원한다.
이런 클라우드에는 몇 가지 형태가 있다.
-
Infrastructure as a Service(IaaS, 아이아스, 이에스)
- 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스이다.
- 가상머신, 스토리지, 네트워크, 운영체제 등의 IT인프라를 대여해주는 서비스로 보면 된다.
- AWS의 EC2, S3등
-
Platform as a Service(Paas, 파스)
- 앞에 언급한 IaaS에서 한 번 더 추상화한 서비스이다.
- 한 번 더 추상화 했으므로, 많은 기능이 자동화되어 있다.
- AWS의 Beanstalk(빈스톡), Heroku(헤로쿠)등
-
Software as a Service(SaaS, 사스)
- 소프트웨어 서비스를 말한다.
- 구글 드라이브, 드랍박스, 와탭 등
AWS EC2를 사용하면 1년간 무료이고, 지원되는 기능도 많고, 국내 커뮤니티나 이직시에도 배워두면 좋다.
여기서 진행하는 모든 AWS 서비스는 IaaS를 사용한다. AWS의 PaaS 서비스인 빈스톡을 사용하면 대부분의 작업이 간소화 되나, 프리티어로 무중단 배포가 불가능하다. 배포마다 서버가 다운되면 제대로된 서비스를 만들 수 없으니 무중단 배포는 필수이고 빈스톡은 사용할 수 없다.
1.1 AWS 회원가입
AWS공식 사이트로 가서 무료 계정 만들기를 선택한다. 해외결제 카드는 필수다. 개인/무료.
1.2 EC2 인스턴스 생성하기
EC2(Elastic Compute Cloud)는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버이다. 보통 AWS에서 리눅스 서버 혹은 윈도우 서버를 사용한다고 하면 EC2를 이야기한다.
- 리전을 서울로 선택한다.
- 화면 중앙에 있는 검색창에서 ec2를 검색해 EC2 서비스를 클릭한다.
- EC2 대시보드가 나오는데, 중앙의 ‘인스턴스 시작’ 버튼을 클릭한다.
- 인스턴스 생성하는 첫 단계는 AMI(Amazon Machine Image)를 선택하는 것이다.
- AMI는 EC2 인스턴스를 시작하는데 필요한 정보를 이미지로 만들어 둔 것을 말한다.
- 인스턴스라는 가상 머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지로 생각하면 된다.
- Amazon Linux AMI를 선택한다.
- 아마존 리눅스2 대신에 1을 선택한 이유는 아직 국내 자료가 1이 더 많기 때문이다.
- 보통 센토스 6 버전으로 진행되는 자료들은 아마존 리눅스 1에서 모두 사용가능하다.
- 아마존 리눅스 2는 센토스 7버전 자료들을 그대로 사용 가능하다.
- 센토스 AMI를 사용해도 되지만 아마존이 적극 지원하는 아마존 리눅스를 사용한다.
- 인스턴스 유형에서는 프리티어로 표기된 t2.micro를 선택한다. 다음 : 인스턴스 세부 정보 구성 버튼을 선택한다.
- t2는 요금 타입을 말하며, micro는 사양을 말한다. t2외에 t3도 존재하며, 이들을 보통 T시리즈라 한다. T시리즈는 보통 범용 시리즈로 불리기도 한다. 이들은 다른 서비스와 달리 크레딧이란 일종의 CPU를 사용할 수 있는 포인트 개념이 있다. 인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받게 되며, 사용하지 않을 때는 크레딧을 축적하고, 사용할 때 크레딧을 사용한다. 정해진 사양보다 더 높은 트랙픽이 오면 크레딧을 적극적으로 사용하면서 트래픽을 처리하지만, 크레딧이 모두 사용되면 더 이상 EC2를 사용할 수 없다. 트래픽이 높으면 T시리즈가 아닌 다른 시리즈를 사용한다.
- 다음 단계는 세부정보 구성인데 혼자 1대의 서버만 사용하니 별다른 설정을 하지 않고 넘어간다. 다음 : 스토리지 추가 버튼 선택
- 스토리지 선택 단계에서는 서버의 용량을 얼마나 정할 지 선택하는 단계이다. 기본 값은 8GB인데 프리티어의 최대값은 30GB까지 가능하니 최대치로 설정하고 다음 : 태그추가 버튼을 누른다.
- 태그에는 웹 콘솔에서 표기될 태그인 Name태그를 등록한다. 해당 인스턴스를 표현하는 여러 이름으로 사용될 수 있다. EC2의 이름을 붙인다고 생각하면 된다. 다음 : 보안 그룹 구성 버튼을 누른다.
- 보안 그룹은 방화벽을 말한다. ‘서버로 80 포트 외에는 허용하지 않는다’는 역할을 하는 방화벽이 AWS에서는 보안그룹으로 사용된다.
- 보안그룹 이름과, 설명을 적고 포트범위22, 소스 : 내IP로 설정하자
- 포트 항목에서 22인 경우는 AWS EC2에 터미널로 접속할 때는 이야기한다. pem 키가 없으면 접속이 안 되니 전체 오픈(0.0.0.0/0, ::/0)하는 경우를 종종 발견한다. 실수로 pem 키가 노출되면 보안에 치명적이다.
- 보안은 언제나 높을수록 좋으니 pem 키 관리와 지정된 IP에서만 ssh접속이 가능하도록 구성하는 것이 안전하다. 본인 집의 IP를 기본적으로 추가하고 카페와 같이 집 외의 장소에서 접속시에는 해당 장소의 IP를 다시 SSH규칙에 추가하는 것이 안전하다.
- 사용자 지정TC, 포트8080 추가한다. (현재 프로젝트)
- 검토, 시작
- 인스턴스로 접근하기 위해서는 pem 키(비밀키)가 필요하다. 인스턴스는 지정된 pem 키와 매칭되는 공개키를 가지고 있어, 해당 pem 키 외에는 접근을 허용하지 않는다. 일종의 마스터 키이기 때문에 절대 유출되면 안 된다. pem키는 이후 EC2 서버로 접속할 때 필수 파일이니 잘 관리할 수 있는 디렉토리로 저장한다.
- pem 키를 다운받고 인스턴스 시작 버튼을 누른다.
- 생성이 다 되면 IP와 도메인이 할당된 것을 확인할 수 있다. 인스턴스도 하나의 서비이기 때문에 IP가 존재한다. 인스턴스 생성 시에 항상 새 IP를 할당하고 같은 인스턴스를 중지하고 다시 시작할 때도 새 IP를 할당한다. 요금을 아끼려고 인스턴스를 중지 시켰다가 시작하면 IP가 변경된다. 이렇게 되면 매번 접속해야 하는 IP가 변경되어 IP를 확인하는 번거로운 상황이 되므로 고정 IP를 갖게 해야 한다.
- 왼쪽 탭에 ‘탄력적 IP’를 선택하고 ‘새주소 할당’ 한 뒤 아까 만든 인스턴스와 주소연결을 한다.
- 인스턴스 목록 페이지로 가저 해당 인스턴스의 퍼블릭, 탄력적 IP가 모두 잘 연결되었는지 확인한다.
- 탄력적 IP는 생성하고 EC2 서버에 연결하지 않으면 비용이 발생한다. 즉, 생성한 탄력적 IP는 무조건 EC2에 바로 연결해야 하며 더는 사용할 인스턴스가 없을 때도 탄력적 IP를 삭제해야 한다.
1.3 EC2 서버에 접속하기
오랜 시간 접속이 안 되거나, 권한이 없어서 안 된다고 메시지가 나오면 - HostName 값이 정확히 탄력적 IP로 되어있는지 확인 - EC2 인스턴스가 running 상태인지 확인 - EC2 인스턴스의 보안그룹 -> 인바운드 규칙에서 현재 본인의 IP가 등록되어 있는지 확인
외부 서버로 SSH 접속을 하려면 매번 다음과 같은 긴 명령어 입력이 필요하다.
ssh -i pem 키 위치 EC2의 탄력적 IP 주소
쉽게 ssh 접속을 하려면 pem파일을 ~/.ssh로 복사한다. 여기로 pem을 옮기면 ssh실행 시 pem 키 파일을 자동으로 읽어 접속을 진행한다.
cp pem 키를 내려 받은 위치 ~/.ssh
복사되었다면 pem 키의 권한을 변경합니다.
chmod 600 ~/.ssh/pem키의 이름
권한을 변경했다면 pem 키가 있는 ~/.ssh 디렉토리에 config 파일을 생성한다.
vim ~/.ssh/config
# 주석
Host 본인이 원하는 서비스명
HostName ec2의 탄력적 IP주소
User ec2-user
IdentityFile ~/.ssh/pem키 이름
:wq로 저장 종료한다.
생성된 config 파일은 실행 권한이 필요하므로 권한 설정을 다음과 같이 한다.
chmod 700 ~/.ssh/config
실행 권한까지 설정했으면 다음의 명령어로 접속한다.
ssh confing에 등록한 서비스명
1.4 아마존 리눅스 1 서버 생성시 꼭 해야 할 설정들
자바 기반의 웹 애플리케이션(톰캣과 스프링부트)가 작동해야 하는 서버들에서 필수로 해야 하는 설정들이다.
- Java8 설치 : 현재 프로젝트의 버전을 설치한다.
- 타임존 변경 : 기본 서버의 시간은 미국 시간대이다. 한국 시간대로 설정해야 한다.
- 호스트네임 변경 : 현재 접속한 서버의 별명을 등록한다. 실무에서는 한 대의 서버가 아닌 수십대의 서버가 작동되는 데, IP만으로 어떤 서버가 어떤 역할을 하는지 알 수 없다. 이를 구분하기 위해 보통 호스트 네임을 필수로 등록한다.
-
java8 설치
- 자바8 설치
- sudo yum install -y java-1.8.0-openjdk-devel.x86_64
- 인스턴슽의 자바 버전 변경
- sudo /usr/sbin/alternatives —config java
- 2 입력하여 java8 선택
- 자바7 제거
- sudo yun remove java-1.7.0-openjdk
- 자바 버전 확인
- java -version
- 자바8 설치
-
타임존 변경
- EC2 서버의 기본 타임존은 UTC이다 한국과는 9시간 차이가 발생한다.
- sudo rm /etc/localtime
- sudo ln -s /usr/share/zoneinfo/Asia/Seoul/etc/localtime
- data 명령어로 타임존이 KST로 변경된 것을 확인할 수 있다.
-
Hostname 변경
-
각 서버가 어떤 서비스인지 표현하기 위해 HOSTNAME을 변경하겠다.
-
편집파일 열기
- sudo vim /etc/sysconfig/network
-
화면에 노출되는 항목 중 HOSTNAME으로 되어있는 부분을 본인이 원하는 서비스명으로 변경
-
변경 후 서버 리부팅
- sudo reboot
-
변경된 HOSTNAME 확인
-
호스트 주소를 찾을 때 가장 먼저 검색해 보는 /etc/hosts 에 변경한 hostname등록
-
sudo vim /etc/hosts
-
127.0.0.1 등록한 hostname
-
:wq
-
curl 등록한 hostname
- 접근이 안 된다는 메시지가 나오면 등록 성공한 것이다.
- 아직 80포트로 실행된 서비스가 없음을 의미한다. curl 호스트 이름으로 실행은 잘 되었음을 의미한다.
%% Amazon Linux 2 사용시 설정 sudo hostnamectl set-hostname 원하는이름.localdomain
-
-