[AWS] EC2 서버 구축하기

programmeaow·2022년 10월 18일
0

Amazon AWS

목록 보기
1/1

AWS의 EC2를 이용하여 Jupyter Notebook 환경 구축의 과제를 받았다.

먼저 AWS 홈페이지에 로그인 하면 다음과 같은 메뉴를 볼 수 있다.

좌측 메뉴의 컴퓨팅 -> EC2를 선택한다.

EC2로 들어가게 되면 다음과 같은 화면이 나오게 되는데, 여기서 우측 상단의 위치가 "서울"로 되어있는지 반드시 확인해야 한다.

위치를 확인한 뒤 리소스 - 인스턴스(실행중) 혹은 좌측 메뉴의 인스턴스를 눌러서 인스턴스를 생성할 수 있다.
그 전에, 계정 생성 후 최초 작업이라면 VPC를 생성 해주어야 한다.




💡 0. VPC 생성

EC2를 생성하기 위해서는 VPC와 서브넷이 필수이다. 따라서 VPC를 먼저 생성 해주어야 한다.

❓ VPC와 서브넷

VPC와 서브넷이 존재하지 않는 EC2 인스턴스는 서로 거미줄처럼 연결된 뒤 인터넷과 연결되는데, 
이런 경우에는 시스템이 복잡해지고 인스턴스를 추가하면 모든 인스턴스를 수정 해야하는 번거로움이 생긴다.
VPC를 적용하면 VPC별로 네트워크를 구성할 수 있는데 따라서 EC2를 생성하려면 VPC와 서브넷이 필요하다.

우측 상단의 VPC생성 으로 들어가서 VPC설정VPC 등 으로 바꾸게 되면 다음과 같은 화면으로 전환된다.



💡 1. 인스턴스 생성하기

EC2로 돌아가서 인스턴스 시작 버튼을 누르면 인스턴스 생성 창으로 이동한다.
다음 화면을 천천히 살펴보자.

1-1. 서버 이름 설정

이름 및 태그 란에 사용할 서버 이름을 입력해주면 된다.

1-2. AMI(Amazon Machine Image) 선택

AMI는 인스턴스 생성에 필요한 모든 것을 담고 있는 템플릿 이미지를 말한다.
우분투(ubuntu)를 선택하여 EC2를 생성할 것이다.

하단의 콤보박스에서 서버 세부 스펙을 변경하여 생성이 가능하다.
ex ) GPU이용 등

1-3. 인스턴스 유형 설정

서버 이용 목적에 따라 메모리 등을 설정해서 이용할 수 있다.
나는 테스트 용도로 생성하는 것이라 프리티어로 선택하여 진행했다.

🔑 1-4. 키 페어 (중요!)

키 페어는 분실하지 않도록 조심해야 한다.

해당 키를 통해 서버에 접속하는 것이기 때문에 공개적으로 올린다면 모든 사람이 접속 가능하니 반드시 유의한다.

새 키 페어 생성을 클릭하여 키를 생성한 뒤 내 로컬 드라이브에 저장해두면 된다.

1-5. 네트워크 설정

아까 생성해두었던 VPC와 서브넷 정보를 이 곳에서 등록해야 서버 생성이 가능하다.
추가 설정을 마친 후, 좌측의 "인스턴스 시작"을 누르면 성공적으로 인스턴스가 생성된 것을 확인할 수 있다.



💡 2. 탄력적 IP 생성 및 연결

서버를 생성하면 해당 서버는 프라이빗 IP 주소만을 갖게 된다.

인터넷에서 접속하기 위해 퍼블릭 IP 주소를 발급받아야 하는데, 좌측 메뉴의 네트워크 -> 탄력적 IP에서 생성이 가능하다.

2-1. IP 생성

탄력적 IP 주소 할당 을 눌러서 생성하면 된다.
아래의 할당 버튼을 누르면 바로 생성이 완료되며 따로 추가 설정하지 않고 바로 생성했다.

2-2. IP 연결

다시 탄력적 IP 탭으로 돌아가면 IP가 생성된 것을 볼 수 있다.
이제 해당 IP를 내가 생성한 서버와 연결 해주어야 한다.
IP를 선택한 뒤 작업 > 탄력적 IP 주소 연결을 클릭한다.
인스턴스에 연결할 것이므로 리소스 유형은 인스턴스,
하단에서 인스턴스를 선택한 뒤 해당 인스턴스의 프라이빗 IP 주소를 입력하면 연결할 수 있다.

EC2 인스턴스 정보를 확인하여 잘 연결 되었는지 확인하고 마무리한다.

표시한 곳에 연결 정보가 등록된 것을 확인 가능하다.



✔️ 인스턴스 연결하기

D 드라이브에 AWS 폴더를 생성하여 해당 경로에 키를 저장 해두었다.
키는 .pem 파일로 생성되어 저장된다.

EC2 인스턴스 정보로 이동하여 서버를 연결해보자.

인스턴스를 선택한 뒤 연결 버튼을 눌러준다.

SSH 클라이언트를 선택하고 아래의 ssh -i~~~ 명령문을 복사해준다.

윈도우는 아까 저장해둔 키를 관리자만 사용할 수 있도록 권한 설정을 변경해줘야 하고, MAC의 경우 명령어를 통해 바로 실행 가능하다.

키 권한 설정 변경하기

D:\AWS 폴더에 저장한 키 파일을 우클릭 > 보안 > 고급으로 들어간다.

네모 박스에 있는 Users가 포함된 모든 항목을 삭제 해주어야 한다.

  1. 상속 사용 안함 > 명시적 사용 권한으로 변경
  2. Users가 포함된 모든 항목 삭제
    해당 순서대로 진행한 뒤 확인 버튼을 눌러 저장해준다.

    표시해둔 "상속된 사용 권한을 이 개채에 대한 명시적 사용 권한으로 변환합니다." 를 선택해준다.

이제 키를 사용하여 서버를 연결해보자.
CMD(명령 프롬포트)를 통해 서버와 연결할 수 있다.

아까 복사해둔 명령어를 입력하여 서버와 연결하면 된다.

나는 여기서 connect to host (ip) port 22 : Connection timed out 에러가 계속 발생했다.

탄력적 IP 설정, 보안 그룹의 인바운드 설정도 확인 해봤는데 설정은 잘 되어있는 상태였다.

검색해보니 내가 윈도우 사용자여서 발생한 오류였는데, 내가 서버 생성시 선택한 ubuntuLinux 인스턴스 이다.
나는 윈도우 사용자이기 때문에, 윈도우 사용자가 리눅스 인스턴스를 사용하려 할 때는 쁘띠(PuTTy)를 설치해야 한다고 한다.



💡 3. 쁘띠(PuTTy)를 이용한 서버 접속

Amazon AWS 공식 문서 : PuTTY를 사용하여 Windows에서 Linux 인스턴스에 연결

쁘띠를 설치한 뒤, PuTTy gen을 실행시켜 .pem의 키 파일을 먼저 .ppk 파일로 변환 해주어야 사용이 가능하다.

3-1. 키 변환하기

RSA로 선택되어 있는지 확인하고 Load 버튼을 눌러 키 파일을 선택하여 변환한다.

Save private key로 키를 저장하는데, 이 때 키의 이름은 기존과 동일하게 해주어야 한다.
해당 키 파일로 서버에 연결하기 때문에 분실 및 도난에 주의한다.

3-2. 연결 설정하기

키 변환이 완료되었다면 PuTTy를 실행한다.

Session을 선택하고 몇가지 설정을 해주어야 한다.

Host Name : EC2 세부 정보에 있는 퍼블릭 IPv4 주소 or 퍼블릭 IPv4 DNS
Port : 22번
Connection type : SSH

해당 설정이 완료 되었다면 좌측 메뉴의 SSH > Auth로 이동한다.

네모로 표시한 곳에 서버 SSH 접속을 위한 Private key를 입력해주면 된다.
Browse를 눌러 아까 변환한 .ppk 파일을 선택하여 불러온 뒤, 다시 방금 전의 Session으로 이동한다.

서버 이용 시마다 다음과 같은 과정을 거치는 것은 번거로우므로, 지금까지 설정해둔 것을 저장해두고 필요할 때 호출해서 사용할 것이다.

Saved Sessions에 원하는 이름을 입력한 뒤 Save 버튼을 누르면 다음과 같이 설정이 저장된 것이 보인다.
내가 저장한 설정을 클릭하고 Load 한 후, 하단의 Open을 눌러 서버에 접속하자.

3-3. 서버 접속하기

Open 버튼 클릭시 다음과 같은 화면이 나온다.
우분투(ubuntu)를 선택하여 인스턴스를 생성했으므로 ubuntu를 입력하여 로그인 한다.

정상적으로 연결 되었다면 아래와 같은 화면이 출력된다.

인스턴스 재부팅시 서버가 완전히 켜지기 전에 연결 시도하여 접속 실패가 뜨는 경우가 있었는데, 종료하고 잠시 후 실행하면 정상 접속이 되는 것을 확인하였다.

3-4. 프로그램 설치하기

테스트 서버에서 파이썬과 주피터 노트북을 설치해보자.

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

해당 명령어를 차례대로 실행하면 된다.
참고 : AWS EC2로 서버 구축하기 2 - [Jupyter Notebook설치 및 연결]

파이썬 설치 도중 에러가 발생한 것이 보인다.

Command python setup.py egg_info failed with error code 1 setup tools

해당 에러는 파이썬으로 pip 인스톨시 setuptools에서 에러가 발생하는데, 툴을 업그레이드 하면 해결할 수 있다.
아래의 명령어를 통해 업그레이드 한 후 재설치하면 정상적으로 설치가 된다.

sudo -H pip3 install --upgrade --ignore-installed pip setuptools

참고 : [Python] pip 설치 시 egg_info failed with error code 1 오류 해결


3-5. 인바운드 규칙 편집(방화벽 설정)

EC2 서버에 8888번 포트로 접속 가능할 것이므로 해당 포트번호를 인바운드 규칙에서 허용 해주어야 한다.

EC2 세부정보에서 보안 탭 - 보안그룹을 클릭하여 이동한다.

인바운드 규칙 편집을 눌러서 8888 포트를 설정해준다.


3-6. Jupyter Notebook config 설정

- 암호 설정하기

python3을 실행한 뒤 passwd()를 입력하고 암호로 설정할 값을 입력해준다.

python3
from notebook.auth import passwd
passwd()

암호이기 때문에 입력한 값은 사용자에게 나타나지 않는다.

암호 재입력까지 완료되면 입력한 값의 유니코드 변환 값이 나오는데, 우클릭으로 복사하여 메모장 등에 저장한 뒤, 이것을 암호로 등록할 것이다.


Jupyter Notebookconfig(설정) 파일을 열어서 해당 암호를 등록해주자.

1. 환경 설정 파일 위치 찾기

jupyter notebook --generate-config

2. 파일 수정하기

명령어 : sudo vi 파일경로

sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py

설정 파일이 열리면 다음과 같은 창이 출력된다.

A키를 눌러서 편집모드로 전환할 수 있다.

이제 비밀번호를 등록하기 위해 맨 아래에 다음의 코드를 추가할 것이다.

c=get_config()
c.NotebookApp.password = u'복사한유니코드(argon2:~)' 
c.NotebookApp.ip = 'AWS Private ip'

파일을 위로 올려서 추가 설정을 변경해주자.

c.notebookapp.port = 8888 #8888번 포트 접속 설정, 280번대 라인
c.NotebookApp.notebook_dir = '프로젝트폴더경로' #주피터 노트북 시작시 파일 출력 경로, 260번대 라인
c.NotebookApp.ip = '서버프라이빗ip' or c.NotebookApp.ip ='*' #200번대 라인

설정을 마치고 아래의 순서대로 저장하고 창을 빠져나오면 된다.

  1. ESC
  2. :wq! 입력
  3. Enter

모든 설정을 마친 뒤, 주피터 노트북을 실행하기 위해 다음 코드를 입력한다.

sudo jupyter-notebook --allow-root
sudo jupyter-notebook

위와 같이 정상적으로 실행이 되었다면 Chrome 주소창에 Server Public ip:8888 을 붙이면 접속이 가능하다.
ex) 123.45.678:8888













오답노트

ubuntu no web browser found could not locate runnable browser
oserror: [errno 99] cannot assign requested address : 내 ip주소로 설정시 오류
해결 : 서버 ip 주소로 바꿔서 저장

- No web browser found: could not locate runnable browser.' is what it's telling me.
미해결 : 계속 뜨는데 주피터노트북 실행은 잘 됨.. 체크 못 한 부분이 어딘지 다시 찾아봐야 한다!

8888포트 실행 확인시 0.0.0.0:8888로 출력, 접속 불가 오류
해결 : 주피터노트북 접속 ip 설정 오류

웹으로 실행해서 열었는데 invalid credentials 오류 
: 비밀번호 설정의 문제, 잘못 이해해서 비밀번호 유니코드 설정을 잘못 함 - 재설정으로 해결

4. 쁘띠 닫아도 항상 실행되게 서버 설정하기

profile
개발이란 뭘까

0개의 댓글