https://aws.amazon.com/ko/cli/
AWS CLI 란?
CLI 쉘 명령어로 AWS 의 서비스와 상호작용 할 수 있는 오픈 소스 도구 입니다.
이번 챕터 에서는 이 전에 생성해 본 VPC 와 EC2 를 웹 구축이 아닌 CLI 명령어로 생성 해 보겠습니다.
1. EC2 생성하기
CLI 테스트용 임시 EC2 를 다음과 같이 생성 해 줍니다.
인스턴스와 네트워크 세팅은 기본 VPC 와 세팅을 이용해주어 바로 넘어 가겠습니다.
테스트용 EC2 가 바로 생성되며 할당된 퍼블릭 IP 를 가져올 수 있습니다.
Mobaxterm 을 이용해서 퍼블릭 ip 와 ec2-user 유저이름과 설정한 키로 접속을 시도 합니다.
cd /tmp
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
aws --version
aws configure
AWS CLI 를 실행 하기 위한 기본 명령어 업니다.
aws config 명령어 시 CLI 유저 계정이 필요하므로 없다면 만들어 줍니다.
2. CLI 유저 생성하기
CLI-USER 이름으로 Access key 옵션을 활성화 해 줍니다.
CLI 유저가 생성되며 Download .csv 로 액세스 키와 비밀번호를 저장 해 줍니다.
3. CLI 설치 및 설정하기
다시 ssh 화면으로 돌아와서 aws configure 명령어를 마무리 해 줍니다.
다운받은 액세스 키와 비밀번호, 지역 이름을 설정하고 json 포멧으로 아웃풋을 확인 하도록 합니다.
aws s3 ls 명령어로 접속상태를 확인 할 수 있습니다.
3-1. VPC 생성하기
aws ec2 create-vpc --cidr-block 192.168.0.0/16 --tag-specification "ResourceType=vpc,Tags=[{Key=Name,Value=NEW-VPC}]" --output text
NEW_VPC=vpc-본인의 VPC ID
VPC 생성 명령어를 진행 해 줍니다.
웹 화면으로 생성된 VPC 를 확인 할 수 있습니다.
3-2. 서브넷 생성하기
aws ec2 create-subnet --vpc-id $NEW_VPC --cidr-block 192.168.0.0/20 --availability-zone ap-northeast-2a --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=NEW-PUBLIC-SUBNET-2A}]"
aws ec2 create-subnet --vpc-id $NEW_VPC --cidr-block 192.168.16.0/20 --availability-zone ap-northeast-2b --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=NEW-PUBLIC-SUBNET-2B}]"
aws ec2 create-subnet --vpc-id $NEW_VPC --cidr-block 192.168.32.0/20 --availability-zone ap-northeast-2c --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=NEW-PUBLIC-SUBNET-2C}]"
aws ec2 create-subnet --vpc-id $NEW_VPC --cidr-block 192.168.48.0/20 --availability-zone ap-northeast-2d --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=NEW-PUBLIC-SUBNET-2D}]"
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$NEW_VPC" --query 'Subnets[*].{AZ:AvailabilityZone,CIDR:CidrBlock}'
퍼블릭 서브넷 이름으로 총 4개를 생성해 주고 확인 해 줍니다.
웹 화면으로 생성된 서브넷을 확인 할 수 있습니다.
3-3. 퍼블릭 서브넷 설정하기
aws ec2 create-internet-gateway --tag-specification "ResourceType=internet-gateway,Tags=[{Key=Name,Value=NEW-IGW}]" --output text
NEW_IGW=igw-본인의 IGW ID
aws ec2 attach-internet-gateway --vpc-id $NEW_VPC --internet-gateway-id $NEW_IGW
aws ec2 describe-internet-gateways --output table
aws ec2 describe-route-tables --filter "Name=vpc-id,Values=$NEW_VPC"
NEW_RTB=rtb-본인의 RTB ID
aws ec2 create-route --route-table-id $NEW_RTB --destination-cidr-block 0.0.0.0/0 --gateway-id $NEW_IGW
aws ec2 create-tags --resources $NEW_RTB --tags "Key=Name,Value=NEW-PUBLIC-SUBNET-RTB"
aws ec2 describe-route-tables --route-table-id $NEW_RTB --output table
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$NEW_VPC" --query 'Subnets[*].{ID:SubnetId,CIDR:CidrBlock}'
NEW_SID1=subnet-본인의 서브넷1 ID
NEW_SID2=subnet-본인의 서브넷2 ID
NEW_SID3=subnet-본인의 서브넷3 ID
NEW_SID4=subnet-본인의 서브넷4 ID
aws ec2 associate-route-table --subnet-id $NEW_SID1 --route-table-id $NEW_RTB
aws ec2 associate-route-table --subnet-id $NEW_SID2 --route-table-id $NEW_RTB
aws ec2 associate-route-table --subnet-id $NEW_SID3 --route-table-id $NEW_RTB
aws ec2 associate-route-table --subnet-id $NEW_SID4 --route-table-id $NEW_RTB
aws ec2 modify-subnet-attribute --subnet-id $NEW_SID1 --map-public-ip-on-launch
aws ec2 modify-subnet-attribute --subnet-id $NEW_SID2 --map-public-ip-on-launch
aws ec2 modify-subnet-attribute --subnet-id $NEW_SID3 --map-public-ip-on-launch
aws ec2 modify-subnet-attribute --subnet-id $NEW_SID4 --map-public-ip-on-launch
aws ec2 modify-vpc-attribute --vpc-id $NEW_VPC --enable-dns-hostnames
서브넷 SID 순서 192.168.0.0/16.0/24.0/32.0 순서대로 ( 정렬 순서가 랜덤 일 수 있습니다.)
인터넷 게이트웨이와 라우트 테이블이 설정해둔 조건에 맞게 생성된 것을 확인 할 수 있습니다.
3-4. 키와 보안그룹 생성하기
aws ec2 create-key-pair --key-name cli-key --query 'KeyMaterial' --output text > cli-key.pem
chmod 400 cli-key.pem
aws ec2 create-security-group --group-name NEW-SG-WEB --description "Security group for HTTP_SSH access" --vpc-id $NEW_VPC
NEW_SG=sg-본인의 SG ID
aws ec2 authorize-security-group-ingress --group-id $NEW_SG --protocol tcp --port 22 --cidr 본인의 IP 주소/32
# curl ipconfig.io 로 확인 가능
aws ec2 authorize-security-group-ingress --group-id $NEW_SG --protocol tcp --port 80 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id $NEW_SG --protocol icmp --port -1 --cidr 0.0.0.0/0
생성 할 ec2 에 키와 보안그룹을 생성 해 줍니다.
3-5. 저장공간 생성하기
vi mapping.json
[
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeSize": 8
}
},
{
"DeviceName": "/dev/xvdb",
"Ebs": {
"VolumeSize": 8
}
}
]
생성 할 ec2 에 추가할 Ebs 볼륨을 지정 해 줍니다. xvda 와 xvdb 를 추가 해 주었습니다.
3-6. EC2 생성하기
vi my_script.txt
#!/bin/bash
yum install -y httpd
systemctl enable --now httpd
echo "<h1>Hello AWS CLI</h1>" > /var/www/html/index.html
aws ec2 run-instances \
--image-id ami-0fd0765afb77bcca7 \
--count 1 \
--instance-type t2.micro \
--key-name cli-key \
--security-group-ids $NEW_SG \
--subnet-id $NEW_SID1 \
--block-device-mappings file://mapping.json \
--user-data file://my_script.txt \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=NEW-WEB}]' 'ResourceType=volume,Tags=[{Key=Name,Value=NEW-ROOT}]'
NEW_IID=i-본인의 Instance ID
스크립트 파일로 유저 데이터를 설정 해 주고 ec2 를 생성 해 줍니다.
웹으로 새롭게 생성한 ec2 를 확인 할 수 있습니다.
aws ec2 describe-instances --instance-id $NEW_IID | grep PublicIp
# Public ip 할당 및 확인
ssh -i "cli-key.pem" ec2-user@본인의 Public ip
curl 본인의 Public ip
새로 할당받은 public ip 로 ssh 로 새로 생성한 ec2 에 접속 해 봅니다.
curl 명령어로 유저 데이터의 정보를 확인 할 수 있습니다.
3-7. 확인 및 마무리 작업
df –h
# 저장공간 디스크 확인
sudo mkfs –t ext4 /dev/xvdb
sudo mount /dev/xvdb /mnt
df -h
새롭게 접근한 ec2 의 저장공간 디스크를 확인 한 후, xvda 디스크만 있는 것을 확인하고 xvdb 를 추가 해 줍니다.
exit
aws ec2 terminate-instances --instance-id $NEW_IID
aws ec2 delete-security-group --group-id $NEW_SG
aws ec2 delete-subnet --subnet-id $NEW_SID1
aws ec2 delete-subnet --subnet-id $NEW_SID2
aws ec2 delete-subnet --subnet-id $NEW_SID3
aws ec2 delete-subnet --subnet-id $NEW_SID4
aws ec2 detach-internet-gateway --internet-gateway-id $NEW_IGW --vpc-id $NEW_VPC
aws ec2 delete-internet-gateway --internet-gateway-id $NEW_IGW
aws ec2 delete-vpc --vpc-id $NEW_VPC
다시 테스트용 ec2 로 가서 앞서 생성한 자원들을 명령어로 삭제 해 줍니다.
+
cat .aws/credentials
테스트용 ec2 에서 aws_access_key_id , aws_secret_access_key 키 정보 확인 가능 명령어
* ssh 작업 상태 reboot 의 경우 이전에 지정해둔 $ 명령어가 리셋되므로 다시 지정해줘야합니다.
'AWS - KOR' 카테고리의 다른 글
#010) 테라폼 terraform 으로 VPC, EC2 생성하기 (0) | 2022.07.03 |
---|---|
#009) CloudFormation 으로 VPC, EC2 생성하기 (0) | 2022.07.01 |
#007) AWS EC2 생성하기 (0) | 2022.06.30 |
#006) AWS 보안 설정하기 Security group/NACL (0) | 2022.06.30 |
#005) AWS VPC 생성하기 (0) | 2022.06.28 |