6. 실습
CloudFormation 스택 생성
1. CloudFormation - 스택 생성 - 새 리소스 사용
2. Amazon S3 URL 입력
3. 스택 이름, 파라미터 지정
4. 스택 옵션 구성 - 기본값
5. 검토 : AWS CloudFormation에서 사용자 지정 이름으로 IAM 리소스를 생성할 수 있음을 승인합니다. 체크
- 보안성 있는 서비스에 접근 가능하게 할꺼냐는 항목/ 하지않으면 중간에 roll back 됨
Storage.yaml 파일 내용
Parameters:
KeyName:
Description: Name of an existing EC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameter
Type: 'AWS::EC2::KeyPair::KeyName'
ConstraintDescription: must be the name of an existing EC2 KeyPair.
LatestAmiId:
Description: (DO NOT CHANGE)
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
AllowedValues:
- /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Resources:
# IAM Role Instance Profile
STGLabInstanceRole:
Type: AWS::IAM::Role
Properties:
RoleName: STGLabInstanceRole
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
- arn:aws:iam::aws:policy/AmazonS3FullAccess
STGLabRoleForInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
InstanceProfileName: STGLabRoleForInstances
Path: /
Roles:
- !Ref STGLabInstanceRole
# VPC
ELBVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.40.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: ELB-VPC
ELBIGW:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: ELB-IGW
ELBIGWAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
InternetGatewayId: !Ref ELBIGW
VpcId: !Ref ELBVPC
ELBPublicRT:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref ELBVPC
Tags:
- Key: Name
Value: ELB-Public-RT
ELBDefaultPublicRoute:
Type: AWS::EC2::Route
DependsOn: ELBIGWAttachment
Properties:
RouteTableId: !Ref ELBPublicRT
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref ELBIGW
ELBPublicSN1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref ELBVPC
AvailabilityZone: !Select [ 0, !GetAZs '' ]
CidrBlock: 10.40.1.0/24
Tags:
- Key: Name
Value: ELB-Public-SN-1
ELBPublicSN2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref ELBVPC
AvailabilityZone: !Select [ 2, !GetAZs '' ]
CidrBlock: 10.40.2.0/24
Tags:
- Key: Name
Value: ELB-Public-SN-2
ELBPublicSNRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref ELBPublicRT
SubnetId: !Ref ELBPublicSN1
ELBPublicSNRouteTableAssociation2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref ELBPublicRT
SubnetId: !Ref ELBPublicSN2
# Security Group
ELBSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable
VpcId: !Ref ELBVPC
Tags:
- Key: Name
Value: ELBSG
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '80'
ToPort: '80'
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: '2049'
ToPort: '2049'
CidrIp: 10.40.0.0/16
- IpProtocol: tcp
FromPort: '22'
ToPort: '22'
CidrIp: 0.0.0.0/0
- IpProtocol: icmp
FromPort: -1
ToPort: -1
CidrIp: 0.0.0.0/0
# EC2 Instance
EC2STG1:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: !Ref LatestAmiId
IamInstanceProfile: STGLabRoleForInstances
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: EC2-STG1
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref ELBPublicSN1
GroupSet:
- !Ref ELBSG
AssociatePublicIpAddress: true
PrivateIpAddress: 10.40.1.10
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
hostnamectl --static set-hostname EC2-STG1
yum install httpd tree tmux amazon-efs-utils -y
systemctl start httpd && systemctl enable httpd
echo "<html><h1>AFOS Study - Web Server 1</h1></html>" > /var/www/html/index.html
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install --bin-dir /usr/bin --install-dir /usr/bin --update
EC2STG2:
Type: AWS::EC2::Instance
Properties:
InstanceType: t2.micro
ImageId: !Ref LatestAmiId
IamInstanceProfile: STGLabRoleForInstances
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: EC2-STG2
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref ELBPublicSN2
GroupSet:
- !Ref ELBSG
AssociatePublicIpAddress: true
PrivateIpAddress: 10.40.2.10
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
hostnamectl --static set-hostname EC2-STG2
yum install httpd tree tmux amazon-efs-utils -y
systemctl start httpd && systemctl enable httpd
echo "<html><h1>AFOS Study - Web Server 2</h1></html>" > /var/www/html/index.html
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install --bin-dir /usr/bin --install-dir /usr/bin --update
다음과 같이 나오면 STACK 생성 완료
EBS 기본 정보 확인
- 루트 볼륨 확인
# df(disk free) 디스크 여유 공간 출력
[root@EC2-STG1 ~]# df -hT /dev/xvda1
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvda1 xfs 8.0G 1.8G 6.2G 23% /
# lsblk 사용 가능한 디스크 디바이스와 마운트 포인트(해당하는 경우)를 출력
[root@EC2-STG1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
# file -s 볼륨에 파일 시스템이 있는지 확인, data만 출력 시 파일 시스템이 없으므로 생성해야함
[root@EC2-STG1 ~]# file -s /dev/xvda
/dev/xvda: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 16777215 sectors, extended partition table (last)\011, code offset 0x63
# 파일 시스템이 있으면 파일 시스템의 유형에 관한 정보 출력
[root@EC2-STG1 ~]# file -s /dev/xvda1
/dev/xvda1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
# 디바이스의 UUID 찾기
[root@EC2-STG1 ~]# blkid
/dev/xvda1: LABEL="/" UUID="26620198-186a-404b-b9a1-12d957d7c826" TYPE="xfs" PARTLABEL="Linux" PARTUUID="bb798dfd-f745-4ebc-912f-e59071e955da"
# 디바이스의 탑재 시점 확인
[root@EC2-STG1 ~]# cat /etc/fstab
#
UUID=26620198-186a-404b-b9a1-12d957d7c826 / xfs defaults,noatime 1 1
EBS 신규 볼륨 생성(az1) 및 연결
- [EC2 - EBS - 볼륨] 볼륨 생성 - 유형(SSD gp2) , 크기(20GiB) , AZ(az1) , 스냅샷ID(-) , 태그(Name : Data1) ⇒ 새로고침
- [EC2 - EBS - 볼륨] 작업 - 볼륨 연결 - 인스턴스(EC2-STG1) , 디바이스 ⇒ EC2스토리지확인 (종료 시 수동 삭제 필요)
EC2-STG1 신규 볼륨 사용 설정
# 라이브 상태에서 디바이스 추가 확인
[root@EC2-STG1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 20G 0 disk
# 볼륨 ID 확인
[root@EC2-STG1 ~]# lsblk -o +SERIAL
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT SERIAL
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 20G 0 disk
# data만 출력되므로 현재는 파일 시스템이 없음 - 생성해줘야함
[root@EC2-STG1 ~]# file -s /dev/xvdf
/dev/xvdf: data
# 볼륨 포맷하여 파일시스템 생성
[root@EC2-STG1 ~]# mkfs -t xfs /dev/xvdf
meta-data=/dev/xvdf isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=0
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 디렉터리 생성 후 마운트
[root@EC2-STG1 ~]# mkdir /data
[root@EC2-STG1 ~]# mount /dev/xvdf /data
# 파일 생성 후 확인
[root@EC2-STG1 ~]# echo "EBS Test" > /data/memo.txt
[root@EC2-STG1 ~]# cat /data/memo.txt
EBS Test
# 디바이스 확인
[root@EC2-STG1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 20G 0 disk /data
[root@EC2-STG1 ~]#
[root@EC2-STG1 ~]# df -hT /dev/xvdf
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvdf xfs 20G 53M 20G 1% /data
심화/옵션 : EC2 재부팅시에도 자동 mount 되게 설정 (실제 실습 X)
# 혹시 모르니 fstab 파일 백업
# fstab 에 대해서 추가 공부 필요(linux)
[root@ST1 ~]# cp /etc/fstab /etc/fstab.orig
# 재부팅이후에도 볼륨 자동 탑재를 위한 fstab 설정 (nofail:볼륨 없어도 부팅 가능)
[root@ST1 ~]# blkid
/dev/xvda1: LABEL="/" UUID="55da5202-8008-43e8-8ade-2572319d9185" TYPE="xfs" PARTLABEL="Linux" PARTUUID="591e81f0-99a2-498d-93ec-c9ec776ecf42"
/dev/xvdf: UUID="24c1a297-6d1f-4a69-8246-04643fcf58e9" TYPE="xfs"
echo "UUID=위blkid의자신의UUID입력 /data xfs defaults,nofail 0 2" >> /etc/fstab
[root@ST1 ~]# echo "UUID=999027bb-6f7a-4b22-866b-ca5e213720d0 /data xfs defaults,nofail 0 2" >> /etc/fstab
[root@ST1 ~]# cat /etc/fstab
UUID=55da5202-8008-43e8-8ade-2572319d9185 / xfs defaults,noatime 1 1
UUID=aebf131c-6957-451e-8d34-ec978d9581ae /data xfs defaults,nofail 0 2
# 위 항목 설정이 잘 되었는지 확인을 위해서 탑재를 해제 후 다시 탑재합니다. 오류가 있을 시 문제를 출력합니다
[root@ST1 ~]# umount /data
[root@ST1 ~]# mount -a
# 재부팅 이후 자동으로 디바이스 탑재 및 생성한 파일 확인
[root@ST1 ~]# reboot
...
(재부팅 이후)
...
# 정상적으로 디스크 디바이스가 보이고 마운트 되어 있으며 생성한 파일을 확인 할 수 있다
[root@ip-172-31-0-26 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 100G 0 disk
[root@ip-172-31-0-26 ~]# cat /data/memo.txt
EBS Test
EC2-STG1 루트 볼륨 확장 및 볼륨 유형 변경 (탄력적 볼륨, 라이브 상태)
- 볼륨 수정 : [EC2 - EBS - 볼륨] 루트볼륨 작업 - 볼륨 수정 - 볼륨 유형(gp3) , 크기(20 GiB) → 3~4분 정도 소요됨
- 파일 시스템 확장 : 볼륨이 optimizing 상태가 되자마자 파일 시스템 크기 조정을 할 수 있다
- 파티션 늘림
- 파일시스템 늘림
# 현재 루트 볼륨이 20G로 반영되어 있는데 아직 xvda1 파티션 크기가 8G 이므로 파티션 확장 필요
[root@EC2-STG1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 20G 0 disk /data
# xvda1 크기 8G
[root@EC2-STG1 ~]# df -hT /dev/xvda1
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvda1 xfs 8.0G 1.8G 6.2G 23% /
# 1. growpart 명령어로 파티션 늘림
[root@EC2-STG1 ~]# growpart /dev/xvda 1
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=41938911 end=41943007
# 파티션 반영
[root@EC2-STG1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
└─xvda1 202:1 0 20G 0 part /
xvdf 202:80 0 20G 0 disk /data
# 파일 시스템 반영 안됨
[root@EC2-STG1 ~]# df -hT /dev/xvda1
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvda1 xfs 8.0G 1.8G 6.2G 23% /
# 2. xfs_gorwfs 명령어로 볼륨의 파일 시스템 확장
[root@EC2-STG1 ~]# xfs_growfs -d /
meta-data=/dev/xvda1 isize=512 agcount=4, agsize=524159 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0
data = bsize=4096 blocks=2096635, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2096635 to 5242363
# 최종적으로 파일시스템까지 20G 용량으로 확장
[root@EC2-STG1 ~]# df -hT /dev/xvda1
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvda1 xfs 20G 1.9G 19G 10% /
------------(심화 메모)---------------
# ext4 볼륨의 경우 아래 명령어로 확장한다
resize2fs /dev/xvda1
- 추가로 EBS 볼륨을 연결 후 다시 해당 볼륨을 확장 시에도 위와 동일한 작업을 진행하면 됨
심화/옵션 : EC2-STG1의 루트 볼륨(EBS) Snapshot - 증분 백업 확인
# 더미 파일 생성
fallocate -l 10G /home/10G.dummy //의미없는 파일 생성
ls -alh /home/10G.dummy
df -hT /dev/xvda1
du -hs /home
- [EC2 - EBS - 볼륨] 스냅샷 생성(루트 볼륨) - 설명(FirstSnatshot) 스냅샷 생성 클릭
- [EC2 - EBS - 스냅샷] 클릭 후 진행 상황 확인 => 시간 확인하면 엄청 빠르다
'Infra > cloud' 카테고리의 다른 글
[AFOS] 4주차 스토리지 서비스 - 실습 : S3 (0) | 2021.07.13 |
---|---|
[AFOS] 4주차 스토리지 서비스 - 실습 : EFS (0) | 2021.07.13 |
[AFOS] 4주차 스토리지 서비스 (0) | 2021.07.12 |
[AFOS] 3주차 네트워킹 서비스 - 실습 : VPC 구성(프라이빗 서브넷) (0) | 2021.07.09 |
[AFOS] 3주차 네트워킹 서비스 - 실습 : VPC 구성(퍼블릭 서브넷) (0) | 2021.07.09 |