본문 바로가기

IT 개발자의 창고

AWS EC2 인스턴스 생성 및 접속

지난시간 생성한 public / private subnet 각각에 RHEL EC2 인스턴스를 생성하고, 접속해보자.

VPC 망 구성방법:

2022.04.28 - [IT] - Amazon Virtual Private Cloud 구성하기

 

또한, 이전 UI로 구성한 AWS EC2 생성 방법에 대해서는 다음을 참고한다.

2022.02.02 - [IT] - AWS - public subnet에 리눅스 서버 기동

2022.02.10 - [IT] - AWS - EC2 서버 접속 및 웹서버 실행

2022.02.16 - [IT] - AWS - 로컬 PC에서 내부망 리눅스 접속하기

 

 

먼저 public subnet에 EC2를 생성한다.

public-ec2를 RedHat linux로 구축한다.

이름은 public-ec2로 하여 Red Hat Linux를 설치한다.

 

장비 접속을 위한 키페이 설정 및 네트워크 설정

해당 EC2 인스턴스는 mycustom-subnet-public1-ap-northeast-2a 서브넷에 위치할 것이고, 보안그룹은 모든 TCP에 대해서 접근을 허용하는 mycustom-public-sg 를 사용한다.

퍼블릭 IP 자동할당을 활성화하여 공인 IP를 부여할 수 있으나, 다른 방법으로 IP 할당하기 위해 여기서는 비활성화로 넘어간다. 

 

여기서 장비 접속을 위한 키페어를 아직 생성하지 않은 경우, "새 키페어 생성"을 눌러서 "mycustom" 이라는 키페어를 생성 후 설정한다.

 

장비 접속을 위한 키페어를 설정한다.

키페어 이름은 "mycustom" 으로 하여 RSA, pem 형식으로 생성하면 자동으로 "mycustom.pem" 라는 이름의 키페어 파일이 PC에 저장된다. 이것은 차후 장비 접속을 위한 인증키이기에 잘 보관하고 있어야 한다.

 

public-ec2의 생성 및 기동되는 동안 다음과 같은 설정으로 private subnet에 EC2를 추가로 생성하도록 한다.

이름: private-ec2
애플리케이션 및 OS 이미지: Red Hat
키페어 이름: mycustom
VPC: mycustom-vpc
서브넷: mycustom-subnet-private1-ap-northeast-2a
방화벽(보안그룹): 기존 보안그룹 (mycustom-private-sg)

 

이와 같이 ec2 2개를 설정한 결과는 다음과 같다.

public-ec2와 private-ec2가 생성되었다.

ec2를 생성하는 동안 public-ec2는 상태검사까지 완료되었다. 이제 막 생성한 private-ec2는 초기화 단계를 거치고 있다.

 

이제 public-ec2에 접속하기 위한 공인 IP를 부여해보자

EC2 > 네트워크 및 보안 > 탄력적 IP 메뉴에서 "탄력적 IP 주소 할당"을 실행한다.

탄력적 IP 주소 할당

ap-northeast-2 네트워크에 Amazon IPv4 주소 풀에서 IP를 할당 받고, 해당 IP를 public-ec2에 연결한다.

할당받은 IP를 public-ec2로 연결한다.

 

이제 이렇게 생성된 장비에 접속해 보자. 반드시 다운로드한 키페어가 (-i option을 통해 키페어 이름 지정) 있어야 한다.

또한, private-ec2는 외부에 공개되어 있지 않기 때문에 public-ec2를 통해 접속할 것이다. 따라서, public-ec2에도 키페어를 upload 한다.

 

# public-ec로 키페어 업로드
$> sftp -i mycustom.pem ec2-user@52.78.68.136
Connected to ec2-user@52.78.68.136.
sftp> put mycustom.pem
Uploading mycustom.pem to /home/ec2-user/mycustom.pem
mycustom.pem                                                                     100% 1704   400.1KB/s   00:00
sftp> bye

# public-ec2 접속
$> ssh -i media-aws.pem ec2-user@52.78.68.136
[ec2-user@ip-10-0-2-95 ~]$ sudo yum update -y
...
완료되었습니다!
[ec2-user@ip-10-0-2-95 ~]$

public-ec2는 인터넷 게이트웨이를 통해 외부망과 연결되어 있어 update가 순조롭게 이루어진다.

 

다음으로 private-ec2에 접속해본다.

# private-ec2 접속
[ec2-user@ip-10-0-2-95 ~]$ ssh -i mycustom.pem ec2-user@10.0.136.137

# 외부 인터넷 망과 연결되어 있지 않아 update는 실패한다.
[ec2-user@ip-10-0-136-137 ~]$ sudo yum update -y
...
오류: repo 'rhel-8-appstream-rhui-rpms': Cannot prepare internal mirrorlist: Interrupted by signal 를 위해 메타데이타 내려받기에 실패하였습니다
[ec2-user@ip-10-0-136-137 ~]$

 

private-ec2에서 외부 인터넷과 연결하기 위한 방법으로 NAT 게이트웨이를 사용해보도록 한다.

(주의: NAT 게이트웨이를 사용할 경우 시간당, 데이터 전송량 당 요금이 부과된다. 단, 동일 리전으로의 데이터 전송에 대한 요금은 무료이다.)

 

주의사항을 인지하고 NAT 게이트웨이를 생성한다.

NAT 게이트웨이를 생성한다.

이름: mycustom-nat-gateway
서브넷: mycustom-subnet-public1-ap-northeast-2a
연결유형: 퍼블릭
탄력적 IP 할당 실행

 

할당된 NAT 게이트웨이를 mycustom-rtb-private에 라우팅을 추가한다.

0.0.0.0/0 모든 패킷을 대상으로 NAT 게이트웨이를 사용하여 연결될 수 있도록 추가한다.

 

기존 실패한 update 작업이 NAT 게이트웨이를 통해 인터넷 망과 연결되어 정상적으로 수행됨을 확인할 수 있다.

# AWS Client 다운로드 
[ec2-user@ip-10-0-136-137 ~]$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 44.7M 100 44.7M 0 0 56.6M 0 --:--:-- --:--:-- --:--:-- 56.5M

# 압축파일을 풀기 위해 unzip 설치 후 압축 해제
[ec2-user@ip-10-0-136-137 ~]$ sudo yum install -y unzip
[ec2-user@ip-10-0-136-137 ~]$ unzip awscliv2.zip

# AWS client 설치 
[ec2-user@ip-10-0-136-137 ~]$ sudo ./aws/install
You can now run: /usr/local/bin/aws --version
[ec2-user@ip-10-0-136-137 ~]$ aws --version
aws-cli/2.5.8 Python/3.9.11 Linux/4.18.0-348.el8.x86_64 exe/x86_64.rhel.8 prompt/off

[ec2-user@ip-10-0-136-137 ~]$ sudo yum update -y
...
완료되었습니다!
[ec2-user@ip-10-0-136-137 ~]$

 

테스트가 완료되었고, 추가요금이 부과되는 것을 방지하기 위해 NAT 게이트웨이는 라우팅 테이블에서 삭제 및 NAT 게이트웨이도 삭제한다.

 

EC2도 월단위 사용 시간이 제한이 되어 있으니, 사용하지 않는 인스턴스는 "중지" 하도록 하자.

"종료"는 인스턴스가 삭제되어 없어지는 것이고, "중지"는 인스턴스를 잠시 껐다가 나중에 다시 "시작" 할 수 있는 상태이다.

나중에 실습을 이어서 하려면 반드시 "중지", "시작"을 반복하도록 하자