머신 - 만들기
설정 - 시스템 - 프로세서 2개
디스크 파일 추가 centos7
어뎁터에 브리지
usb, 오디오 제거
vi /etc/selinux/config
yum update -y
스냅샷
가상시스템 내보내기
코드를 작성 및 실행하여 인프라를 생성, 배포, 수정, 정리하는 것을 말한다.
이는 서버를 물리적으로 설치하는 등의 하드웨어 측면을 포함하여 운영의 모든 측면을 소프트웨어적으로 생각하는 중대한 사고 전환을 보여준다.
코드형 인프라의 핵심은 서버, 데이터베이스, 네트워크, 로그 파일, 애플리케이션 구성, 문서, 자동화된 테스트, 배포 프로세스 등 거의 모든 것을 코드로 관리할 수 있다는 것이다.
코드형 인프라 도구로는 애드혹 스크립트, 구성 관리 도구, 서버 템플릿 도구, 오케스트레이션 도구, 프로비전 도구가 있다.
수행할 작업을 단계별로 나누고 배시(bash)와 같은 언어를 사용하여 각 단계를 코드로 정의하고 장성된 스크립트트 서버에서 수동으로 실행하는 것이다. 코드를 직접 작성하여 매번 수동으로 맞춤 코드를 작성해야 되기 때문에 간단한 설치에 적합하다.
#!bin/bash
yum install -y httpd
systemctl enable --now httpd
구성 관리 도구
셰프, 퍼핏, 앤서블, 솔트 스택 등은 모두 구성 관리 도구로써 대상 서버에 소프트웨어를 설치하고 관리하도록 설계되어 있다. 배시 스크립트와 비슷해 보이지만 애드혹 스크립트를 사용할 때와 다른 여러가지 장점이 있다.
1) 코딩 규칙
구성 관리 도구는 문서화, 파일 레이아웃, 명확하게 이름 붙여진 매개 변수, 시크릿 관리 등을 포함하는 코딩 규칙으로 일관되고 예측 가능한 구조를 제공한다.
2) 멱등성
구성 관리 도구는 실행 횟수에 관계없이 설정 파일을 사용하여 소프트웨어가 설치 되지 않았을 경우에만 설치하고 소프트웨어가 동작하지 않는 경우에만 동작하도록 한다.
3) 분산형 구조
애드혹 스크립트는 단일 로컬 머신에서만 실행되도록 설계되어 있지만 앤서블과 같은 구성 관리 도구는 원격의 수많은 서버를 관리하기 위해 특별히 설계된 것이다. 관리가 필요한 서버들의 IP를 정리한 hosts 파일을 생성하고 플레이북을 정의하여 실행한다
서버 템플릿 도구
도커, 패커, 베이그런트와 같은 서버 템플릿 도구는 여러 서버를 시작하고 각각 동일한 코드를 실행하여 서버를 구성하는 기존 방식과 다르게, 운영체제, 소프트웨어, 파일 및 기타 필요한 모든 내욜을 포함하고 있는 스냅샷으로 이미지를 생성하여 모든 서버에 이미지를 설치할 수 있다.
실행은 서버에 이미지를 배포하고 할수 있다.
-> 우리는 도커를 사용할 예정
오케스트레이션 도구
프로비전 도구
각종 플랫폼에서 api를 제공해기때문에 테라폼
수동으로 코드를 변환하지 않아도 되므로 소프트웨어를 효율적으로 배포할 수 있습니다. IaC (코드형 인프라)는 데브옵스의 일종으로 이를 도입한 조직은 배포 횟수를 200배 늘렸고 오류를 24배 빠르게 개선하며 배포시간을 2,555배 줄였다.
# 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}'
# 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
# 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
# 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