AWS EC2에서 Jupyter Notebook 개발환경 구축하는 방법
일반적으로 자신만의 서버를 구축하고 싶을 때는 가장 손쉬운 형태로 AWS EC2 서비스를 사용할 수 있습니다. AWS EC2에서는 하나의 컴퓨터(Computer) 자원을 하나의 인스턴스(Instance)라고 표현합니다. 이번 시간에는 AWS EC2를 이용하여 우분투(Ubuntu) 리눅스 개발환경을 구축한 뒤에 주피터 노트북(Jupyter Notebook)을 설치하여 외부에서 서버를 쉽게 관리하는 방법에 대해서 알아보도록 하겠습니다.
다음의 절차를 천천히 따라오시면, AWS에 대해서 아예 모르는 초보자도 30분 안에 AWS 우분투 서버와 Jupyter Notebook을 이용한 개인 서버 환경을 구축하실 수 있습니다. 바로 한 번 AWS EC2 인스턴스부터 만들어 보도록 하겠습니다.
※ AWS EC2 인스턴스 만들기 ※
AWS 콘솔(Console)에 접속하신 이후에 [EC2] 서비스에 들어갑니다.
[인스턴스 시작] 버튼을 눌러서 인스턴스를 생성하고 시작할 수 있습니다.
이후에는 우분투(Ubuntu) 리눅스 서버로 [선택]하여 생성해주겠습니다.
기본적으로 프리 티어(Free Tier) 서비스를 선택하여 사용하도록 하겠습니다.
별도의 설정을 바꿀 필요 없이 바로 [시작] 버튼을 눌러서 인스턴스를 구동시킬 수 있어요.
다만 처음 인스턴스를 시작할 때 [키 페어]를 설정할 수 있습니다. 이 키 페어는 실제로 AWS EC2 서버에 접속하기 위한 목적으로 사용됩니다. 따라서 키 페어를 분실하는 경우 상당히 귀찮은 일이 발생할 수 있습니다. 따라서 개인 드라이브에 소중히 보관하셔야 합니다. 저는 다음과 같이 새로운 키 페어를 생성하도록 하겠습니다.
결과적으로 키 페어 파일을 다운로드 한 뒤에 [인스턴스 시작]을 눌러주시면 완료됩니다.
※ AWS EC2 인스턴스에 접속하기 ※
저는 이렇게 만들어진 인스턴스에 [연결] 버튼을 눌러서 접속해보도록 하겠습니다.
이후에는 다음과 같이 서버에 접속할 수 있는 SSH 명령어가 나옵니다.
다만 윈도우(Windows) 운영체제에서 우분투 서버에 접속하기 위해서는 키 페어에 대한 귀찮은 [사용 권한 설정]이 필요합니다. 따라서 아까 다운로드 받은 키 페어 파일의 [속성]을 확인하여 [보안] - [고급] 탭으로 이동하시면 됩니다.
기본적으로 관리자 권한으로만 해당 키 페어를 사용하도록 처리해야 서버에 접속할 수 있어요.
따라서 원활한 권한 설정을 위해 [상속 사용 안 함] 처리를 진행해주세요.
그리고 [명시적 사용 권한으로 변환]으로 진행하시면 됩니다.
이후에 다음과 같이 일반 사용자들(Users)에 대한 모든 권한을 제거해 주시고, 관리자 그룹에서만 접근할 수 있도록 남겨줍니다.
이제 명령 프롬프트를 관리자 권한으로 실행하여 접속해보도록 하겠습니다.
해당 키 페어 파일이 존재하는 위치로 이동하여 앞서 확인했던 SSH 명령어로 서버에 접속하시면 됩니다.
이제 접속이 완료된 것을 확인할 수 있습니다. 최신 우분투에는 기본적으로 깃(Git), 파이썬(Python) 등이 설치가 되어 있습니다. 그러므로 간단히 파이썬을 이용해 정상적으로 구동되는 지의 여부를 확인해보도록 하겠습니다.
※ 주피터 노트북(Jupyter Notebook) 설치하기 ※
주피터 노트북은 다음과 같이 pip3 명령어를 이용하여 설치할 수 있습니다.
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install notebook
※ 주피터 노트북(Jupyter Notebook) 비밀번호 설정하기 ※
이후에 주피터 노트북(Jupyter Notebook)의 비밀번호를 만들어 보도록 하겠습니다. 파이썬(Python)에서 다음과 같은 명령어로 비밀번호를 입력하여 생성할 수 있습니다.
python3
>> from notebook.auth import passwd
>> passwd()
# 비밀번호 설정한 뒤에 SHA1 값 기록해 놓기
이제 실제로 주피터 비밀번호 설정 및 접속 설정을 하기 위해서 주피터 환경 설정 파일을 생성하도록 하겠습니다.
jupyter notebook --generate-config
sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py
이제 주피터 환경 설정을 진행하기에 앞서 현재 서버의 내부망 IP 주소를 확인하도록 하겠습니다. 주피터 노트북을 이용해 서버를 개방할 때는 IP 주소 및 포트 번호를 설정해야 하기 때문입니다. 저는 다음과 같이 172.31.20.175라는 IP 주소를 확인할 수 있었습니다.
이제 다음과 같이 jupyter_notebook_config.py 파일을 열어서 환경 설정 내용을 작성해주시면 됩니다. 기본적으로 내용들이 주석처리 되어 있으므로 소스의 가장 아래 쪽에 다음과 같은 내용을 추가적으로 넣어주시면 됩니다.
c = get_config()
c.NotebookApp.password = u'sha1:{해시 값}'
c.NotebookApp.ip = '{내부 아이피}'
c.NotebookApp.notebook_dir = '{시작 디렉토리}'
# 내부 아이피로는 SSH로 접속했을 때 콘솔 창에 나오는 아이피를 입력하기
환경 설정을 할 때는 기본적으로 주피터 노트북에 접속하기 위한 비밀번호는 앞서 설정했던 비밀번호의 SHA-1 해시 값을 넣어주시면 됩니다. 이후에 내부 아이피와 주피터에 접속했을 때 확인하게 되는 시작 디렉토리를 설정하시면 됩니다. 결과적으로 다음과 같이 작성하시면 됩니다.
※ 주피터 노트북(Jupyter Notebook) 실행하기 ※
이제 주피터 노트북을 실행할 수 있습니다. 저는 루트(Root) 권한을 허용한 형태로 주피터 노트북을 열어보도록 하겠습니다. 말 그대로 주피터 비밀번호만 알고 있으면 해당 서버를 완전히 루트 권한으로 다룰 수 있게 허용한다는 의미입니다.
sudo jupyter-notebook --allow-root
명령어 입력 이후에는 다음과 같이 8888번 기본 포트로 주피터가 열린 것을 확인할 수 있습니다.
※ 방화벽 설정하기 ※
이후에 AWS EC2 관리 페이지에서 [보안 그룹] 설정을 통해 8888번 포트 방화벽을 개방할 수 있습니다. 기본적으로 AWS EC2는 보안을 위해 대부분의 포트를 막아놓습니다. 그래서 이와 같이 특정한 서버 프로그램을 운영할 때마다 보안 그룹 설정을 해주어야 합니다.
이후에 다음과 같이 [인바운드]에서 [편집] 버튼을 눌러 8888번 포트를 [위치 무관]으로 열어주시면 됩니다. 그러면 전세계 어디에서나 우리 서버의 주피터에 접속을 시도할 수 있게 됩니다.
※ 서버에 접속해보기 ※
이제 준비가 완료되었으므로 주피터(Jupyter)에 접속해보도록 하겠습니다. 우리 AWS EC2 서버의 공인 IP를 확인합니다.
이제 브라우저에서 해당 아이피에 8888번 포트로 접속하시면 됩니다. 다음과 같이 접속하여 비밀번호를 입력해 보겠습니다.
접속 이후에는 바로 [New] - [Terminal]에 들어가서 터미널에 접속해보도록 하겠습니다.
터미널에 접속한 이후에는 루트(Root) 권한을 이용할 수 있는 형태로 서버를 완전히 마음대로 컨트롤할 수 있게 됩니다.
※ 주피터 노트북 항상 켜놓기 ※
이제 주피터 노트북을 항상 켜놓는 방법에 대해서 소개하겠습니다. 기본적으로 주피터 노트북을 실행하는 명령을 입력한 이후에 동작을 종료하고, bg 명령을 이용해 백 그라운드에서 돌아가도록 처리할 수 있습니다. 이후에 소유권을 포기하면 백 그라운드에서 항상 주피터 서버가 동작하는 상태가 됩니다. 이로써 항상 서버를 열어놓을 수 있습니다. 명령어는 다음과 같습니다.
sudo jupyter-notebook --allow-root
# [Ctrl] + Z 입력하여 실행 종료하기
bg
disown -h
'AWS' 카테고리의 다른 글
AWS RDS로 만든 MySQL 기준 시간을 한국 시간으로 설정하는 방법 (0) | 2019.03.27 |
---|---|
AWS EC2 인스턴스 성능(사양) 변경하는 방법! (인스턴스 유형 변경) (0) | 2019.03.19 |
AWS EC2에 탄력적 IP(Elastic IP)를 이용해 고정 IP 부여하기 (0) | 2019.03.19 |
AWS EC2 인스턴스 지역 변경하기 (이미지를 활용한 방법) (0) | 2019.03.19 |
AWS EC2 볼륨(Volume) 간단히 증가시키는 방법 (1) | 2019.01.20 |