#20230515(AWS CLI, vpc setting)

eeapbh·2023년 5월 15일
0

MZC

목록 보기
41/61

머신 - 만들기

설정 - 시스템 - 프로세서 2개

  • 디스크 파일 추가 centos7

  • 어뎁터에 브리지

usb, 오디오 제거

mobaXterm

vi /etc/selinux/config

yum update -y
  • 스냅샷

  • 가상시스템 내보내기

IaC(코드형 인프라)란?

코드를 작성 및 실행하여 인프라를 생성, 배포, 수정, 정리하는 것을 말한다.
이는 서버를 물리적으로 설치하는 등의 하드웨어 측면을 포함하여 운영의 모든 측면을 소프트웨어적으로 생각하는 중대한 사고 전환을 보여준다.
코드형 인프라의 핵심은 서버, 데이터베이스, 네트워크, 로그 파일, 애플리케이션 구성, 문서, 자동화된 테스트, 배포 프로세스 등 거의 모든 것을 코드로 관리할 수 있다는 것이다.
코드형 인프라 도구로는 애드혹 스크립트, 구성 관리 도구, 서버 템플릿 도구, 오케스트레이션 도구, 프로비전 도구가 있다.

1. 애드혹 스크립트

수행할 작업을 단계별로 나누고 배시(bash)와 같은 언어를 사용하여 각 단계를 코드로 정의하고 장성된 스크립트트 서버에서 수동으로 실행하는 것이다. 코드를 직접 작성하여 매번 수동으로 맞춤 코드를 작성해야 되기 때문에 간단한 설치에 적합하다.

#!bin/bash
yum install -y httpd
systemctl enable --now httpd
  1. 구성 관리 도구
    셰프, 퍼핏, 앤서블, 솔트 스택 등은 모두 구성 관리 도구로써 대상 서버에 소프트웨어를 설치하고 관리하도록 설계되어 있다. 배시 스크립트와 비슷해 보이지만 애드혹 스크립트를 사용할 때와 다른 여러가지 장점이 있다.
    1) 코딩 규칙
    구성 관리 도구는 문서화, 파일 레이아웃, 명확하게 이름 붙여진 매개 변수, 시크릿 관리 등을 포함하는 코딩 규칙으로 일관되고 예측 가능한 구조를 제공한다.
    2) 멱등성
    구성 관리 도구는 실행 횟수에 관계없이 설정 파일을 사용하여 소프트웨어가 설치 되지 않았을 경우에만 설치하고 소프트웨어가 동작하지 않는 경우에만 동작하도록 한다.
    3) 분산형 구조
    애드혹 스크립트는 단일 로컬 머신에서만 실행되도록 설계되어 있지만 앤서블과 같은 구성 관리 도구는 원격의 수많은 서버를 관리하기 위해 특별히 설계된 것이다. 관리가 필요한 서버들의 IP를 정리한 hosts 파일을 생성하고 플레이북을 정의하여 실행한다

  2. 서버 템플릿 도구
    도커, 패커, 베이그런트와 같은 서버 템플릿 도구는 여러 서버를 시작하고 각각 동일한 코드를 실행하여 서버를 구성하는 기존 방식과 다르게, 운영체제, 소프트웨어, 파일 및 기타 필요한 모든 내욜을 포함하고 있는 스냅샷으로 이미지를 생성하여 모든 서버에 이미지를 설치할 수 있다.
    실행은 서버에 이미지를 배포하고 할수 있다.
    -> 우리는 도커를 사용할 예정

  3. 오케스트레이션 도구

  4. 프로비전 도구

각종 플랫폼에서 api를 제공해기때문에 테라폼

IaC(코드형 인프라) 장점

수동으로 코드를 변환하지 않아도 되므로 소프트웨어를 효율적으로 배포할 수 있습니다. IaC (코드형 인프라)는 데브옵스의 일종으로 이를 도입한 조직은 배포 횟수를 200배 늘렸고 오류를 24배 빠르게 개선하며 배포시간을 2,555배 줄였다.

테라폼이란?

  • 이름 바꿔주고

AWS CLI 설치

# 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 스크립트 (https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-welcome.html)
1. VPC와 서브넷 만들기 (https://docs.aws.amazon.com/cli/latest/reference/)

# 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-0efc4c12c51d78eac
# 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}'
  1. 퍼블릭 및 프라이빗 서브넷으로 만들기
# aws ec2 create-internet-gateway --tag-specification "ResourceType=internet-gateway,Tags=[{Key=Name,Value=test-igw}]" --output text
# test_igw=igw-0180a15c2097e9121
# 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
# aws ec2 describe-route-tables --filter "Name=vpc-id,Values=$test_vpc"
# test_pub_rtb=rtb-06b4f2976a3429047
# 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
# 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-0f527cc10bbbbdfcb
test_pub_2b=subnet-06410af76f0c14ad3
test_pub_2c=subnet-081ffae1595210fca
test_pub_2d=subnet-05a55637364cadd89
test_pvt_2a=subnet-0063d02b614170ffb
test_pvt_2b=subnet-0011d2cc96df1b8cd
test_pvt_2c=subnet-01b26b297b7723a1b
test_pvt_2d=subnet-0c980a8e8e3240ad5
# 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
# test_pvt_rtb=rtb-0f38b0d74270bea23
# 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
  1. 키페어, 보안그룹 만들기
# 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-0a52d420cf74c526a
# aws ec2 authorize-security-group-ingress --group-id $test_web_sg --protocol tcp --port 22 --cidr 106.253.56.124/32
# 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 --output table
  1. 볼륨 및 인스턴스 만들기
# vi mapping.json

[
    {
        "DeviceName": "/dev/xvda",
        "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-0c96625394ebed468
# aws ec2 describe-instances --instance-id $test_iid | grep PublicIp
# ssh -i "test-key.pem" ec2-user@43.201.47.197
# curl 43.201.47.197

sudo mkfs -t xfs /dev/xvdb
sudo mount /dev/xvdb /mnt

실습 정리

# 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

0개의 댓글