amazon web service

AWS

Amazon Web Service라는 업계 1위 클라우드 플랫폼이다. 클라우드 플랫폼이라 함은 서버자원을 할당시켜주는 일을 하는 것이라고 말할 수 있다.

아마존이 쇼핑몰을 처음 만들 때, 서버를 구축해주는 괜찮은 곳이 마땅치 않았었다. 그래서 대기업 같은 경우 웹사이트 등을 만들 때 다른 불안정한 곳에 돈을 주고 맡길 바에 차라리 본인이 만들겠다고 해서, IDC라고 데이터센터를 직접 만들어서 랙 유닛 단위로 데이터 서버를 만들어서 엄청난 양의 하드 디스크를 넣는 곳을 마련한다. 즉, 대기업에서는 자체적으로 IDC를 운영한다. 그렇게 해서 서버를 만들어 놓는다. 그렇게 물리적으로 서버를 관리하게 하는 것이다.

이 과정이 너무 귀찮아서 가상서버호스팅을 이용하는 경우가 있다. 아마존이 자체적으로 이러한 데이터 서버를 구축을 하였다. 처음 목적은 아마존 사이트를 운영하기 위함이었지만, 이것이 비효율적이라고 꺠닫게 된 아마존은 다른 가상서버호스팅을 제공해주는 곳처럼 남는 서버 자원을 다른 필요한 사람들에게 돈을 받고 팔기 시작하였다. 이는 편의성과 보안성이 뛰어나게 하여 많은 사람들이 이용하게 되었다.

AWS에 어플리케이션을 올리기 전

Browser -> localhost(127.0.0.1) -> runserver -> Django

AWS에 어플리케이션을 올릴 때 (서버상)

Browser -> AWS -> runserver -> Django

AWS 인스턴스를 처음 시작할 때, 보안그룹을 꼭 생성시켜주어야 한다. AWS를 거쳐서 Service를 제공할 때 SecurityGroup을 따로 지정해주지 않으면, 외부에서 연결을 거부하게 된다. Client -> AWS (SecurityGroup) -> Service

ssh

ssh이란, 시큐어 셸(Secure Shell)으로 네트워크 상의 다른 컴퓨터에 로그인하거나 원격시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다.

강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.

SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다.

chmod

change mode라는 뜻으로, 파일의 권한을 바꿔주는 역할을 한다. 보통 사람들은 ~/.ssh에서 본인의 암호화될 필요가 있는 파일을 보관한다. (private key files) chmod 명령을 사용하여 private key file을 공개적으로 볼 수 없는지 확인한다. 이는 다음 명령을 사용한다.

chmod 400 /path/private_key_file.pen

위 명령을 사용함으로써 권한을 제한할 수 있다.

그리고 ssh 명령을 사용하여 인스턴스에 연결한다. private_key_file.pem 파일과 username@public_dns_name을 지정한다. Amazon Linux AMI를 사용한 경우 usernameec2-user가 된다. 도메인 주소 같은 경우는 aws에서 public dns를 가리킨다.

ssh -i /path/private_key_file.pem ec2-user@~~~.amazonaws.com

scp

ssh는 컴퓨터에 접속할 때 쓰는 프로토콜인 반면, scpssh를 기반으로 암호화된 파일 전송을 할 수 있도록 만들어준 것이다. 이를 통해서 서버에 띄울 해당 프로젝트를 올리는 것이다.

다음은 이에 대한 명령어이다.

scp -i ~/path/private_key_file -r /path/local_project ubuntu@public_dns:/home/ubuntu/project

이후엔 ssh로 다시 한 번 서버 내부로 들어가서 프로젝트가 잘 전송되었는지 확인해봐야 할 것이다. 그리고 위 명령어에서 적은 /home/ubuntu/project로 들어가면 해당 프로젝트가 잘 들어가있는 것을 확인 할 수 있을 것이다.

이후 가상서버에 pipenv 설치

# Locale설정 (tab 누르고 OK에서 엔터)
-> sudo vi /etc/default/locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8

# update, upgrade
sudo apt-get update
sudo apt-get dist-upgrade

# zsh설치
sudo apt-get install zsh

# oh-my-zsh 설치
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

# root유저로 전환
sudo su

# ubuntu유저의 shell을 변경 (작은따옴표아님 유의!)
chsh ubuntu -s `which zsh`

# ~/.zshrc의 첫 번째 줄 주석 해제 (아래 부분)
export PATH=$HOME/bin:/usr/local/bin:$PATH

# exit후 다시 ssh접속

# pip설치 및 version다운
sudo apt-get install python-pip
sudo python -m pip install -U pip

# pipenv설치
sudo -H pip install -U pipenv

# pyenv설치
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

# vi ~/.zshrc에서 맨 아래에 추가
export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

# pyenv를 위한 requirements설치
# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev

# exit후 다시 ssh접속

# pyenv로 필요한 파이썬 버전 설치
pyenv install 3.6.5

# 이제 pipenv install하면됨 ^^