AWS - EC2 시작하기(2)

이솔·2021년 10월 25일
9

AWS 서비스

목록 보기
3/3
post-thumbnail

1. EC2 본격 실습하기

자 이제부터 EC2에 배포를 해볼 것이다.

- EC2 인스턴스 생성하기

  1. 가용 영역 설정
    AWS에서 로그인을 하고나면, 오른쪽 위에 지역을 설정할 수 있다.
    우리는 코리안이므로, 서울로 설정해주자.

1. AWS의 상단 서비스에서 컴퓨팅 - EC2를 누른다.

2. 중앙 부분에 인스턴스 시작 버튼을 눌러 인스턴스를 생성한다.

3. AMI를 선택한다.

우리는 Ubuntu Server를 이용해 실습할 것이다. (프리티어인지 체크!)

+ AMI(Amazion Machine Images) 란?
: EC2 인스턴스를 그대로 저장해서 재사용 할 수 있도록 만든 것.
현재 서버의 하드웨어, 소프트웨어 설정, 어플리케이션 등 모든것을 그대로 사용가능하다.

Amazon Image는 크게 3가지로 나뉜다.
1) private : 개인 (비공개 이미지 파일로 개인만 사용 가능)
2) public : 누구나 (공개된 이미지로 누구나 사용 가능)
3) Marketplace : 이미지를 판매하고 구매 가능

4. 메모리, 스토리지 등 여러가지를 직접 고를 수 있다.

우리는 프리티어인 두번째걸로 체크!

5. 다음을 누르면 여러가지 설정들이 뜨는데, 각자 서비스에 따라 원하는 설정을 해주면 된다. 우리는 따로 바꾸지 않고 보안 그룹까지 다음을 눌러준다!

  • 보안 그룹(Security Group)이란?
    : 보안 그룹은 AWS에서 임대한 인스턴스의 가상 방화벽이다.
    - 인바운드(Inbound)
    : 인바운드 규칙은 EC2인스턴스로 들어오는 트래픽에 대한 규칙이다.
    - 아웃바운드(Outbound)
    : 아웃바운드 규칙은 데이터를 인스턴스에서 내보낼때 해당 트래픽에 대한 규칙이다. 기본값은 모든 트래픽을 허용한다.
    따라서, 우리는 인바운드 설정에 집중해주면 된다.
    웹 서비스라면 HTTP 프로토콜 전용 포트인 80번 포트의 통신을 열어준다.
    WAS/WEB 서버는 8080 포트, RDS는 3306 포트를 사용한다. (포트번호는 약속이므로 예외가 있을 수 있다.)

우리가 사용하는 코드에서 bin/www경로를 보면 3000번 포트를 사용하는 것을 확인할 수 있다.
사진에는 없지만 3000번 포트에 대한 접근도 열어두도록하자.

6. 검토 및 시작을 누르면 인스턴스 생성 완료!

기존 키 페어 또는 새 키 페어를 생성하라고 뜨는데, 기존의 키가 있다면 기존 키를, 없다면 새 키를 만들어 주면 된다.
새키를 만들 때는 RSA로 설정하고 이름을 작성한 뒤 키 페어 다운로드를 누른다.
이때 만든 키는 아주아주 중요하므로 잘 저장해놓도록한다.
(안내 문구에도 적혀있듯, 본인의 EC2에 접근하기 위해서는 키페어로 인증을 하여야하고, 그게 없으면 로그인 할 수 없다.)

7. 조금만 기다리면 이렇게 생성된 EC2를 확인할 수 있다.

Elastic IP 설정하기

이대로도 EC2를 사용할 수 있지만, EIP를 설정하면 더 편리하게 EC2를 사용할 수 있다.

  • Elastic IP(탄력적 IP)란?
    : 탄력적 IP 주소는 동적 클라우드 컴퓨팅을 위해 고안된 고정 퍼블릭 IPv 주소이다.
    모든 인스턴스 또는 네트워크 인터페이스에 탄력적 IP주소를 연결 가능하다.
    프리티어에서는 계정당 하나의 EIP를 지원한다.

  • EIP를 사용하는 이유?
    : EIP없이 EC2 인스턴스를 생성하여 서버를 실행시키면 동적 IP를 할당해준다.
    인스턴스를 중지-실행 시킬때마다 IP가 변경되어 버린다. 이게 왜 귀찮냐면, 요청할때마다 IP주소를 바꿔입력해야하는 번거로움이 있기 때문이다.

  • EIP 사용 요금제 (주의사항)
    : AWS 프리티어에서는 EIP 한 개는 무료로 사용 가능하다.
    해당 인스턴스에 추가로 EIP를 연결하게 되면 추가 EIP당 시간에 비례하여 요금이 부과된다.

    EIP를 사용하면서 주의해야할 점은 EIP를 연결한 EC2 인스턴스를 종료하게 되면 오히려 돈이 발생한다는 점이다.
    - EIP가 EC2 인스턴스에 연결되어 있는 경우
    - EIP가 연결된 인스턴스가 실행중인 경우
    - 인스턴스에 연결된 EIP가 하나뿐인 경우

    위의 세가지 경우를 제외할 때 돈이 부과되게 된다. 따라서 EIP를 EC2와 연결하지 않고 켜놓거나, EIP과 연결된 EC2를 종료시키는 행위를 주의하자!

1. 왼쪽 네비바에서 탄력적 IP를 누른다.

2. 탄력적 IP 주소 할당 버튼을 누른다.

3. 네트워크 경계그룹이 본인이 사용하고자 하는 EC2와 같은지 확인해주고 할당을 누르면 된다.

4. 해당 EIP를 체크해준후 작업-탄력적 IP 주소 연결을 누른다

5. 인스턴스를 클릭해보면 이렇게 만들어놓은 EC2가 나오는데, 여기서 원하는 EC2을 선택하고 연결해주면 된다.

6. 여기서 빨간색 네모로 되어있는 곳에 나오는 IP가 본인의 고정 IP 주소가 되는 것이다.

7. EIP 설정 완료!

키 변환하기

1. 미리 설치해뒀던 putty gen을 연다.

2. RSA로 설정을 한 상태에서 Load를 누른다.

3. 해당 부분을 All Files로 바꾸고,앞서 EC2를 생성할 때 만들었던 키 페어(.pem)를 찾아 넣어준다.

4. Save Private Key를 누르고, 경로를 지정해주면 .ppm으로 변환된 키가 생성된다.

EC2 접속하기

1. 미리 설치해뒀던 putty를 연다.

만들어 뒀던 EC2를 확인해보면퍼블릭 IPv4 주소를 알 수 있다. (정상적으로 EIP를 연결했다면, EIP의 주소일 것이다.)

2. HostName 부분에 해당 주소를 넣는다.

3. SSH - Auth를 누르고, 아까 변환해뒀던 프라이빗키(.pem)을 찾아 넣고, Open을 누른다.

4. 이렇게 새로운 창이 뜨게 되는데, ubuntu를 입력해준다.

5. 이런식으로 결과가 출력된다면 EC2 접속에 성공한 것이다!

EC2에 프로젝트 배포하기

1. EC2에서 또한 git hub를 사용할 수 있다.

// 우분투 관리 소프트웨어 최신버전 업데이트
sudo apt-get update 

//깃 설치
sudo yum install git
sudo apt-get install git

//깃 설치 확인
git --version
//프로젝트 가져오기
git clone 본인 repository주소

파일이 없다면 https://github.com/soleu/AWS_Study에서 pull을 받아서 실습해보도록 하자.

위와 같은 결과가 나오지 않고 권한 문제가 발생한다면, 아래 코드를 입력하고 비밀번호를 두번 입력한다.

ssh-keygen -t rsa -C "깃허브메일주소"

2. 깃 허브에서 성공적으로 가져왔다면, 로컬에서와 동일하게 프로젝트의 package.json경로까지 들어가서 yarn start를 하여 서버를 실행시키면 된다.

여기까지 오면 EC2 배포가 완전히 끝난 것이다!
배포한 EC2를 테스트 해보자.

배포한 프로젝트 테스트하기

EC2로 올린 서버에 접근하는 URI는 아까 EC2로 접속할 때 사용했던 IPv4 주소를 사용한다.
내 경우에는
http://13.209.129.17:3000 이 base URL이 된다. 보안 그룹을 필자와 동일하게 설정하였다면 중간 IPv4주소만 본인 것으로 바꿔주면 된다.

그 뒤로는 localhost:3000/api/user처럼 본인이 만든 경로대로 api를 호출하면 된다.

postman으로 테스트 해보면 로컬로 호출할 때와 같은 결과를 확인 할 수 있다.

항상 컴퓨터를 켜놓고 있을 순 없잖아~

우리가 방금과같이 EC2를 putty를 사용해 ubuntu로 서버를 켜게되면 putty를 닫으면 서버도 종료되게 된다.
우리의 서비스를 계속 이용하게해야하는데 그렇다고 컴퓨터를 24시간 내내 켜두고 있을 수는 없지않은가?!
그럴때 필요한 무중단 배포!
무중단 배포를 하게되면 특정 명령어를 키기 전까지는 서버를 계속 유지할 수 있게 해준다.

  • 서버 개발자로서 Node.js는 싱글 스레드 기반인데 멀티 코어 혹은 하이퍼 스레딩을 사용하고 싶을때도 사용할 수 있다.

대표적인 무중단 배포 명령어는 pm2nginx가 있다.

//pm2 설치
npm install pm2 -g
//pm2 시작
pm2 start ./bin/www --name "원하는 이름명"
//모니터링
pm2 monit
//목록 확인
pm2 list

pm2로 띄워보고 postman으로 결과 확인해보자.

2. 백엔드! 이것까지 알면 좋다!

  • 배포 자동화(Deployment Automation)?
    : 이전 장에도 언급했듯, 개발 사이클은 대부분
    개발 - 테스트 - 배포 의 단계를 거친다. 중간마다 추가,수정을 하고 다시 배포단계를 거쳐야하는데 이 부분이 생각보다 번거롭다고 느끼는 시점이 온다.
    이러한 불필요한 배포라는 반복작업을 자동화시키는 것을 배포 자동화라고한다.

  • 자동화의 개념 두가지

    • CI(Continuous Integration, 지속적인 통합)
      : 개발을 하면서 코드에 대한 통합을 지속적으로 진행함으로서 품질을 유지하자는 개념

    • CD(Continuous Deployment, 지속적인 배포)
      : 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 지속적으로 관리하자는 개념

      간단히, CI = 빌드 및 테스트 자동화, CD = 배포 자동화
      라고 기억해도 무방하다.

  • 젠킨스! 써본사람은 없어도 한번만 쓴사람은 없다!
    : 젠킨스(Jenkins)는 빌드, 테스트,배포 등의 지속적인 통합(CI)을 자동화 해주는 툴이다.

    • 자동화 테스트 수행
    • 각종 배치 작업의 간략화
    • Build 자동화의 확립
    • 코드 표준 준수여부 검사

      우리의 작업을 쉽게할 수 있도록 도와주는 선량한 젠킨스지만, 무지성으로 코딩하다가는 화난 젠킨스의 모습을 볼 수 있다.

자동화까지는 심화단계로 개념만 먼저 알아둬도 추후에 많은 도움이 될 것이다.
현재는 EC2의 원리나 간단한 사용방법에 대해서만 이해해도 좋을 것 같다.

그럼 20000!

profile
코딩왕 지망생

0개의 댓글