본문 바로가기
DevOps/Terraform, Ansible

[실습] 1. AWS CLI를 이용해서 EC2 인스턴스 올려보기 (aws cli 소개, EC2 인스턴스 만들기, SSH 접속)

by 잉크드 2023. 7. 20.
반응형

이 글에서는, AWS가 제공하는 도구 중 하나인 AWS CLI(Command Line Interface)를 사용하여 EC2 인스턴스를 시작하고, SSH로 해당 인스턴스에 접속하는 과정을 다뤄보겠습니다.

1. AWS CLI 소개

AWS CLI는 아마존 웹 서비스를 커맨드 라인에서 사용, 관리할 수 있도록 해주는 도구입니다. 개발자들이 소프트웨어 개발, 배포, 관리 과정을 자동화하고, AWS 리소스를 프로그래밍 방식으로 제어할 수 있게 해줍니다. AWS CLI는 다양한 AWS 서비스에 대한 직접적인 컨트롤을 가능하게 해주며, 이를 통해 EC2, S3, DynamoDB, Lambda 등과 같은 서비스를 명령행에서 직접 관리할 수 있습니다. 또한, 스크립트를 통해 이러한 서비스들을 조작하는 것이 가능하므로, 복잡한 작업 흐름을 자동화하는데 유용하게 사용될 수 있습니다.

AWS CLI 설치

사용 중인 운영체제에 따라서 이 과정은 조금씩 다릅니다. 해당 내용은 AWS 공식 문서를 통해서 확인할 수 있습니다.

pip를 이용하여 AWS CLI를 Ubuntu에 설치하는 과정은 다음과 같습니다.

1. 먼저, 터미널을 열어 업데이트를 수행합니다.

sudo apt-get update

2. Python 패키지 관리자인 pip를 설치합니다.

sudo apt-get install python3-pip -y

3. pip를 통해 AWS CLI를 설치합니다.

pip3 install awscli --upgrade --user

4. 환경변수에 AWS CLI 등록

echo 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

5. AWS CLI가 올바르게 설치되었는지 확인합니다.

aws --version

아래와 같이 나온다면 성공입니다.

버전은 다를 수 있습니다.

2. EC2 인스턴스 만들기

EC2 인스턴스는 클라우드에서 가상 서버를 실행하는 것을 의미합니다. EC2 인스턴스를 생성하고 시작하는 방법에 대해 소개하겠습니다.

2.1 'aws configure', 동작 검증

우선 시작하기에 앞서 'aws configure' 명령어를 통해서, AWS에 접근할 수 있도록 자격증명을 설정해줘야 합니다.

붉게 표시된 곳에 본인의 자격증명을 입력하면 됩니다.

이후 정상적으로 접근, 동작하는지 IAM 사용자 계정 목록을 출력함으로써 검증해보겠습니다.

aws iam list-users

실행 결과 예시입니다.

2.2 EC2 인스턴스 시작을 위한 정보 작성

EC2 인스턴스를 시작하려면 몇가지 정보가 필요합니다. AMI ID, 인스턴스 유형, 보안 그룹, SSH 키 페어 등이 그 예시입니다. AWS CLI를 사용하여 앞서 언급한 4가지 정보를 얻어내고, 작성해보겠습니다.

 

예제로 사용할 amazon linux 2의 AMI ID를 가져오는 aws cli 명령어는 아래와 같습니다. 실행결과는 작성일 기준, 'ami-0ea4d4b8dc1e46212' 입니다.

aws ec2 describe-images --filters "Name=description, Values=Amazon Linux 2 Kernel 5.10 AMI * x86_64 HVM gp2" --query 'sort_by(Images, &CreationDate)[-1].ImageId' --output text

인스턴스 유형은 Free-tier인 't2.micro'를 사용하겠습니다.

 

보안 그룹의 정보를 얻기에 앞서서 생성하는 과정이 필요하고, 그 일련의 과정은 아래와 같습니다.

더보기

1. VPC 정보를 불러옵니다.

aws ec2 describe-vpcs

2. VPC ID를 이용해서 새로운 보안 그룹을 생성합니다.

aws ec2 create-security-group --group-name HelloWorld --description "HelloWorld Demo" --vpc-id <YOUR-VPCID>

3. 보안 그룹에 새로운 인바운드 규칙을 추가합니다.

aws ec2 authorize-security-group-ingress --group-name HelloWorld --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-name HelloWorld --protocol tcp --port 3000 --cidr 0.0.0.0/0

4. 정상적으로 추가되었는지 확인합니다.

aws ec2 describe-security-groups --group-name HelloWorld --output text

SSH 키를 생성하고, 이를 서버에 다운로드합니다. 그리고 다운로드받은 .pem 파일의 권한을 400으로 수정합니다.

aws ec2 create-key-pair --key-name HelloWorldDemo --query 'KeyMaterial' --output text > ~/.ssh/HelloWorldDemo.pem
chmod 400 ~/.ssh/HelloWorldDemo.pem

2.3 EC2 인스턴스 시작

이제야 모든 준비가 완료되었습니다. EC2 인스턴스를 시작해보겠습니다.

aws ec2 run-instances --instance-type t2.micro --key-name <KEYPAIRNAME> --security-group-ids <SecurityGroupID> --image-id <AMI-ID>

아래 명령어의 결과값이 'SYSTEMSTATUS    ok' 라면 인스턴스가 준비된 것입니다.

aws ec2 describe-instance-status --output text | grep -i SystemStatus

3. SSH를 이용해 EC2 인스턴스에 접속

3.1 EC2 인스턴스의 DNS명 알아내기

SSH로 EC2 인스턴스에 접속하려면, 우선 해당 인스턴스의 DNS명을 알아야 하는데, 아래의 명령어를 통해서 알아낼 수 있습니다.

aws ec2 describe-instances --instance-ids <INSTANCE_ID> --query "Reservations[*].Instances[*].PublicDnsName"

3.2 SSH 접속

이제 SSH 명령어를 통해서 접속해보겠습니다.

ssh -i ~/.ssh/HelloWorldDemo.pem ec2-user@<DNS_NAME>

터미널에 표기되는 사용자명이 바뀐 것을 확인할 수 있습니다.

이번 글에서는 AWS CLI를 이용해서 EC2 인스턴스를 시작하고, SSH를 통해서 접속하는 과정을 소개해봤습니다. 이 과정이 귀찮게 느껴지신다면 다행입니다. 사실 이 글을 작성한 이유가 Terraform을 사용하지 않고, 인프라를 배포하는 과정이 얼마나 귀찮은지 보여드리기 위함입니다. 다음 글에서는 Terraform을 이용해서 EC2 인스턴스를 배포하는 방법을 다뤄보겠습니다.

 

EC2 인스턴스의 경우 실습이 끝난 후 바로 삭제하시기 바랍니다. 남겨두면 사용량에 따라 과금될 수 있습니다.

 

댓글