본문 바로가기
개발

배포 서버 구성하기 (1) - 배포 서버 ec2 올리기

by 시롱케이 2024. 8. 6.

배포 관련 작업을 할 서버를 구성하려고 한다.

배포 서버엔 docker로 사설 레지스트리를 구성하고, 용량이 허락한다면 teamcity까지 설치해서 배포해보려고 한다.

 

먼저, aws 프리티어로 ec2를 올려보자.

 

Launch an Instance

1. 인스턴스 기본 설정

region은 서울로, OS는 ubuntu로 생성하려고 한다.

AWS console로 접속해, ec2 메뉴에서 '인스턴스 시작'을 누르면 생성할 수 있다.

 

 

먼저, 원하는 ec2 이름을 설정해주고, OS를 설정해준다.

 

이름은 통용되는 규칙은 없는 걸로 알고 있어서 구분 잘 되게만 지어주면 될 것 같다.

이번엔 profile과 인스턴스 여러개 있을 수 있다는 가정 하에 distribution-dev-01로 짓겠다.

 

ubuntu를 선택하면 AMI는 자동으로 설정된다. 옆에 '프리 티어 사용 가능' 표시도 확인하자.

아키텍처는 Arm으로 하면 현재 프리 티어 지원되는 인스턴스 유형이 없길래 x86으로 했다. 

자동 설정되는 부분들도 뭘 의미하는건지 찾아봤다.

  • HVM: AWS가 사용하는 가상화 유형 중 하나로, '하드웨어 가상 머신'을 말한다. 다른유형으로는 PV(반가상화)가 있다. 참고
  • SSD Volume Type: ec2를 생성하면 EBS(Elastic Block Store)가 함께 제공되는데 컴퓨터에서 쓰는 로컬 하드 드라이브 역할을 한다. 그 볼륨이 SSD 유형으로 제공되는 것을 의미한다. 참고
  • 아키텍처: 프로세스 아키텍처로 성능과 비용, 호환성 등에 영향을 미친다. x86과, Arm이 있다. x86은 인텔과 AMD에서 개발한 것이고 Arm은 AWS에서 자체 개발한 칩이다. 잘 설명해 둔 블로그가 있어 첨부한다. AWS EC2에서 x86과 ARM 인스턴스
  • EBS: EC2 인스턴스용 영구 스토리지. 인스턴스의 중지나 종료에 상관없이 데이터가 유지된다. AWS Storage엔 그 밖에도 인스턴스 스토어, EFS 파일 시스템, S3가 있다.
  • t2.micro: t2는 AWS에서 제공하는 기본 인스턴스 유형이고, micro는 CPU, RAM 등에 차이를 둔 t2 유형 중 하나이다. 세부 내용은 아래 사진과 같다.

 

2. SSH 연결을 위한 키 페어 설정

ec2 인스턴스에 접속하기 위한 key pair 설정을 해줘야 한다.

새로 생성하거나, 생성해 둔 key pair를 사용하면 된다.

key pair 생성하면 pem 혹은 ppk 파일을 다운받을 수 있는데 SSH 접속시 사용해야 하므로 보관해둬야 한다.

 

여기선 ssh 접속용으로 바로 key pair생성을 유도하지만, 원격 서버에 접속하는 방법은 여러가지가 있다.

  • key pair로 인증해 ssh 접속
  • 아이디 비밀번호로 인증해 ssh 접속
  • AWS SSM 사용해서 ssh 접속 없이 연결

 

SSH 접속과 AWS SSM 접속의 차이는 아래와 같다.

  • SSH: 네트워크를 통해 원격 시스템에 안전하게 접근하고 관리할 수 있는 암호화된 프로토콜. SSH 기본 port는 22다.
  • SSM: AWS에서 SSH 없이 private ec2 인스턴스에 바로 접근할 수 있도록 도와주는 기능. SSH 허용을 위한 몇가지 설정을 하는 과정 없이 바로 SSH 접근한 것처럼 연결할 수 있게 해준다.

 

3. 네트워크 설정

다음으로 네트워크 설정을 하면 된다.

보안 그룹은 기존것이 있다면 그대로 사용하면 되고, 새로 생성해야 한다면 아래와 같이 설정하면 된다.

 

SSH 접속과 https://<배포서버 ip> 두 가지 모두 접근할 수 있게 쓸 예정이기 때문에 SSH 트래픽, HTTPS 트래픽, HTTP 트래픽 모두 허용했다.

그리고 일단은 집에서만 사용할 예정이라 IP는 집으로 한정했다. 외부에서도 쓸거라면 '위치 무관'으로!

 

윗 부분을 보면 알겠지만 VPC, 서브넷, 퍼블릭 IP는 기본으로 자동 설정해준다.

  • VPC: 격리된 가상 네트워크라고 보면 된다.
  • Subnet: VPC 안에서 IP 주소 범위를 더 작게 관리할 수 있게 세분화해두는 것을 말한다. VPC 안에 여러 Subnet을 둘 수 있고, Subnet 안엔 ec2 같은 여러 AWS 자원을 위치시킬 수 있다.
  • 블릭 IP: 인스턴스에 직접 접근할 수 있는 public IP를 자동생성해준다. 이 public IP는 Bastion IP가 아니다. 

 

 

설정하면서 헷갈렸던 부분은 네트워크 설정에서 보이는 퍼블릭 IP가 bastion IP 인 줄 알았으나 다른 것이라는 점이었다.

같은 것인 줄 알았는데..

저 퍼블릭 IP 자동할당은 자동할당 기능이 켜져 있어서 생성되는 것이고, 아래에서 SSH에 더해서 HTTPS, HTTP 까지 허용해줬기 때문에

지금 생성하는 인스턴스는 인터넷으로 접근 가능한 퍼블릭 인스턴스로 생성하는 셈이 된다.

 

Bastion Host는 프라이빗 인스턴스 생성 후 (처음부터 SSH만 허용하게 생성하거나, 아니면 생성 후 변경하거나) 따로 Bastion Host를 생성해서 보안 그룹에 연결해줄 수 있다. 그러면, 오직 Bastion Host를 통해서만 ec2 인스턴스(프라이빗)에 접근할 수 있는 구조가 된다.

Bastion Host 설정은 추가로 정리해보겠다.

 

4. 스토리지 구성

스토리지는 gp3로 설정했다.

 

스토리지 구성시 새 볼륨 추가를 하면 비용 청구될 수도 있다.

 

 

여기까지 하면 프리티어로 인스턴스 생성은 끝난거다.

 

보안 그룹 인바운드 규칙 설정

인스턴스 생성 후 보안 그룹에 필요한 인바운드 규칙을 추가해주면 된다.

  • SSH 22
  • HTTP 80
  • HTTPS 442
  • 모든 ICMP - IPv4

'모든 ICMP - IPv4'는 ping 테스트를 해보려고 추가했다.

ping <ec2 public ip>

ping 테스트로 정상적으로 접근가능한 것 확인!

 

ssh -i <보관해둔 key pair 파일 경로> <인스턴스 OS 명>@<인스턴스 public ip>

SSH 접속도 정상적으로 되는 것까지 확인하면 끝!

 

 

 

이렇게 ec2 인스턴스를 생성하고, 비용 발생 방지를 위해서 중지했다 재부팅하면 되는데

이 때 주의할 점은 Elastic IP나 EBS 볼륨에 의해 비용이 발생할 수 있다는 점이다.

  • Elastic IP: 인스턴스를 중지했다가 재부팅하면 ip 주소가 변경되는데, 고정 ip를 생성해서 사용할 수 있도록 지원하는 기능
  • EBS Volume: 데이터를 저장할 수 있는 디스크 볼륨

 

Elastic IP 잘 모르고 썼다가 0.18 달러 발생했다..

 


참고

[1] https://chucoding.tistory.com/entry/AWS-EC2-Amazon-EBS-%EB%B3%BC%EB%A5%A8-%EC%9C%A0%ED%98%95-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0

[2] https://chucoding.tistory.com/16

[3] https://musma.github.io/2019/11/29/about-aws-ssm.html

[4] https://nayoungs.tistory.com/entry/AWS-%EB%B0%B0%EC%8A%A4%EC%B2%9C-%ED%98%B8%EC%8A%A4%ED%8A%B8Bastion-Host

[5] https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html

[6] https://velog.io/@clevelog/AWSec2-%ED%94%84%EB%A6%AC%ED%8B%B0%EC%96%B4%EB%AC%B4%EB%A3%8C-EC2-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

'개발' 카테고리의 다른 글

Message Brokers :: RabbitMQ와 Kafka  (0) 2024.08.20