Cloud Solution Architect/AWS

AWS-CLI

YunHyeong 2023. 5. 15. 17:45

1. vbox 설정

1.1 vbox 초기 설정

- centos-7-minimal iso 다운로드

 

- RAM 크기 지정

- 디스크 용량 설정

 

- ip 확인 후 selinux disabled

- vi /etc/selinux/config

- 아래 명령어 진행

yum install -y bash-completion wget unzip rdate
rdate -s time.bora.net
setenforce 0
yum update -y

- 왼쪽 파일 버튼 누르고 가상머신 내보내기 클릭

- 그대로 내보내기

 

2. AWS CLI

2.1 AWS CLI CentOS설치

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
yum install -y unzip wget bash-completion mysql git
unzip awscliv2.zip
./aws/install
echo "complete -C '/usr/local/bin/aws_completer' aws" >> .bash_profile # 자동완성 기능
exit
aws --version
aws configure
aws s3 ls
vi /etc/selinux/config
SELINUX=disabled
setenforce 0

- AWS CLI 설치 명령어

 

2.2 CLI 자격증명 

- admin 권한 주기

- 엑세스 키 생성

- 태그이름은 지정하지 않는다.

 

- 엑세스 키를 따로 보관한다.

- 자격증명을 마친다

 

2.3 VPC와 서브넷 만들기

- VPC 생성

- Subnet 생성; Private 영역까지 총 8개 생성

aws ec2 create-vpc --cidr-block 192.168.0.0/16 --tag-specification "ResourceType=vpc,Tags=[{Key=Name,Value=test-vpc}]" --output text
test_vpc=vpc-0004e61e8cd045380
echo $test_vpc
aws ec2 create-subnet --vpc-id $test_vpc --cidr-block 192.168.0.0/20 --availability-zone ap-northeast-2a --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=test-pub-2a}]"
aws ec2 create-subnet --vpc-id $test_vpc --cidr-block 192.168.16.0/20 --availability-zone ap-northeast-2b --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=test-pub-2b}]"
aws ec2 create-subnet --vpc-id $test_vpc --cidr-block 192.168.32.0/20 --availability-zone ap-northeast-2c --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=test-pub-2c}]"
aws ec2 create-subnet --vpc-id $test_vpc --cidr-block 192.168.48.0/20 --availability-zone ap-northeast-2d --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=test-pub-2d}]"
aws ec2 create-subnet --vpc-id $test_vpc --cidr-block 192.168.64.0/20 --availability-zone ap-northeast-2a --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=test-pvt-2a}]"
aws ec2 create-subnet --vpc-id $test_vpc --cidr-block 192.168.80.0/20 --availability-zone ap-northeast-2b --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=test-pvt-2b}]"
aws ec2 create-subnet --vpc-id $test_vpc --cidr-block 192.168.96.0/20 --availability-zone ap-northeast-2c --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=test-pvt-2c}]"
aws ec2 create-subnet --vpc-id $test_vpc --cidr-block 192.168.112.0/20 --availability-zone ap-northeast-2d --tag-specification "ResourceType=subnet,Tags=[{Key=Name,Value=test-pvt-2d}]"
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$test_vpc" --query 'Subnets[*].{AZ:AvailabilityZone,CIDR:CidrBlock,SUBNET:Tags[0].Value}'

 

2.4 퍼블릭 및 프라이빗 서브넷으로 만들기

* internet-gateway 생성 후  확인

aws ec2 create-internet-gateway --tag-specification "ResourceType=internet-gateway,Tags=[{Key=Name,Value=test-igw}]" --output text
test_igw=igw-0d43ccb41068ca608
echo $test_igw
aws ec2 attach-internet-gateway --vpc-id $test_vpc --internet-gateway-id $test_igw
aws ec2 describe-internet-gateways --filters "Name=internet-gateway-id,Values=$test_igw" --output table

 

* routing table 확인

aws ec2 describe-route-tables --filter "Name=vpc-id,Values=$test_vpc"
test_pub_rtb=rtb-009733801bebb4cff
echo $test_pub_rtb
aws ec2 create-route --route-table-id $test_pub_rtb --destination-cidr-block 0.0.0.0/0 --gateway-id $test_igw
aws ec2 create-tags --resources $test_pub_rtb --tags "Key=Name,Value=test-pub-rtb"
aws ec2 describe-route-tables --route-table-id $test_pub_rtb --output table

 

* 라우팅 테이블에 서브넷 연결 후 vpc에 연결

* public subnet

aws ec2 describe-subnets --filters "Name=vpc-id,Values=$test_vpc" --query 'Subnets[*]. {ID:SubnetId,CIDR:CidrBlock,TAGS:Tags[0].Value}'
test_pub_2a=subnet-0a92ebd07506f8015
test_pub_2b=subnet-03c28641e38ea3756
test_pub_2c=subnet-0639df17d27e1fc49
test_pub_2d=subnet-00fe482cb75a419ba
test_pvt_2a=subnet-02ab5505c72943418
test_pvt_2b=subnet-098d6b8ad28a21aaf
test_pvt_2c=subnet-03c35668d0df64fa7
test_pvt_2d=subnet-01cd5594e7f8d9103
aws ec2 associate-route-table --subnet-id $test_pub_2a --route-table-id $test_pub_rtb
aws ec2 associate-route-table --subnet-id $test_pub_2b --route-table-id $test_pub_rtb
aws ec2 associate-route-table --subnet-id $test_pub_2c --route-table-id $test_pub_rtb
aws ec2 associate-route-table --subnet-id $test_pub_2d --route-table-id $test_pub_rtb
aws ec2 modify-subnet-attribute --subnet-id $test_pub_2a --map-public-ip-on-launch
aws ec2 modify-subnet-attribute --subnet-id $test_pub_2b --map-public-ip-on-launch
aws ec2 modify-subnet-attribute --subnet-id $test_pub_2c --map-public-ip-on-launch
aws ec2 modify-subnet-attribute --subnet-id $test_pub_2d --map-public-ip-on-launch
aws ec2 create-route-table --vpc-id $test_vpc

* private subnet

test_pvt_rtb=rtb-02281ff77d487f3ca
aws ec2 create-tags --resources $test_pvt_rtb --tags "Key=Name,Value=test-pvt-rtb"
aws ec2 associate-route-table --subnet-id $test_pvt_2a --route-table-id $test_pvt_rtb
aws ec2 associate-route-table --subnet-id $test_pvt_2b --route-table-id $test_pvt_rtb
aws ec2 associate-route-table --subnet-id $test_pvt_2c --route-table-id $test_pvt_rtb
aws ec2 associate-route-table --subnet-id $test_pvt_2d --route-table-id $test_pvt_rtb
aws ec2 modify-vpc-attribute --vpc-id $test_vpc --enable-dns-hostnames

 

 

* 키페어, 보안그룹 만들기

aws ec2 create-key-pair --key-name test-key --query 'KeyMaterial' --output text > test-key.pem
chmod 400 test-key.pem
aws ec2 create-security-group --group-name test-sg-web --description "Security group for HTTP_SSH access" --vpc-id $test_vpc --tag-specification "ResourceType=security-group,Tags=[{Key=Name,Value=test-sg-web}]"
test_web_sg=sg-02b1e4a73b85458ea
aws ec2 authorize-security-group-ingress --group-id $test_web_sg --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id $test_web_sg --protocol tcp --port 80 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id $test_web_sg --protocol icmp --port -1 --cidr 0.0.0.0/0
aws ec2 describe-security-groups --group-id $test_web_sg
aws ec2 describe-security-groups --group-id $test_web_sg --output table

 

2.5 볼륨 및 인스턴스 만들기

# vi mapping.json
[
    {
        "DeviceName": "/dev/xvda",// root volume
        "Ebs": {
            "VolumeSize": 8
        }
    },
    {
        "DeviceName": "/dev/xvdb",
        "Ebs": {
            "VolumeSize": 8
        }
    }
]

# 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-035da6a0773842f64 \
--count 1 \
--instance-type t2.micro \
--key-name test-key \
--security-group-ids $test_web_sg \
--subnet-id $test_pub_2a \
--block-device-mappings file://mapping.json \
--user-data file://my_script.txt \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=test-web}]' 'ResourceType=volume,Tags=[{Key=Name,Value=test-root}]'

test_iid=i-08b84a8f3a4cbe689
aws ec2 describe-instances --instance-id $test_iid | grep PublicIp
ssh -i "test-key.pem" ec2-user@52.78.179.102
curl 52.78.179.102

 

2.6 정리(삭제)

aws ec2 terminate-instances --instance-id $test_iid
aws ec2 delete-security-group --group-id $test_web_sg
aws ec2 delete-subnet --subnet-id $test_pub_2a
aws ec2 delete-subnet --subnet-id $test_pub_2b
aws ec2 delete-subnet --subnet-id $test_pub_2c
aws ec2 delete-subnet --subnet-id $test_pub_2d
aws ec2 delete-subnet --subnet-id $test_pvt_2a
aws ec2 delete-subnet --subnet-id $test_pvt_2b
aws ec2 delete-subnet --subnet-id $test_pvt_2c
aws ec2 delete-subnet --subnet-id $test_pvt_2d
aws ec2 detach-internet-gateway --internet-gateway-id $test_igw --vpc-id $test_vpc
aws ec2 delete-internet-gateway --internet-gateway-id $test_igw
aws ec2 delete-route-table --route-table-id $test_pvt_rtb
aws ec2 delete-route --route-table-id $test_pub_rtb --destination-cidr-block 0.0.0.0/0
aws ec2 delete-vpc --vpc-id $test_vpc