AWS CLI로 EC2 인스턴스 생성해 보기

2021.09.11

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 AWS CLI로 EC2 인스턴스를 생성해 봤습니다.

CLI에서 Role 전환

aws sts get-caller-identity

다음 명령어로 현재 Role 상태를 확인합니다.

export AWS_DEFAULT_PROFILE=role
aws sts get-caller-identity

다음 명령어로 Role 전환을 전환하고 다시 확인합니다. CLI 환경 설정과 Role 전환에 대한 부분은 아래 링크를 참고해주세요.

CLI에서 VPC 생성

aws ec2 create-vpc --cidr-block 10.10.0.0/16

위 명령어로 VPC를 생성하면 이미지와 같은 VPC 정보가 반환 됩니다.

CLI에서 서브넷 생성

aws ec2 create-subnet --vpc-id vpc-071ecca730edf705f \
--cidr-block 10.10.0.0/24 \
--availability-zone ap-northeast-1a

  • aws ec2 create-subnet --vpc-id vpc-071ecca730edf705f : 서브넷을 만들 VPC의 ID
  • --cidr-block 10.10.0.0/24 : 서브넷의 CIDR
  • --availability-zone ap-northeast-1a : 서브넷의 가용영역

CLI에서 인터넷 게이트웨이 생성

aws ec2 create-internet-gateway

인터넷 게이트웨이를 생성하고 인터넷 게이트웨이 아이디를 확인합니다.

aws ec2 attach-internet-gateway --internet-gateway-id igw-045ff17180b53ee72 \
--vpc-id vpc-071ecca730edf705f

이어서, 인터넷 게이트웨이와 VPC를 연결합니다.

  • --internet-gateway-id igw-045ff17180b53ee72 : 인터넷 게이트웨이 아이디를 입력합니다.
  • --vpc-id vpc-071ecca730edf705f : VPC 아이디를 입력합니다.

CLI에서 Route Table 생성

aws ec2 create-route-table --vpc-id vpc-071ecca730edf705f

다음 명령어로 Route table을 생성합니다.

aws ec2 create-route --route-table-id rtb-0cbfefdc118d0dd40 \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-045ff17180b53ee72

다음 명령어로 Route table에 인터넷 게이트웨이 0.0.0.0 경로를 뚫어줍니다.

결과값 리턴 트루가 반환 됩니다.

이제 Route table에 서브넷을 연결해 보겠습니다.

aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-071ecca730edf705f" --query "Subnets[*].{ID:SubnetId,CIDR:CidrBlock}"

서브넷의 아이디는 다음 명령어로 확인할 수 있습니다.

aws ec2 associate-route-table --subnet-id subnet-05b8922f18096a96d --route-table-id rtb-0cbfefdc118d0dd40

서브넷을 Route table에 연결합니다.

aws ec2 modify-subnet-attribute --subnet-id subnet-05b8922f18096a96d --map-public-ip-on-launch

다음 명령어를 통해, EC2 공용 IP 주소를 자동으로 할당하도록 설정합니다. EC2 인스턴스의 경우 재시작 하면 IP 주소가 변경 되기 때문에, 반드시 설정 해야합니다. 그게 아니면, 탄력적 IP 주소를 인스턴스와 연결해야 합니다.

CLI에서 보안그룹 생성

aws ec2 create-security-group --group-name "cli-security-group" --description "cli-security-group" --vpc-id vpc-071ecca730edf705f

다음 명령어로 보안그룹을 생성합니다.

aws ec2 authorize-security-group-ingress --group-id sg-0f0b191571a92a82c --protocol tcp --port 22 --cidr 0.0.0.0/0

이어서 보안그룹 22포트(ssh)를 어디서나 들어올 수 있게 0.0.0.0으로 뚫어줍니다.

키 페어 생성

aws ec2 create-key-pair --key-name clikeypair --query 'KeyMaterial' --output text > clikeypair.pem
chmod 400 clikeypair.pem

키 페어를 생성하고, 권한을 줍니다.

CLI에서 EC2 인스턴스 생성

aws ec2 describe-images --owners self amazon

다음 명령어로 AMI를 찾을 수 있습니다. 적당한 AMI를 선택합니다.

aws ec2 run-instances --image-id ami-00f045aed21a55240 --count 1 --instance-type t2.micro --key-name clikeypair --security-group-ids sg-0f0b191571a92a82c --subnet-id subnet-05b8922f18096a96d

다음 명령어로 EC2 인스턴스를 생성합니다.

인스턴스 생성시 출력되는 인스턴스 아이디를 메모해 둡니다.

aws ec2 describe-instances --instance-id i-09c59fe0f9ebc0072

위 명령어로 인스턴스의 상태가 running가 될 때 까지 기다립니다.

ssh -i "clikeypair.pem" ec2-user@3.112.195.154

조금 전 만들어뒀던 키와 EC2 아이피를 입력해서 ssh 접속을 시도합니다.

그럼 성공적으로 CLI에서 EC2 인스턴스로 접속한 것을 볼 수 있습니다.

aws ec2 terminate-instances --instance-ids i-09c59fe0f9ebc0072
aws ec2 delete-subnet --subnet-id subnet-05b8922f18096a96d
aws ec2 delete-route-table --route-table-id rtb-0cbfefdc118d0dd40
aws ec2 detach-internet-gateway --internet-gateway-id igw-045ff17180b53ee72 --vpc-id vpc-071ecca730edf705f
aws ec2 delete-internet-gateway --internet-gateway-id igw-045ff17180b53ee72
aws ec2 delete-security-group --group-id sg-0f0b191571a92a82c
aws ec2 delete-vpc --vpc-id vpc-071ecca730edf705f

EC2 인스턴스 및 보안그룹 삭제는 다음 순서로 삭제할 수 있습니다.

  • EC2 인스턴스 삭제
  • 서브넷 삭제
  • Route table 삭제
  • 인터넷 게이트웨이를 VPC에서 분리
  • 인터넷 게이트웨이 삭제
  • 보안그룹 삭제
  • VPC 삭제

참고