#Task 10 EBS생성
Info
- Terraform VPC + EC2 with EBS instance Example
1) VPC
- VPC CIDR 은 10.0.0.0/16
- Subnet CIDR 은 10.X.0.0/24
- Subnet 은 본인이 선택한 Region의 Availability Zone 수만큼 생성 (ex. us-east-1 -> 4 Availability Zones -> 4 Subnets)
- 각 Availability Zone 별로 Public Subnet, Private Subnet 페어로 한개씩 존재하도록 생성
- Internet Gateway 생성 후 VPC에 Attach
Route Table 은 Public 과 Private Route Table 한개씩 총 2개 생성
- Public Route Table 은 Internet Gateway 로 통신 가능하도록 Route 추가 후 Public Subnet 4개와 연결 (Associatation)
- Private Route Table 은 Route 추가 없이 Private Subnet 4개와 연결 (Associatation)
- NAT Gateway 용 EIP 생성
- Public Subnet에 NAT Gateway 생성
- Private Route Table에 외부 통신을 위해서 NAT Gateway 로 통신 가능하도록 Route 추가
- SSH 허용을 위한 Admin 용 Security Group 과 HTTP 웹 접속 허용을 위한 Web Security Group, 총 두개 Security Group 생성
- Admin Security Group 에는 SSH(20) 포트를 본인 Cloud9 Public IP 허용하는 Rule 생성
- Web Security Group 에는 HTTP(80) 포트를 모두 허용하는 Rule 생성
- 각 Resource 를 생성하는 코드를 모두 Module 로 제작
2) EC2 with EBS Volume
- Instance에 Volume 사용 설정 완료된 AMI 이미지 제작
o 추가 Volume 사용을 위한 파일시스템 포맷 및 마운트
o Nginx 웹서버 설치 및 설정
o 추가 Volume 이 마운트 된 디렉토리에 HTML index 파일 생성
o 위 설정이 완료된 Instance 와 EBS 볼륨 모두 스냅샷 + AMI 생성
- 각 Public Subnet에 미리 제작된 AMI 를 사용하여 EC2 Instance 와 EBS Volume 배포.
- EC2 Instance 마다 EBS 데이터 Volume 생성 후 Attach
- 각 EC2 Instance 생성 후, User data 를 통해 index.html 테스트 웹 파일에 추가 정보 append
1) EBS 실습을 진행하기 위해서 09-ebs폴더로 경로 이동
- cd ../09-ebs/
2) AMI 생성
- 인스턴스에 EBS 가 실제 사용 가능 환경을 갖추려면, OS 설정이 필요. OS 설정이 추가된 AMI 이미지를 생성 후 배포.
AMI 를 만들기 위해서 먼저 인스턴스를 배포한다.
- AWS 콘솔에서 인스턴스 생성
- ** Instance 정보** *
이미지 : Ubuntu 24.04
Instance Type: t2.micro (or t2.small)
*t2.micro가 선택이 안될 경우 t3.small을 선택합니다.
키 페어: user**-key
Network : Default VPC(Cloud9 생성했던 VPC)
보안 그룹:
위치 무관(0.0.0.0/0)에서 SSH 트래픽 허용,
위치 무관(0.0.0.0/0)에서 HTTP 트래픽 허용
스토리지 구성 어드밴스드 선택
Storage: 10GB 크기의 gp3 EBS 볼륨 추가.
종료 시 삭제 "예" 선택
인스턴스 시작 클릭
3) Instance 접속
- 인스턴스 생성 완료되면 해당 인스턴스에 연결
- 초기 접속시에는 ubuntu 라는 유저. OS 설정 작업의 편의성을 위해 root 로 전환
- > sudo su
4) data volume attach 확인
- > lsblk
5) Block device 포맷
- 파일 시스템 생성
(t2.small 일 경우)- > sudo mkfs -t xfs /dev/xvdb
(t3.small 일 경우)- > sudo mkfs -t xfs /dev/nvme1n1
6) Mount 할 디렉토리 생성
- > mkdir /data
7) Filesystem Mount
(t2.small 일 경우) - > sudo mount /dev/xvdb /data
(t3.small 일 경우) - > sudo mount /dev/nvme1n1 /data
- 마운트 된 내역 확인.
- > df -h
8) /etc/fstab에 파일시스템 마운트 저장
- xvdb 블럭 디바이스의 UUID 확인
- > sudo blkid /dev/xvda1: LABEL="cloudimg-rootfs" UUID="e8070c31-bfee-4314-a151-d1332dc23486" TYPE="ext4" PARTUUID="5198cbc0-01" /dev/loop0: TYPE="squashfs" /dev/loop1: TYPE="squashfs" /dev/loop2: TYPE="squashfs" /dev/loop3: TYPE="squashfs"
UUID 메모장에 저장
- /etc/fstab 내용 편집
- > sudo vim /etc/fstab - 메모장에 저장했던 UUID를 이용, 수정하여 아래 내용 추가
- umount 명령으로 현재 마운트된 것 언마운트
- > umount /data
- mount 명령을 통해 다시 재 마운트 시행. /etc/fstab에 작성 내역이 정상이면 마운트 동작 이상 없이 될 것.
- > systemctl daemon-reload
- > mount -a
9) nginx 웹서버 설치
- 아래 명령을 순서대로 입력
> sudo apt update -y > sudo apt install -y nginx > sudo systemctl start nginx > sudo systemctl enable nginx
10) 웹서버 html 기본 디렉토리를 /data 디렉토리로 변경
- sites-enabled/default 파일 변경
- > vim /etc/nginx/sites-enabled/default # sites-enabled/default server { ... # root /var/www/html; -> 해당 부분 주석 처리 후 변경 root /data/html; 입력 ... }
11) /data 디렉토리에 기본 index.html 파일 생성
- > cd /data > mkdir html > cd html vim index.html
html 파일 수정
<h1>Hello!</h1>
12) nginx 재부팅
- > systemctl restart nginx
- nginx 서버 동작 확인
- > systemctl status nginx
13) 웹브라우저 접속 시 정상 작동 확인
- 해당 인스턴스의 Public IP를 복사해 웹브라우저에서 접속 여부 확인.
14) AMI 생성
- Instance 선택 -> Actions -> Image and Templates -> Create Image
- 이미지 이름 user**-image 입력 후 이미지 생성
15) AMI 로 Instance 배포 확인
- AMI ID 복사 후 메모장에 기록
- AMI 선택 -> AMI로 인스턴스 시작
이름 : ami-check-instance
유형 : t2.micro
Network : Default VPC(Cloud9 생성했던 VPC)
키 페어 : user**-key
보안 그룹 : 기존 보안 그룹 선택 -> launch-wizard-1
- Launch 시, Instance 생성 화면으로 전환.
- Instance Type, Tags 등을 설정 후 배포. 배포 후 새로 만든 EC2 인스턴스 IP로 브라우저 접속하여 웹페이지 정상인지 확인.
- EBS 볼륨 스냅샷 ID 확인 (10GiB인 스냅샷)
- 스냅샷ID 복사 후 메모장에 기록
16) Terraform 실행
업로드 된 폴더 09-ebs 하위 파일인 ebs.tfvars 파일 실행
변수설정
- ebs.tfvars 파일 확인 실행 환경에 맞게 변경
- # ebs.tfvars 파일 prefix = "user**" region = "ap-northeast-2" vpc_cidr = "10.0.0.0/16" public_subnets = [ {cidr = "10.0.1.0/24", availability_zone = "ap-northeast-2a"}, {cidr = "10.0.3.0/24", availability_zone = "ap-northeast-2c"}, ] private_subnets = [ {cidr = "10.0.11.0/24", availability_zone = "ap-northeast-2a"}, {cidr = "10.0.13.0/24", availability_zone = "ap-northeast-2c"}, ] admin_access_cidrs = ["<<YOUR_LOCAL_IP_CIDR>>"] ami_id = "<<AMI_ID>>" data_vol_snapshot_id = "<<DATA_VOLUME_SNAPSHOT_ID>>" instance_type = "t3.micro" keypair_name = "<<YOUR_KEYPAIR_NAME>>" data_volume_size = "15"
- Prefix는 알맞게 변경
- Region은 본인이 사용할 region 코드로 변경
- Subnet의 Availability Zone 값은 Region에 맞게 변경
- SSH 접속 허용할 IP 값 변경
- EC2 instance의 AMI 와 추가 데이터 볼륨 생성을 위한 Snapshot ID 설정
- EC2 instance에 설정할 keypair 명 설정
- 데이터용 EBS 볼륨 사이즈 설정
17) Init 명령으로 Terraform 수행을 위한 provider plugin 초기화 및 다운로드 수행
- terraform init
18) Plan 명령으로 Terraform 수행 전 실행 시뮬레이션 확인
- terraform plan --var-file=ebs.tfvars
19) Apply 명령으로 Terraform을 통한 Resource 생성 수행
- terraform apply --var-file=ebs.tfvars
20) Terraform 실행 내용 확인
- 선택한 Region에 VPC, Subnet, Internet Gateway, Route Table, NAT Gateway, Security Group, instance 생성 내용 확인.
- Instance에 EBS 볼륨 Attach 상태 확인.
- 생성된 Instance에 웹서버 설치 확인. Instance의 Public IP(또는 Public DNS) 로 브라우저에서 테스트 페이지 접속 확인.
21) Resource 삭제
- Terraform destroy
- Destroy 명령으로 생성된 EC2 Instance, EBS 볼륨 및 VPC 삭제 수행
- terraform destroy --var-file=ebs.tfvars
22) 폴더 삭제
- Cloud9 왼쪽 메뉴에 09-ebs폴더 우 클릭 후 Delete
Last updated