IT 개발/AWS

4. AWS EC2(1) - 인스턴스 생성 및 접속

미웡할꺼야 2020. 12. 11. 18:32

[참고] AWS>제품>Amazon EC2>요금>온디맨드

[참고] AWS>설명서>Amazon EC2>Linux 인스턴스용 사용 설명서

[참고] CloudPing.infoCloudPing.cloud

[참고] ubuntu Packages Search

[참고] AWS 서울 vs 도쿄 리전 속도 및 가격 비교 | 오늘부터 seapy는

[참고] [AWS] EC2 인스턴스(ubuntu) 생성 및 연결 - JJo의 개발 기록공간

[참고] iPuTTY/iPuTTY - GitHub

 

[이전] 3. AWS S3 - 버킷 생성 및 연동

[다음] 5. AWS EC2(2) - Utuntu 자바(JDK, JRE), 톰캣 설치 및 war파일 배포

 

운영체제(OS) : Window 10 64bit
개발도구 : PuTTY

AWS 프리 티어 범위에서 진행.

 

Amazon EC2이란 무엇입니까?

Amazon Elastic Compute Cloud(Amazon EC2)는 Amazon Web Services(AWS) 클라우드에서 확장 가능 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하면 하드웨어에 선 투자할 필요가 없어 더 빠르게 애플리케이션을 개발하고 배포할 수 있습니다. Amazon EC2를 통해 원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능합니다. 또한 Amazon EC2는 요구 사항이나 갑작스러운 인기 증대 등 변동 사항에 따라 신속하게 규모를 확장하거나 축소할 수 있어 서버 트래픽 예측 필요성이 줄어듭니다.

 

Amazon EC2의 기능

Amazon EC2는 다음의 기능을 제공합니다.

  • 인스턴스: 가상 컴퓨팅 환경.

  • Amazon 머신 이미지(AMI): 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿으로 인스턴스를 쉽게 만들 수 있습니다.

  • 인스턴스 유형: 인스턴스를 위한 CPU, 메모리, 스토리지, 네트워킹 용량의 여러 가지 구성 제공.

  • 키 페어를 사용하여 인스턴스 로그인 정보 보호(AWS는 퍼블릭 키를 저장하고 사용자는 개인 키를 안전한 장소에 보관하는 방식).

  • 인스턴스 스토어 볼륨: 임시 데이터를 저장하는 스토리지 볼륨으로 인스턴스 중단, 최대 절전 모드로 전환 또는 종료 시 삭제됨.

  • Amazon Elastic Block Store(Amazon EBS), 즉 Amazon EBS 볼륨을 사용해 영구 스토리지 볼륨에 데이터 저장.

  • 인스턴스와 Amazon EBS 볼륨 등의 리소스를 다른 물리적 장소에서 액세스 할 수 있는 리전  가용 영역.

  • 보안 그룹을 사용해 인스턴스에 연결할 수 있는 프로토콜, 포트, 소스 IP 범위를 지정하는 방화벽 기능.

  • 탄력적 IP 주소(EIP): 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소.

  • 태그: 사용자가 생성하여 Amazon EC2 리소스에 할당할 수 있는 메타데이터.

  • AWS 클라우드에서는 논리적으로 격리되어 있지만 원할 때마다 고객의 네트워크와 간편히 연결할 수 있는 가상 네트워크인 Virtual Private Clouds(VPC).


인스턴스 생성

1) AWS Management Console > EC2 검색 또는 선택.

 

AWS Management Console > EC2 검색 또는 선택


2) 리전 위치 확인 >  EC2 Console > 인스턴스 > 인스턴스 > 인스턴스 시작 클릭.

  • 다른 서비스와 EC2를 연동하여 사용 시 현재 위치와 리전 위치가 다르면 프리 티어 계정일 경우 속도 차이만 발생하지만 아닐 경우 속도와 요금의 차이가 발생한다.
    (속도 비교 - CloudPing.info, CloudPing.cloud)

 

 

EC2 Console > 인스턴스 > 인스턴스 > 인스턴스 시작


3.1) 좌측_프리 티어만=체크 > 원하는 AMI 선택.

  • 프리 티어용은 AMI아래 [프리 티어 사용 가능]이라고 나와있다.

  • Windows Server : GUI(Graphical User Interface), 처리 속도 느림.

  • Ubuntu Server : CLI(Commend-Line Interface), 처리 속도 빠름.

  • UbuntuOS_APT(Advanced Packaging Tool) 활용할 경우 참고
    Ubuntu Server 20.04 LTS(focal) : openjdk-[8 11, 13, 14]-[jdk, jre](참고), apache2(참고), tomcat9(참고).
    Ubuntu Server 18.04 LTS(bionic) : openjdk-[8, 11]-[jdk, jre](참고), apache2(참고), tomcat[8, 9](참고).
    Ubuntu Server 16.04 LTS(xenial) : openjdk-[8, 9]-[jdk, jre](참고), apache2(참고), tomcat[7, 8](참고).

  • 따로 설치하면 여러가지로 할 게 많아 피곤해지므로 APT를 활용하는 것이 좋다.

  • 주의) 프리 티어용은 전부 64bit(x86)이다.

인스턴스 시작 - 단계 1: Amazon Machine Image(AMI) 선택


3.2) t2.micro=체크 > 다음: 인스턴스 세부 정보 구성 클릭.

  • 프리 티어용유형에서 [프리 티어 사용 가능]이라고 나와있다.

인스턴스 시작 - 단계 2: 인스턴스 유형 선택


3.3) 기본값 유지 , 종료 방식=종료 선택 , 종료 방지 기능 활성화=체크 > 다음: 스토리지 추가 클릭.

  • 종료 방식 : [중지 | 종료], 인스턴스 종료=인스턴스 삭제. 잠깐 중지하고 시작할 일이 생길 수 있으니 종료를 권장한다(참고).

  • 종료 방지 기능 활성화 : 실수로 종료(삭제)하는 것을 방지.
    종료 방지 기능 비활성화 : EC2 Console > 인스턴스 > 인스턴스 > 종료할 인스턴스 체크 > 작업 > 인스턴스 설정 > 종료 방지 기능 변경 > 종료 방지_활성화=체크 해제 > 저장.

  • 필자는 설정 시 요금 발생에 대해 잘 몰라 기본값에서 2개만 건드렸다.

인스턴스 시작 - 단계 3: 인스턴스 유형 선택


3.4) 크기=[8~30] , 볼륨 유형=[범용 SSD(gp2), 마그네틱(standard)] , 종료 시 삭제=체크 > 다음: 태그 추가 클릭.

  • 크기(GiB) : EBS 볼륨 크기는 0 또는 사용된 스냅샷의 크기보다 커야 함. 인스턴스 생성 시 기본값=8로 되어있음(참고).

  • 볼륨 유형 : 참고.

  • 종료 시 삭제 : 인스턴스 종료 시 종속되어 있는 EBS 볼륨 삭제. 미체크 시 인스턴스 종료(삭제)할 때 EBS 볼륨은 남아있기에 인스턴스를 삭제했다고 하더라도 요금이 나간다(참고).

인스턴스 시작 - 단계 4: 스토리지 추가


3.5) 태그 추가 클릭 > 키=Name , 값 작성 , 인스턴스=체크 , 볼륨=체크 > 다음: 보안 그룹 구성 클릭.

  • 태그(선택 사항). 보안 그룹이 여러 개일 경우 다른 서비스에서 참조 시 태그 값으로 구분하기에 편의상 태그를 추가하는 것이 좋다.

  • : "Name"으로 작성해야 보안 그룹 목록에서 태그 값으로 나와 구분이 가능하다. 키를 다른 이름으로 작성 시 공백으로 나온다.

  • : [어디에 어떻게 쓰이는 무엇인지 + 보안 그룹]으로 작성하는 것이 좋다.

인스턴스 시작 - 단계 5: 태그 추가


3.6)

새 보안 그룹 생성 : 보안 그룹 이름 작성 , 설명(선택) 작성 > 규칙 추가 클릭 > 유형 , 프로토콜 , 포트 범위 , 소스 , 설명(선택) 설정 > 검토 및 시작 클릭.

기존 보안 그룹 선택 : 추가할 보안 그룹 체크 , 검토 및 시작 클릭.

  • 보안 그룹은 하나 이상의 인스턴스에 대한 트래픽을 제어하는 가상의 방화벽 역할. 즉, 배포 후 해당 Web Server에 접근 허용 규칙을 만드는 것.

  • 새 보안 그룹 생성인바운드 규칙만 설정 가능, 아웃바운드 규칙은 default로 모든 트래픽으로 되어있음.

인스턴스 시작 - 단계 6: 보안 그룹 구성

 

  • 새 보안 그룹 생성사용자 정의 TCP 유형의 위치 무관 소스로 규칙 추가 시 아래 그림과 같은 경고 알람이 나오고 마지막 단계에서 인스턴스 생성 실패 에러가 발생된다.

  • 기존 보안 그룹 선택 시도 같은 경고가 나오나 정상적으로 인스턴스가 생성된다.

  • 버그인지 뭔지 6단계에서 문제가 되는 규칙을 지워 경고 알람을 사라지게 해도 마지막에 에러가 발생된다. 고로 처음부터 기존 보안 그룹을 선택하거나 위 그림과 같이 SSH, HTTP, HTTPS 유형만 추가하여 진행하는 것이 좋다.

인스턴스 시작 - 단계 6: 보안 그룹 구성 경고
인스턴스 시작 - 단계 7: 인스턴스 시작 실패


3.7) 1단계 ~ 6단계 내용 확인 > 시작하기 클릭.

 

인스턴스 시작 - 단계 7: 인스턴스 시작 검토


3.8) 새 키 페어 생성 선택 , 키 페어 이름 작성 > 키 페어 다운로드 클릭 > 인스턴스 시작 클릭.

  • Key Pair란 생성한 인스턴스에 접속하기 위한 비밀번호 파일. Key Pair 이름을 입력해서 저장하거나 이미 있는 경우 Key Pair 선택 후 인스턴스 시작 클릭.

  • Key Pair를 생성하는 경우 pem파일로 로컬에 비밀번호 파일을 저장한다. PuTTY, Xshell을 이용해 서버에 접속할 때 필요한 비밀번호 파일.

  • 절대 잃어버리면 안 된다. 실수로 삭제하거나 잃어버릴 시 인스턴스부터 다시 만들어야 한다. Key Pair 분실 시 참고(방법1방법2).

인스턴스 시작 - 단계 7: 기존 키 페어 선택 또는 새 키 페어 생성
인스턴스 생성 완료


탄력적 IP 주소 연결

6) 할당된 탄력적 IP 주소 체크 > 작업 > 탄력적 IP 주소 연결 클릭.

  • 인스턴스가 중지/시작되는 경우 퍼블릭 IPv4 주소가 매번 변경되는데 탄력적 IP(정적 IPv4) 주소를 인스턴스에 연결하면 주소가 고정되어 항상 같은 주소로 접근할 수 있다.

  • AWS 프리 티어에서 탄력적 IP 1개를 무료로 사용할 수 있다. 하지만 사용 중인 인스턴스에 탄력적 IP를 연결해두지 않으면 요금이 청구된다(참고).

할당된 탄력적 IP 주소 체크 > 작업 > 탄력적 IP 주소 연결


7) 리소스 유형=인스턴스 , 인스턴스=인스턴스_태그 값 , 프라이빗 IP 주소=인스턴스_프라이빗 IPv4 주소 > 연결 클릭.

  • 인스턴스 SelectBox를 클릭하면 인스턴스 ID(인스턴스 태그 값) 형태로 나온다. 인스턴스가 여러 개일 경우 인스턴스 ID로 찾으려고 하면 힘들기에 웬만하면 인스턴스 태그를 지정하는 것이 좋다.

  • 프라이빗 IP 주소_SelectBox를 클릭하면 하나밖에 나오지 않는다.

탄력적 IP 주소 연결 - 인스턴스에 탄력적 IP 주소 연결


8) 인스턴스에 탄력적 IP 주소 연결 확인.

 

인스턴스에 탄력적 IP 주소 연결 확인


PuTTY를 활용한 인스턴스 접속

9) PuTTY 검색 후 홈페이지 접속 > Download PuTTY_here 클릭.

  • PuTTY 한글 버전여기로 들어간 뒤 iPuTTY-x.xx.x-x64-ko.zip를 받으면 된다.

PuTTY 검색 후 홈페이지 접속 > Download PuTTY_here 클릭


10) 본인의 운영체제(OS)_시스템 종류 확인 > Alteernative binary files > putty.exe 다운로드, puttygen.exe 다운로드.

  • 설치형도 있지만 미설치형(포터블 프로그램)을 다운로드하는 게 편하다.

putty.exe 다운로드, puttygen.exe 다운로드


11) puttygen.exe 실행 > Parameters-RSA 선택 > Load 클릭 > 파일 유형=All Files (*.*) 선택 > pem파일 선택 > 알림창 "PuTTYgen Notice" 확인 클릭(참고).

  • 알림창 "PuTTYgen Notice" 내용 : 외부 키 가져오기 성공(OpenSSH SSH-2 개인 키(이전 PEM 형식)). 이 키를 PuTTY와 함께 사용하려면 "Save private key" 명령을 사용하여 PuTTY의 고유한 형식으로 저장해야 한다.

puttygen.exe 실행 > Parameters-RSA 선택 > Load 클릭 > 파일유형-All Files (*.*) 선택 > pem파일 선택 > 알림창 "PuTTYgen Notice" 확인 클릭


12) Save private key 클릭 > 알림창 "PuTTYgen Warning" 예 클릭 > 파일명과 저장 위치 지정 후 저장 클릭 > ppk파일 생성 완료(참고).

  • 알림창 "PuTTYgen Warning" 내용 : 이 키를 보호하기 위해 암호 없이 저장하시겠습니까?

  • Key passphrase, Confirm passphrase를 통해 ppk파일의 암호를 지정할 수 있다.

Save private key 생성
ppk파일 생성 완료


13) SSH로 정상적으로 접속하기 위해선 다운로드한 putty.exe 실행 > Connection > SSH > Auth 클릭 > Borwse... 클릭 > ppk파일 가져오기.

 

putty.exe 실행 > Connection > SSH > Auth 클릭 > Borwse... 클릭 > ppk파일 가져오기

 

  • ppk파일을 가져오지 않고 접속 시 아래 그림과 같이 Error가 발생돼서 접속이 불가하다.

  • 알림창 "PuTTY Fatal Error" 내용 : 지원되는 인증 방법이 없음(서버 전송: 공용 키).

ppk파일 미지정 시 에러


14) Session 클릭 > Host Name (or IP Address) : AMI 이름@퍼블릭 IPv4 DNS(or주소) 입력 > Port : 22 입력 > Connection type : SSH 선택 > Saved Sessions 이름 입력 > Save 클릭 > Open 클릭 > 예(Y) 클릭(Linux에 인스턴스 연결, 인스턴스에 대한 정보 가져오기).

  • 매번 ppk파일 가져와서 Session을 설정하여 들어가기 귀찮으니 Save를 하여 필요할 때마다 Load 하여 Open 하면 된다.

  • AMI 이름 : 각 Linux 인스턴스는 기본 Linux 시스템 사용자 계정으로 시작됩니다. 기본 사용자 이름은 인스턴스를 시작할 때 지정된 AMI에 의해 결정된다. 연결하려는 인스턴스의 인스턴스 세부 정보 > AMI 이름에서 확인 혹은 설명서 참고.

  • Host Name (or IP address) : 연결하려는 인스턴스의 인스턴스 요약 > 퍼블릭 IPv4 주소(or DNS)에서 확인.

  • 알림창 "PuTTY Security Alert" 내용 : 이 호스트를 신뢰하는 경우 예를 눌러 PutTY의 캐시에 키를 추가하고 연결을 계속하십시오. 캐시에 키를 추가하지 않고 한 번만 연결하려면 아니요를 누르십시오. 이 호스트를 신뢰할 수 없으면 취소를 눌러 연결을 끊으십시오.

AMI 이름 및 Host Name(or IP Address) 확인
PuTTY를 통한 인스턴스 접속
PuTTY를 통한 인스턴스 접속 성공

 

  • Host Name 입력 시 AMI 이름은 생략이 가능하다. 생략하고 접속 시 아래 그림처럼 login as: ubuntu를 입력하면 된다.

AMI 이름 생략 시 인스턴스 접속


15) cat /etc/issue 입력.

 

Ubuntu 버전 확인


마무리

요약 : 인스턴스 생성 > 탄력적 IP 할당 및 연결 > 인바운드 규칙 확인 > PuTTY를 통한 인스턴스 접속.

 

인터넷에 사람들이 한 EC2 인스턴스 생성에 대한 내용을 따라 하다 시간을 많이 날렸다. 차라리 잘 못 알아듣더라도 AWS 설명서를 보다가 정 모르겠으면 인터넷을 참고하는 게 좋을 것 같다.

 

프리 티어 계정이어도 EC2를 어떻게 활용하냐에 따라 요금이 발생할 수 있으니 인스턴스 생성탄력적 IP를 할당해줘야 한다.

 

Ubuntu Server를 기준으로 말하자면 인스턴스 생성 후 따로 SDKServer를 다운받아 쓴다면 상관없지만 Ubuntu APT를 이용한다면 인스턴스 생성 시 고려사항으로 본인이 프로젝트에 사용한 개발환경을 Ubuntu Server에도 똑같이 세팅해줘야 하기 때문에 버전별 Ubuntu APT 라이브러리를 확인하고 선택해야 한다.

 

Ubuntu APT 라이브러리를 활용하면 환경변수서비스 등록까지 자동으로 세팅해주기에 편하다. 따로 설치할 경우 저 모든걸 수동으로 해야된다.

필자는 Linux는 처음이고 CLI도 거의 처음이다시피 안 만져봐서 잘 모르는 상태로 따로 설치했다가 제대로 돌아가지도 않고 해결하려고 대략 4시간 동안 시간만 날려 개빡쳐서 Ubuntu Server 20.04 인스턴스를 삭제, Ubuntu Server 18.04 인스턴스로 다시 생성 및 연결, Ubuntu Server 환경세팅, war파일 배포를 30분만에 처리했다....ㅠㅠ

 

 

[이전] 3. AWS S3 - 버킷 생성 및 연동

[다음] 5. AWS EC2(2) - Utuntu 자바(JDK, JRE), 톰캣 설치 및 war파일 배포