* 시작 전에: EC2 무료사용의 경우 한달 750시간인데, 이는 EC2 전체 사용시간을 통틀어 한달 750시간 이내라는 것 입니다. 즉 EC2를 두대를 켜놓게 되면 하루에 48시간 사용하는 것과 같은 효과라 한대치는 유료로 사용하는 것이 됩니다. 이걸 이번달에 돈내면서 알게 되었으니 다들 저같이 피같은 돈을 쓰시지 않으시기를 바랍니다... 저희는 온전히 무료로 서버를 이용하는게 목적이니까요... 흑흑..

 

사실 이전까지의 모든 것으로 python을 사용할 수 있는 한대의 컴퓨터가 더 생긴 것은 맞지만, 보안을 위해서 ssh 접속으로 설정해 놓았기 때문에 정말 아무런 컴퓨터 혹은 아무런 디바이스에서나 막 접속할 수는 없습니다.

 

이를 위해서 8888번 포트를 미리 개방해 놓았는데요, 오늘은 이 포트를 가지고 어디에서나 접속할 수 있는 주피터 노트북 서버를 만들어 보도록 하겠습니다.

 

현재 아나콘다를 설치하여 주피터 노트북은 설치가 이미 되어있는 상태입니다.

그리고 현재 버전의 아나콘다(정확히는 주피터 노트북 5버전 이상)를 사용중이시면 주피터 노트북에서 비밀번호 설정이 매우 쉽습니다.(중요) 나중에 차근히 알려드리겠습니다.

 

그리고 자신하건데 주피터 노트북 서버를 만드는데 지금 이 포스팅보다 더 간단한 방법은 없다고 자부할 수 있습니다.

 

1) 먼저 설정에 필요한 정보들을 모아야 합니다.

      1] AWS에 접속하여 대시보드에서 EC2를 검색합니다. (혹은 최근에 이 항목을 쓰셨다면 대시보드 검색창 아래에 EC2가 있을 것입니다.)

      2] EC2 대시보드에서 좌측의 '인스턴스'를 클릭합니다.

      3] 현재 저희들은 인스턴스를 하나만 만들어 놓았기 때문에 현재 'running'이라고 떠 있는 인스턴스를 클릭합니다.

      4] 아래쪽에 인스턴스의 상세한 설명들이 나오는데 여기서 '프라이빗 IP'라고 써있는 항목을 찾습니다. 점(.) 세개로 구분된 네 뭉텅이의 숫자가 IP입니다. (ex 172.30.29.125)

      5] 과거에 처음에 만들었던 설정에서 '보안그룹'에 '인바운드'탭에 8888번 포트가 개방되어 있는지 확인합니다. 만약에 개방되어 있지 않다면 개방하여 줍니다. (jupyter notebook은 기본적으로 8888번 포트를 사용합니다.)

 

2) 이제 인스턴스에 CLI로 접속합니다. PuTTY(Windows) 혹은 Command Line(Mac, Linux)을 사용하여 접속합니다.

 

3) 명령줄에 [jupyter notebook --generate-config]를 입력하고 엔터를 칩니다.

      1] 이 명령을 수행하고나면 [/home/ubuntu/.jupyter] 폴더 아래에 jupyter_notebook_config.py라는 python 파일이 생성됩니다.

 

4) 명령줄에 [vi /home/ubuntu/.jupyter/jupyter_notebook_config.py]를 입력한 뒤 엔터를 치면 vim 에디터가 열리며 문서가 열립니다.

      1] 아래에 모든 항목이 #으로 주석처리 되어있으며, 사실 여기서 찾아보면 저희가 설정하고자 하는 모든 항목들이 나와있으나 하나하나 찾기 힘드니 그냥 위에다가 새로 써 줄 것입니다.

      2] 맨 첫줄 맨 앞에서 i키를 누른 뒤 엔터를 두번 쳐줘서 맨 위에 공간을 만들고 다시 맨 위로 올라와 아래의 커맨드를 씁니다.

            c.NotebookApp.ip = '___.___.___.___' #아까.찾은.프라이빗.IP [필수!]

            c.NotebookApp.open_browser = False #자동으로 브라우저 여는 것에 대해 False. 어차피 CLI 환경이라 꺼줍니다.

            c.NotebookApp.notebook_dir = u'/home/ubuntu/' #Jupyter notebook에 처음 접속하였을 때 보여줄 디렉터리 경로입니다. CLI로 처음 접속하였을 때의 기본 디렉터리가 ubuntu/이며, 이 뒤에 새로 생성한 dir이 있으면 주소형식으로 추가해주시면 됩니다. 만약 안써주시면 CLI 상에서 jupyter notebook 명령을 친 디렉터리 위치가 브라우저상에서 열리게 됩니다.

            c.NotebookApp.port_retries = 8888 #주피터 노트북이 사용할 포트를 지정하는 곳입니다. 기본 포트인 8888을 사용할 경우 이 부분을 입력하지 않으셔도 되지만, 만약에 포트를 바꾸고 싶으시면 이 부분을 수정함과 동시에 EC2에서 보안그룹의 인바운드 포트를 추가적으로 개방해주셔야 합니다.

      3] 위의 네 줄(혹은 필수 한줄 이외 옵셔널 몇 줄)을 모두 입력하셨으면 :wq를 누르셔서 저장하고 CLI환경으로 다시 나오시면 됩니다.

 

5) 주피터 노트북을 브라우저로 열 때 비밀번호를 설정합니다.

      만약 설정되어 있지 않다면 접속이 아예 안되거나, 첫 접속시 token(이라고 jupyter notebook을 실행한 환경에 주소뒤에 붙어나오는 특별한 값이 있습니다.)을 입력하거나 토큰입력 후 비밀번호를 설정하라는 페이지가 나옵니다.

      위의 상황 모두 짱 귀찮으니 그냥 주피터 노트북에 비밀번호를 먼저 설정해줍시다.

      여기서 주피터 5번 버전대 이후가 편해진 부분이 이 부분입니다. 과거에는 비밀번호를 설정하거나 재설정 할때 정말 핵귀찮았지만, 5버전대 이후에는 명령어 한줄만 쓰면 새로 설정과 변경이 자유롭습니다.

      1] CLI 명령줄에 [jupyter notebook password]을 칩니다.

      2] 차례대로 Enter password:, Verify password: 식으로 나오는데, Enter password: 라고 나오고 아무리 키를 눌러도 입력되는 것으로 나오지 않으나 입력되는 상태이므로 그냥 먹통인 상태로 패스워드 입력 후 엔터치면 자동으로 Verify password: 로 넘어가고 여기서도 같은 pw를 입력하면 password가 설정됩니다.

      3] 이후에 패스워드를 바꿀때도 간편하게 CLI 명령줄에 [jupyter notebook password]입력 후 새로 쓸 패스워드를 입력하면 패스워드가 바뀝니다.

 

      참고) 과거에는 ipython 혹은 python을 직접 CLI환경에서 구동한 뒤

              [from notebook.auth import passwd]

              [passwd()]

              의 두 줄을 따로 입력하여 'sha1:~~~~~'라고 하는 해시값을 얻은 뒤 이것을 다시 jupyter_notebook_config.py에다가 다른 항목들 처럼 c.NotebookApp.password = 'sha1:~~~~'이런식으로 써 주어야 했으며 패스워드 변경은 훨씬 어려웠습니다.

 

6) 서버를 24시간 켜두고 언제든지 접속하는 것을 목표로 하기 때문에(서버에 들어가서 따로 켜 주었을 때만 작동하는 거라면 그냥 로컬에서 jupyter notebook을 쓰는 것과 다름이 없습니다... (적어도 사용하는 관점에서는)) 사용자가 로그아웃 하여도 24시간 서버컴에서 돌아가는 방법을 사용하겠습니다. screen이라는 기능인데, 이 명령어를 사용하여 만든 screen안에서 동작하는 것은 사용자가 로그아웃을 하여도(서버를 떠나도) 계속 작동합니다.

      1] screen -S [스크린 이름] 을 명령줄에서 실행합니다. 여기서 -S는 새로 스크린을 스크린 이름으로 만들겠다는 것입니다. 처음에는 만들자마자 스크린으로 자동으로 attach 됩니다.

      2] 여기에서 jupyter notebook을 명령줄에 입력하여 jupyter notebook을 켭니다. 이제 jupyter server가 꺼지지 않고 돌아가는 서버 컴퓨터를 만든 것입니다.

      3] 이후 Ctrl+a+d키를 차례로 눌러 원래 CLI 환경으로 돌아옵니다. 다시 스크린에 돌아가고 싶으시면 screen -r [스크린 이름]을 치시면 해당 스크린으로 다시 attach되며 다시 Ctrl+a+d를 누르시면 detach 됩니다. (어떤 경우에 제대로 detach되지 않은채 CLI환경 자체가 꺼진경우 다시 접속하면 CLI 환경인데 스크린이 detach되지 않아 -r로 attach할 수 없을 경우 -dr로 접속하면 그 스크린을 자체적으로 detach시켰다 다시 attach하므로 접속이 가능해집니다.)

      4] 추가적으로 현재 사용하고 있는 스크린의 목록을 보고 싶으시면 screen -ls를 치시면 볼 수 있습니다.

      5] 어떤 스크린을 끄고 싶으시면 원래 CLI 환경에서 screen -X -S [스크린 이름] quit 혹은 screen -X -S [스크린 이름] kill을 하시면됩니다.

      6] 동일한 이름의 스크린을 만드셨다면, screen -ls 를 쳤을 때 스크린 이름 앞에 숫자가 .으로 붙어있는데 이것으로 같은 이름의 스크린이더라도 구별하여 없애거나 다시 접근하거나 하실 수 있습니다.

 

7) 이제 직접 접속해 봅시다.

      1] 이전까지 파일질라나 PuTTY에서 썼던 퍼블릭 IP를 [http://퍼블릭 IP:8888]로 브라우저에 입력하고 접속합니다.

          예를들어 퍼블릭 IP가 54.127.52.125 였다면 http://54.127.52.125:8888로 접속합니다.

      2] 비밀번호를 입력하라는 페이지가 나오면 성공입니다. 여기서 비밀번호를 입력하면 처음에 보여주기로 설정했던 디렉토리가 보일 것이며, 한번 입력 후 브라우저가 기억하는 한 다음 접속부터는 비밀번호를 입력하지 않아도 주소만 입력하면 자동으로 접속 될 것입니다.

 

8) 따라! 성공하였습니다!

 

 

이제 자유자재로 프로그래밍 가능한 강력한 interpreter 도구를 얻으셨으며, 언제 어디서든 자유롭게 인터넷으로 접속할 수 있습니다. 게다가 고정된 ip주소를 가지고 있으니 한번 접속만 하면 자동으로 브라우저가 자동완성으로 페이지 주소를 만들어 줄 것입니다.

 

그러나 컴퓨팅 성능 자체는 그리 좋지 못하여 과한 deep learning tasks 같은 것을 돌리면 컴퓨터 자체가 뻗어버려 EC2환경에서 다시 재부팅 해줘야 하는 일도 발생할 수 있으니 컴퓨팅 환경은 제한적이라는 것을 꼭 기억해주시기 바랍니다.(그래도 일반적인 코딩 수준에서는 문제가 하나도 될 것이 없습니다.)

 

이제 이 서버컴퓨터로 개발을 할 수 있는 준비는 다 끝났습니다. 이것을 활용하여 더욱 많은 프로젝트들을 협업하고, 언제 어디서나 작업하실 수 있기를 바랍니다!

이제 그동안에 인스턴스를 만들고 서버에 접속도 되며, 파일까지 올릴 수 있으니 본격적으로 서버를 활용해 보는 시간을 가져보도록 하겠습니다.

 

일단 요새 프로그래밍 언어 중 가장 핫한 파이썬을 깔아보도록 하겠습니다.

 

파이썬은 여러 패키지가 장점인 만큼 오히려 패키지가 서로 상호 의존적인 부분이 있어 따로 설치시에 가끔씩 오류가 나는 경우가 있어서 요새는 '아나콘다(Anaconda)'라는 Continuum사에서 따로 배포하는 배포판을 받아서 설치할 것입니다.

 

가볍게 '배포판'이라는 것은 파이썬 인터프리터 외에 필수적인 여러 패키지를 한번에 묶어서 배포하는 것 입니다.

 

여기서는 리눅스 자체에서 wget 명령어로 다운받는 방식과 리눅스 실행파일을 받은 뒤 FTP로 올려주는 방법이 있습니다.

(차이는 명령어로 좀 더 쉽게 처리하냐 아니면 수작업을 한번 더 하느냐의 차이일뿐입니다.)

 

1) wget 명령어 활용

      1) https://repo.continuum.io/archive/에 접속하시면 다운받을 수 있는 파일의 이름이 쭉 나옵니다. 이 중에서 원하는 버전(2번대 혹은 3번대. 개인적으로는 3번대를 추천드립니다.)과 원하는 OS(여기서 우리는 Linux 버전), 프로세스 타입(32bit, 64bit) 그리고 원하는 날짜(가장 최근 릴리즈 된 것 등)를 고르신 뒤 .sh로 끝나는 파일명을 오른쪽 클릭하여 링크 주소를 복사합니다.

      2) PuTTY 혹은 커널로 접속한 뒤 wget을 입력한 뒤 한칸 띄우고 아까 복사한 링크를 붙여넣기 합니다. 예를 들어 파이썬 버전 3, 64비트 운영체제 linux 최신 릴리즈(2019.03)인 파일을 다운 받으려면 [wget https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-x86_64.sh]라는 명령줄을 입력하시면 됩니다.

 

2) 웹 다운로드 후 FTP활용

      1) https://www.anaconda.com/distribution/사이트에 접속합니다.

      2) 중간의 OS에서 Linux를 클릭한 뒤 아래쪽의 버전대를 보시고 64비트 인스톨러를 클릭합니다.(아마 그냥 Download 버튼을 클릭해도 64비트 인스톨러가 다운로드 될 것입니다.)

      3) FileZilla를 켜시고 다운받은 파일을 서버에 업로드 해 줍니다.

 

이렇게 아나콘다 파일 다운로드는 끝났습니다.

 

이후에는 공통적으로 [bash 파일이름]을 입력하시면 설치가 시작됩니다. (bash Anaconda3-2019.03-Linux-x86_64.sh)

 

설치시에는 yes|no가 나오는 부분에서 전부 yes를 해주시면 되며, system path에 등록할거냐고 묻는 질문에 yes 해 주신 뒤 source ~/.bashrc 한번 해 주시면 system path가 등록이 됩니다.

 

이 상태에서 테스트 스크립트를 한번 돌려보고 만약에 테스트 스크립트가 돌아가지 않는 경우 conda환경을 하나 만들어주어야 합니다.

 

테스트 스크립트 만드는 방법은 아래를 따라오시면 됩니다.

 

시스템 CLI: vi test.py 입력

VIM안에서 a [vim 에디터 수정 명령어]

print("Hello world!")

esc로 에디트 모드 해제

:wq 입력하여 저장 후 CLI창으로 복귀

시스템 CLI: python test.py 입력

 

화면에 Hello world!가 출력되지 않는다면 conda 환경을 만들어주어야 합니다.

 

conda create --name [환경이름] python=3

conda activate [환경이름]

 

환경이름에는 영어로 입력해주시면 됩니다. 가령 my_env 같은 이름으로요.

 

저의 경우 이렇게 한번 activate 시켜주면 이후로는 지속적으로 activate되어 있었습니다.

 

그리고 다시 python text.py를 입력해보시면 이번에는 확실하게 Hello world!가 찍히는 것을 보실 수 있습니다.

 

더 궁금하신 점은 댓글 달아주시면 확인 후 답변드리겠습니다.

 

다음에는 이 환경에서 온라인으로 jupyter notebook 서버를 만들어보도록 하겠습니다.

오늘까지의 포스팅이면 AWS에서 서버를 만든 뒤 자유자재로 활용가능합니다.

 

서버에 할당된 용량안에서 파일도 왔다갔다 할 수 있고(3), OS 내부에서 일을 처리할 수 있으며(2), 컴퓨터 자체를 켜고 끄고 인터넷 설정을 할 수 있게 되는 것(1)이죠!

 

이미 1번과 2번 포스트를 보고 잘 따라오셨다면 이번 포스트는 정말 쉽습니다.

 

그럼 시작해보겠습니다.

 

1) 먼저 FileZilla를 다운받아줍니다.

      공식 홈페이지는 https://filezilla-project.org/이며, 현재 저희는 Client인 컴퓨터에서 AWS서버로 접속을 할 예정이니 Client(홈페이지 좌측에 있는 버튼)를 클릭하여 다운로드 받아줍니다. 클릭하면 자신의 OS를 선택하는 창이 나오는데, OS에 맞게 다운로드 받으시면 됩니다.

      마지막에 팝업으로 FileZilla Pro버전을 프로모션하는데, 그냥 저희는 FileZilla만으로 족하니 오른쪽 컬럼의 FileZilla에서 Download를 눌러줍니다.

      그럼 마침내 다운로드가 시작됩니다.

 

2) 다운로드 받은 파일을 설치합니다.

      처음에 I Agree 해주시면 잠깐만 기다리라는 말이 나온 뒤 먼저 FileZilla가 깔려있었을 경우에는 이전세팅 유지하고 Upgrade할 건지 아니면 세팅 변경할건지 같은 창이 나오는데, 각자 자신에게 알맞은 것을 선택하며 설치를 진행해 줍니다.

      중간중간에 Avast 백신 등 FileZilla외에 프로그램을 설치하는데 동의하냐는 구간이 있으니 막 Next 클릭하지 마시고 저런 프로그램 설치에 동의하냐는 체크박스를 풀어주셔야 합니다.

      그리고 Next 누르면 자동으로 설치가 완료됩니다.

 

3) 파일질라를 실행하시면 먼저 왼쪽 위에 컴퓨터 본체 세대가 붙어있는 듯한 아이콘을 클릭하셔서 '사이트 관리자'창을 띄우셔야 합니다.

 

4) 이 창에서 먼저 좌측 하단에 '새 사이트'를 클릭하시고 새 사이트의 이름을 정하신 뒤, 오른쪽의 '일반' 탭에서 [프로토콜]을 'SFTP'로 설정해 줍니다. 저희는 SSH로 접속하기 때문에 FTP도 SSH로 접근합니다.

 

5) 그리고 그 아래 [호스트]는 저희가 이전에 elastic ip(탄력적 ip)를 만들어서 저희 서버에 붙여주었던 그 ip를 써주시면 됩니다. 저희가 커맨드라인 상에서 혹은 PuTTY로 접속할 때 썼던 그 ip입니다. [포트]는 비워두신채로 두셔도 SFTP가 사용하는 포트가 22번(FTP-21번)이므로 프로그램에서 자동으로 설정합니다.

 

6) 그리고 그 아래 [로그온 유형]은 '키 파일'로 설정해 주시고 그 아래 [사용자]는 ubuntu로 지정해줍니다. 저희가 만들었던 OS에서 사용하는 사용자 명입니다. 저희는 ubuntu OS로 만들었기 때문에 ubuntu이고, 다른 OS인 경우 이전 포스팅(https://omnil.tistory.com/68?category=782762)에서 사용자 이름을 정리한 테이블을 보아 주시기 바랍니다.

 

7) 그 아래에 있는 [키 파일]에서 '찾아보기'를 선택하신 뒤 ppk파일이나 pem파일을 선택하여 주시면 됩니다.

 

8) 이 외의 탭은 고급설정이므로 저희는 이정도면 OK입니다. 이렇게 설정을 마친 뒤 '연결'을 눌러주시면 서버로 SFTP연결이 되며, 현재 서버에 있는 파일들을 볼 수 있습니다. 그리고 다음부터는 아까전에 설정한 이름을 가지고 쉽게 연결을 진행하실 수 있습니다.

 

이것으로 AWS를 활용할 수 있는 방법에 대하여 전부 알아보았습니다. 다음편에는 Anaconda와 jupyter를 활용하여 웹상에서 jupyter를 사용할 수 있게 만들어 보도록 하겠습니다.

저번에는 인스턴스를 AWS상에서 구동시키는 것을 알아보았습니다.

 

이번에는 우리가 흔히 이야기하는 CLI(Command Line Interface)상에서 인스턴스에 접속하여 인스턴스를 직접 사용해보도록 하겠습니다.

 

OS별로 접속할 수 있는 방법이 다릅니다.

 

Linux계열-

      의외로 가장 간단합니다.

      ssh -i [*.pem이 들어있는 주소] ubuntu@[인스턴스 ip 주소]

      로 치면 접속이 됩니다.

      여기서 대괄호 안에 있는 내용은 적당하게 바꿔주셔야 합니다. 예를들어 ssh -i ~/.ssh/asdf.pem ubuntu@11.22.33.44 같은 식입니다.

      인스턴스 ip 주소는 저번 포스팅에서 만들어서 인스턴스에 붙였던 탄력적 ip 입니다.

      @ 앞에가 ubuntu인 것은 저번 포스팅에서 만든 인스턴스의 OS가 ubuntu이기 때문입니다.

 

Mac계열-

      Linux계열과 거의 비슷하지만 몇가지 팁이 있습니다.

      보통 *.pem파일은 .ssh 폴더에 넣어서 보관하게 되는데, mac의 경우 GUI상에서 .ssh폴더를 찾기가 쉽지 않습니다. 여기서 Finder 상에서 디렉토리를 직접 입력할 수 있는 방법이 있습니다. 먼저 [command+shift+g]를 누르면 직접 디렉토리를 키보드로 작성할 수 있는 창이 새로 열리게 되는데 여기서 [~/.ssh]라고 치게 되면 .ssh 폴더로 finder가 이동하게 됩니다. 여기서 *.pem 파일을 옮기고, mac의 terminal 창에 linux와 마찬가지로

      ssh -i ~/.ssh/[pem이름].pem ubuntu@[인스턴스 ip 주소] 를 쳐 주시면 접속이 됩니다.

      여기서 대괄호 안에 있는 내용은 적당하게 바꿔주셔야 합니다. 예를들어 ssh -i ~/.ssh/asdf.pem ubuntu@11.22.33.44 같은 식입니다.

      인스턴스 ip 주소는 저번 포스팅에서 만들어서 인스턴스에 붙였던 탄력적 ip 입니다.

      @ 앞에가 ubuntu인 것은 저번 포스팅에서 만든 인스턴스의 OS가 ubuntu이기 때문입니다.

 

Windows계열-

      사실 접속 방법이 가장 어렵습니다. 방법도 복잡하구요...

      Windows에서는 리눅스계열처럼 CLI자체로 접속할 수 있는 방법은 없고 PuTTY라는 프로그램을 따로 설치하여 진행하여야 합니다.

      PuTTY 프로그램은 https://www.chiark.greenend.org.uk/~sgtatham/putty/에서 다운로드 받으실 수 있습니다.

      1) PuTTY를 설치합니다.

      2) PuTTY프로그램은 .pem파일 형식을 지원하지 않기 때문에 .ppk파일 형식으로 변환해 주어야 합니다. 이를 위해 윈도우즈 검색창에 PuTTYgen을 검색하여 실행합니다.

      3) 생성할 키 유형(Type of key to generate)에서 RSA를 선택합니다. 여담으로 RSA는 공개키 방식의 암호화 알고리즘으로 Rivest, Sharmir, Adleman 세 명의 이름을 따서 RSA 알고리즘으로 부릅니다.

          *혹시 RSA가 보이지 않는 경우 PuTTY 버전을 확인해주시기 바랍니다. 최신형의 PuTTY가 아닐 수 있습니다. 이 경우 SSH-2 RSA로 선택하면 되긴 하지만 앞으로를 위하여 최신버전을 사용하는 것이 좋을 것 같습니다.

      4) 화면 중간의 버튼들 중 Load버튼을 누릅니다. 기본적으로 .ppk파일만이 새로운 창에서 나타나므로 파일이름 옆의 PuTTY Private Key Files (*.ppk) 라고 나와있는 드랍다운 박스를 눌러 All Files (*.*)을 눌러 .pem 파일을 찾아서 열기를 누릅니다.

      5) 여기서 아무것도 건드리지 않고 Load 아래있는 Save private key버튼을 눌러줍니다. 암호를 걸지 않았다는 경고가 뜨면 그냥 yes를 눌러 암호 걸지 않고 진행 합니다.

      6) 이후 저장할 위치가 나오면 적당한 위치를 선택한 뒤 ppk파일의 이름을 입력하고 저장을 누릅니다.

      이로써 PuTTY로 SSH접속을 하기 위한 ppk 파일을 생성하는 것을 마쳤습니다. 그러나 사실 PuTTY로 리눅스 시스템에 접속하기 위해서는 앞으로 더 많은 과정이 남았습니다...

      1) 이번에는 PuTTY를 켜주세요.

      2) 켜자마자 나오는 Host name 란에 ubuntu@[인스턴스 ip 주소]를 써 줍니다. 여기서 인스턴스 ip 주소는 저번 포스팅에서 인스턴스를 만든뒤 붙여주었던 탄력적 아이피의 주소입니다.

          *여기서 ubuntu는 '사용자 이름'인데 저번에 만들었던 인스턴스가 ubuntu였기 때문에 이렇게 바로 사용하면 됩니다. 그러나 다른 AMI를 사용하시는 경우에는 username이 달라집니다.

               아래는 AWS 홈페이지에서 가져온 내용입니다.

                    Amazon Linux 2 또는 Amazon Linux AMI의 경우 사용자 이름은 ec2-user입니다.
                    Centos AMI의 경우 사용자 이름은 centos입니다.
                    Debian AMI의 경우 사용자 이름은 admin 또는 root입니다.
                    Fedora AMI의 경우 사용자 이름은 ec2-user 또는 fedora입니다.
                    RHEL AMI의 경우 사용자 이름은 ec2-user 또는 root입니다.
                    SUSE AMI의 경우 사용자 이름은 ec2-user 또는 root입니다.
                    Ubuntu AMI의 경우 사용자 이름은 ubuntu입니다.
                    ec2-user 및 root를 사용할 수 없는 경우 AMI 공급자에게 문의하십시오.

      3) 그 옆에 칸인 Port가 22로 제대로 적혀있는지 확인해주십시오.

      4) Connection type 에서 SSH를 선택해 주시면 첫 화면에서 할 일은 다 끝났습니다.

      5) 이후 왼쪽의 디렉토리 구조에서 Connection>SSH옆의 +단추>Auth를 차례대로 클릭해줍니다.

      6) 화면의 오른쪽 중간 쯤에 있는 Browse를 클릭하고 .ppk 파일을 찾아준 뒤 열기를 눌러줍니다.

      7) 모든 세팅이 끝났습니다. 여기서 바로 PuTTY 창 맨 아래에 있는 Open을 선택하면 인스턴스에 연결이 됩니다. 그러나 이 모든 과정을 매번 하기엔 귀찮으므로 현재 설정상태를 저장할 수 있습니다. 왼쪽 디렉터리 Session을 클릭하면 중간에 Save Sessions가 있습니다. 여기에 이름을 지어주고 오른쪽 중간의 Save버튼을 누르면 지어준 이름대로 목록에 항목이 생성되는 것을 보실 수 있습니다. 다음부터는 PuTTY를 연 뒤 이 항목만 더블클릭하면(혹은 항목 선택 후 오른쪽의 Load 클릭 후 Open클릭) 바로 AWS 인스턴스에 접속할 수 있습니다.

      8) 고급세팅으로 keepalive라는 것을 설정할 수 있습니다. AWS는 사실 얼마간 입력이 없으면 자동으로 서버측에서 세션을 종료시켜버리기에 일정 주기마다 keepalive신호를 발생시켜 서버가 꺼지지 않게 하는 것인데요, 이를 위해서는 왼쪽 디렉터리에서 Connection을 클릭한 뒤 Seconds between keepalives 에 있는 값을 적당히 설정해주면 됩니다. 저는 그냥 단순하게 1분마다 keepalive신호를 발생시키도록 60을 입력해놓았습니다.

 

 

이로써 인스턴스에 접속까지는 전부 끝냈습니다.

 

이제 파일을 주고 받을 때 매번 AWS를 통하거나 CLI에서 사용하기 힘드므로 FileZila를 통하여 FTP환경을 구축하고 실제로 인스턴스 상에 파이썬을 설치하여 뭔가 서버로서의 기능을 할 수 있게 만들어 보겠습니다.(그런다고 flask처럼 본격적인 웹 서비스용 서버가 아닌 그래도 뭔가가 돌아가는 서버...)

그리고 이후에 시간이 된다면 jupyter notebook도 서버에서 돌려보도록 하겠습니다.

 

분명히 이전에 AWS 웹서버 한번 구축하면서 기록한 자료가 있을 것 같은데 없어서 다시 쓰는 포스팅입니다.

 

기본적으로 기록의 성격이 강하기 때문에 1차적으로는 글로 작성되며 나중에 차차 이미지 업로드 예정입니다.

 

직접 해보면서 업데이트 하는 내용입니다.

 

AWS 프리티어 사용에 맞추어 작성하였습니다.

AWS 프리티어는 신규가입 후 12개월간 월 750시간의 무료 이용시간을 줍니다. 하지만 한달 31일이라도 한달에 744시간 밖에 되지 않으므로 월 750시간 12개월 무료의 뜻은 1년간 무료로 AWS를 사용할 수 있다는 것입니다.

 

1. 아마존 웹 서비스 시작하기

      1) https://aws.amazon.com/ko/에 접속합니다.

      2) 우측 상단의 주황색 버튼인 '콘솔에 로그인' 버튼을 누릅니다.

      3) aws계정이 없을 시 'aws계정 새로 만들기'를 눌러 계정을 새로 만듭니다. 이 과정에서 신용카드를 등록하는 부분이 나오는데, 해외 신용카드를 등록하여야만 진행이 되니 해외 결제가 가능한 신용카드를 입력합니다. 이후 1달러가 결제 되었다가 취소되며, 신용카드가 valid한지 파악하게 됩니다. 이때 결제 후 취소시기가 영업일 2~3일 혹은 한달정도 걸리는 경우도 있다고 하나, 취소는 제대로 되기 때문에 안심하셔도 됩니다. (만에하나 결제일까지 결제가 안되고 청구되는 경우에는 직접 문의를 하셔야 합니다.)

      4) MFA 설정 : 아이디를 만들게 되면 우선적으로 하셔야 하는 일은 MFA(Multi-Factor Authentication) 설정입니다. MFA라고 해서 뭔가 어려운 것 같지만 사실상 OTP의 개념입니다. AWS의 경우 사용량 만큼 돈을 내는 시스템이기 때문에 MFA를 설정하지 않은 채 사용하다가 해킹이라도 당하게 되면, 최고사양으로 서버를 세팅해버린 다음에 몇시간 동안 코인 채굴 돌리고 사라져버리는 해커 덕분에 몇 천만원(...)이 청구될 수도 있습니다. 그렇기에 MFA는 중요한 요소입니다.

            4-0) 핸드폰 어플리케이션 중 MFA를 지원하는 어플을 깔아야 합니다. 간단히 OTP 어플을 까는 것 입니다. 아이폰/안드로이드 마켓에서 'Authenticator'를 검색하시면 구글에서 제공하는 어플이 하나 있습니다. 그것을 핸드폰에 까시면 됩니다.

            4-1) 먼저 AWS Management Console창으로 들어가게 되면(사실상 로그인 하고 바로 처음에 뜨는 페이지) 검색창이 하나 뜹니다. 여기에 'IAM'이라고 치시고 엔터를 누르면 IAM창으로 넘어갑니다. IAM은  Identity and Access Management의 약자로 그냥 '계정 보안' 페이지 정도로 생각하시면 됩니다.

            4-2) 그 창에서 바로 아래 보이는 '루트 계정에서 MFA활성화'를 누른 뒤 그 아래 있는 'MFA 관리' 버튼을 누릅니다.

            4-3) 페이지가 이동되며, '멀티팩터 인증(MFA)'을 선택하면 하단에 표가 한줄 나오는데 그 제일 오른쪽에 있는 '관리'를 누릅니다.

            4-4) 이후에는 페이지에서 요구하는대로 진행하시면 됩니다.

      5) 다시 AWS Management Console창으로 돌아와 이번에는 EC2를 검색하고 엔터를 누릅니다.

      6) 왼쪽 메뉴 중 '인스턴스'를 클릭합니다.

      7) 파란색 버튼인 '인스턴스 시작'을 누릅니다.

      8) 여기서는 우분투 프리티어를 사용할 것입니다. 단계1 페이지에서 'Ubuntu Server 18.04 LTS (HVM), SSD Volume Type'를 선택해 줍니다. 선택 방법은 제일 오른쪽의 파란색 '선택'버튼을 누르는 것입니다.

      9) '프리티어 사용가능'이라는 초록색 라벨이 붙은 t2.micro가 기본적으로 선택되어 있을 것입니다. 만약 유료로 더 좋은 성능의 웹서버를 사용하시고 싶으시면 하단의 다른 옵션들도 선택이 가능합니다.

      10) 여기서 바로 파란버튼인 우하단의 '검토 및 시작'을 누르셔도 되지만, 일단 회색의 '다음: 인스턴스 세부정보구성'으로 넘기시며 이 인스턴스가 어떤 설정을 가지고 있는지 확인해 보셔도 괜찮습니다. 특히 '4. 스토리지 추가'에서는 기본 8GiB의 저장공간을 제공하는 t2.micro이지만 무료로 30GiB까지 저장공간을 확장할 수 있다고 나와있습니다. 하지만 저는 항상 8GiB의 기본 설정만을 사용하여 보아서 30GiB는 사용해 본적이 없습니다. 혹시 사용해보시고 무료임이 확인되면 제보주시면 수정하겠습니다.

      11) 나중에 인스턴스를 만든 뒤 왼쪽 메뉴 중 '보안그룹'에서 수정할 수도 있지만 만들때 바로 보안그룹을 만들어 줄 수 있습니다. 보통 서버에서 나가는 포트인 '아웃바운드 포트'는 전부 개방시키고, 외부에서 서버로 들어오는 '인바운드 포트'를 막아 서버를 보호하곤합니다. 여기서는 인바운드 포트 중 80번 8888번 22번 20-21번의 4-5개의 포트를 개방합니다.

            80번 포트의 경우 HTTP포트로 만약 AWS서버로 홈페이지를 사용하실 경우 개방해주시면 되는 포트입니다.

            8888번 포트의 경우 jupyter notebook이 사용하는 포트입니다. 만약 원격으로 jupyter notebook을 사용하시려는 경우 80번 포트와 8888번 포트를 개방하여 주시면 됩니다.

            22번 포트의 경우 SSH포트입니다. 즉 아무나 서버에 관리자로 접속하지 못하고, 인증된 사용자만 접속할 수 있게 인증을 진행하는 포트라고 생각하시면 됩니다. 앞으로 나올 .pem 파일과 같은 인증 파일을 기반으로 접속합니다.

            20-21번 포트는 FTP포트라고 생각하시면 됩니다. 나중에 filezila등으로 웹서버에 접속하여 파일을 올리고 내릴 때 사용합니다. 사실 AWS자체에서 파일을 업로드 및 다운로드 할 수 있는 방법을 제공하고 있고, 심지어는 CLI(Command Line Interface)상에서 바로 파일을 업로드/다운로드 할 수 있지만, GUI환경에서 사용하기 번거롭고 귀찮다는 단점이 있습니다. 그러나 filezila등의 FTP프로그램을 사용시 상당히 편리하게 file들을 관리할 수 있습니다.

이 모든 포트를 적용하였을 경우 AWS상에 아래와 같은 보안그룹이 생성됩니다. 4개 포트 개방에 8줄이 생성된 이유는, 사실 AWS상에서 미확인 상의 이유로 0.0.0.0/0을 가지고 만들게 되면 ::/0라는 것도 동시에 생성되서 그렇습니다.

HTTP TCP 80 0.0.0.0/0
HTTP TCP 80 ::/0
사용자 지정 TCP 규칙 TCP 8888 0.0.0.0/0
사용자 지정 TCP 규칙 TCP 8888 ::/0
SSH TCP 22 0.0.0.0/0
SSH TCP 22 ::/0
사용자 지정 TCP 규칙 TCP 20 - 21 0.0.0.0/0
사용자 지정 TCP 규칙 TCP 20 - 21 ::/0

      12) 그렇게 '보안그룹'까지 설정을 마친 뒤 '검토'에 들어간 뒤 '시작'을 누르게되면 '키 페어 생성' 팝업이 뜰 것입니다. '새 키페어 생성'이 처음 만드셨을 경우 기본적으로 선택이 되어 있으실 텐데 '키 페어 이름'을 입력하시고 '키 페어 다운로드'를 누르시면 '지정하신 키 페어 이름.pem'파일이 자동적으로 다운로드 될 것입니다. 이 .pem파일이 나중에 AWS로그인에 필요한 파일이 되니 정확한 위치에 잘 저장하셔야 합니다. 이 .pem파일이 없을 경우 AWS에 관리자로 접속할 수 없습니다.

      13) 키 페어까지 다운로드가 완료되었다면, 새 인스턴스가 만들어집니다. 쉽게 말해 아마존 서버실에 만드신 분의 컴퓨터가 가상으로 생성된다고 생각하시면 됩니다. 이제 시작과정을 거쳐서 몇 분 뒤면 제대로된 linux 컴퓨터 한대가 작동되는 상태입니다.

      14) 인스턴스는 몇 분마다 갱신되는 퍼블릭 IP를 가지고 있습니다. 개인적으로 쫄려서 실험해보지는 않았습니다만 이 상태로 사용할 시 퍼블릭 IP사용에 대한 요금이 청구된다고 하며, 이를 방지하기 위하여 왼쪽 메뉴에서 '탄력적 IP'를 선택하여 줍니다.

      15) '새 주소 할당'을 눌러주시고 그냥 바로 '할당'을 다시 눌러주시면 탄력적 아이피가 하나 생성이 됩니다.

      16) 이후 '새 주소 할당' 옆에 있는 '작업'에서 '주소 연결'을 눌러주시고 {리소스 유형: 인스턴스, 인스턴스: 방금 만든 인스턴스(현재 하나의 인스턴스밖에 만들지 않았으므로 그냥 클릭하면 나오는 거 하나), 프라이빗 IP: 그냥 클릭시에 아래 하나 나오는 IP}를 차례로 선택해 주신 뒤에 '연결'을 눌러주시면, 제 인스턴스에 퍼블릭으로 접속할 수 있는 IP가 생성된 것입니다. 만약 이 과정을 거치지 않으시면 aws에 cli로 연결시나, ftp서버 연결 시 매번 바뀌는 public ip를 잡아서 연결해야 하지만, 이 과정 이후에는 단 하나의 ip로 제 인스턴스가 연결됩니다.

 

 

 

 

처음에 생각했던 것보다 글이 엄청 길어지네요.. CLI연결이나 그 이후 부분은 차후에 다시 포스팅 하도록 하겠습니다.

+ Recent posts