본문 바로가기

Cloud/AWS

[AWS] Amazon CLI를 통해 EC2 인스턴스 생성

# Amazon # 아마존 #EC2 #CLI #AWS CLI 

 

 

AWS CLI란?

AWS를 사용하는 방법은 3가지 방법

ㆍAWS Management Console : 사용하기 쉬운 Amazon Web Service
ㆍCLI : Linux, Windows 또은 Mac 명령줄을 통한 AWS 서비스에 액세스
ㆍSDK : 주요 프로그래밍 언어에서 AWS 서비스에 API 호출

AWS CLI의 기본 구조는 3가지 파트로 구성되어 있습니다.

  • 명령 : 호출하는 서비스
  • 하위명령 : 해당 서비스에서 수행할 작업
  • 파라미터 : 작업 수행에 필요한 인수로 2개의 대쉬(--)가 붙는다.
  • 옵션 : CLI 작업을 실행할 때 지정할 수 있는 옵션을 제공함
    • query : 클라이언트 측에서 필터링된 결과 세트에 표시되는 필드를 제한하는 JMESPath 쿼리
    • filter : 서버 측에서 필터링된 결과 집합을 제한하는 데 사용
    • dry-run : 실제 요청을 하지 않고 권한 여부만 확인
    • output : 출력 형식 지정, json, text, table

AWS CLI를 통한 EC2 생성 아키텍트

 

Management Console을 사용하여 EC2(Bastion) 인스턴스 시작

Management Console을 사용하여 EC2 인스턴스를 생성한다.
해당 인스턴스는 AWS CLI를 사용할 수 있는 Bastion 서버입니다.

Management Console의 EC2 Service를 선택합니다.

Launch Instance > Launch instance를 클릭합니다.

1. AMI 목록에서 Amazon Linux 2 AMI를 선택합니다.

2. 인스턴스 유형은 t2.micro 인스턴스 유형을 사용합니다.

3. 인스턴스 세부 정보를 구성합니다.
  • Network : Lab VPC (미리 구성된 VPC로 자세한 내용은 다음에 다룰 예정이다.)
  • Subnet : Public Subnet
  • IAM role : Bastion-Role

4. 스토리지 추가 단계는 EBS(Amazon Elastic Block Store) 디스크 볼륨을 구성할 수 있다.

5. 태그를 사용하여 목적, 소유자 또는 환경 등 Key-Value로 구성합니다.

6. 보안 그룹 구성에서는 SSH 연결을 허용하는 새 보안 그룹을 만듭니다.

7. 인스턴스 시작 검토 후 생성

Bastion Instance가 생성된 것을 확인할 수 있습니다.

 

 

AWS CLI를 사용하여 인스턴스 시작

AWS CLI를 사용하여 EC2 인스턴스를 시작합니다.
AWS CLI를 사용하면 AWS 리소스의 프로비저닝 및 구성을 쉽게 자동화할 수 있습니다.
새 인스턴스는 웹 서버로 구성됩니다.

EC2 Instance Connect를 사용하거나 PuTTY등 터미널 Tool을 활용하여 Bastion 서버에 로그인을 합니다.

저는 PuTTY를 사용하여 터미널에 접속했습니다.(PuTTY를 활용한 AWS EC2접속에 대한 블로깅은 추후에...)

 

1. 사용할 AMI 가져오기

AWS Systems Manager Parameter Store를 사용하여 최신 Amazon Linux 2 AMI의 ID를 가져옵니다.

AWS는 파라미터 스토어에서 표준 AMI 목록을 유지 관리하므로 쉽게 자동화할 수 있습니다. 

# Set the Region
AZ=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
export AWS_DEFAULT_REGION=${AZ::-1}

# Obtain latest Linux AMI
AMI=$(aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query 'Parameters[0].[Value]' --output text)

echo $AMI
  • 인스턴스가 실행 중인 리전을 가져옵니다.
  • AWS Systems Manager(ssm)를 호출하고 get-parameters명령을 사용하여 파라미터 스토어에서 값을 검색합니다.
  • AMI ID를 AMI라는 환경 변수에 저장합니다.
SSH 세션이 끊어지면 환경 변수에 저장된 정보가 손실되기 때문에 주의해 주세요.
2. 사용할 서비넷 정보 가져오기

퍼블릭 서브넷에서 새 인스턴스를 시작합니다. 인스턴스를 시작할 때 SubnetId를 지정할 수 있습니다.

SUBNET=$(aws ec2 describe-subnets --filters 'Name=tag:Name,Values=Public Subnet' --query Subnets[].SubnetId --output text)

echo $SUBNET
  • AWS CLI를 사용하여 Public Subnet 이라는 서브넷의 서브넷 ID를 검색합니다.
  • 서브넷 ID를 SUBNET라는 환경 변수에 저장합니다.
3. 사용할 보안 그룹 가져오기
SG=$(aws ec2 describe-security-groups --filters 'Name=group-name,Values=WebSecurityGroup' --query SecurityGroups[].GroupId --output text)

echo $SG
  • AWS CLI를 사용하여 보안 그룹의 보안 그룹 ID를 검색합니다.
  • 보안 그룹 ID를 SG라는 환경 변수에 저장합니다.
4. 사용자 데이터 스크립트 다운로드
wget https://us-west-2-tcprod.s3.amazonaws.com/courses/ILT-TF-100-SYSOPS/v3.3.31/lab-2-ec2-linux/scripts/UserData.txt

웹 서버를 설치하고 구성하려면 인스턴스가 시작될 때 자동으로 실행될 사용자 데이터 스크립트를 다운로드 합니다.

스크립트의 내용을 보려면 "cat UserData.txt" 명령어로 확인이 가능합니다.

이 스크립트는 다음과 같은 작업을 수행합니다.

  • 웹 서버 설치
  • 웹 어플리케이션이 포함된 zip파일 다운로드
  • 웹 어플리케이션 설치
5. 인스턴스 시작

이제 웹 서버 인스턴스를 시작하는데 필요한 모든 정보가 준비되었습니다.

아래 명령을 붙여넣고 인스턴스를 시작해 봅니다.

INSTANCE=$(\
aws ec2 run-instances \
--image-id $AMI \
--subnet-id $SUBNET \
--security-group-ids $SG \
--user-data file:///home/ec2-user/UserData.txt \
--instance-type t2.micro \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=Web Server}]' \
--query 'Instances[*].InstanceId' \
--output text \
)

echo $INSTANCE

AWS CLI 명령어로 새 인스턴스(run_instances)를 시작합니다. 파라메터 옵션 정보는 아래와 같습니다.

  • Image : 파라미터 스토어에서 가져온 AMI값
  • Subnet : 퍼블릭 서브넷을 지정하고, 인스턴스를 시작할 연결된 VPC를 지정합니다.
  • Security Group : HTTP 액세스를 허용하는 웹 보안 그룹
  • User Data : 다운로드한 사용자 데이터 스크립트로 앱 어플리케이션을 설치합니다.
  • Instance Type : 시작할 인스턴스 유형을 지정합니다.
  • tags : Web Server 값이 있는 Name 태그를 할당합니다.
  • query 파라미터는 인스턴스가 시작되면 명령이 인스턴스 ID를 반환해야 한다고 지정합니다.
  • output 파라미터는 명령의 출력이 text 형식이어야 한다고 지정합니다.
  • 새 인스턴스의 ID는 INSTANCE 환경 변수에 저장됩니다.
6. 인스턴스 준비상태 확인

Management Console을 통해 인스턴스의 상태를 모니터링 할 수 있지만 AWS CLI를 통해 query할 수 있습니다.

다음은 인스턴스의 정보를 가져오는 AWS CLI로 JSON 형식으로 표시됩니다.

aws ec2 describe-instances --instance-ids $INSTANCE

query 파라미터를 사용하여 구체적인 instance의 상태값을 가져올 수 있습니다.

aws ec2 describe-instances --instance-ids $INSTANCE --query 'Reservations[].Instances[].State.Name' --output text
7. 웹 서버 테스트

AWS CLI를 통해 인스턴스의 URL을 검색할 수 있습니다.

aws ec2 describe-instances --instance-ids $INSTANCE --query Reservations[].Instances[].PublicDnsName --output text

이 명령은 인스턴스의 DNS 이름을 반환합니다.

표시된 DNS 이름을 복사하여 웹 브라우저에서 검색합니다.

아래와 같이 웹 서비스가 확인이 됩니다.

 

 

 

마무리

AWS CLI를 통하여 EC2 인스턴스를 생성해 보았습니다.

EC2는 User Data 스크립트 구성을 통하여 인스턴스가 재구동 될 때마다 자동으로 스크립트를 수행할 수 있습니다.