AWS가 자랑하는 스토리지 서비스에 대해서 알아보겠습니다.
스토리지 : 컴퓨터가 데이터를 저장하는 공간, 또는 그러한 장치
스냅샷 : 순간적으로 자료나 정보를 저장하는 일종의 수단
스토리지를 이해하기 위해서는 먼저 각 스토리지의 특징을 알아야 합니다.
블록 스토리지 : 주차장에 자신의 차를 금방 찾을 수 있지만 주차장이 꽉 차면 필요한 만큼 주차장을 확장시켜야 합니다.
파일 스토리지 : 주차타워에 자신의 차를 타기 위해선 주차타워가 한 바퀴 돌아야 하기에 차를 찾는 시간이 길어집니다.
오브젝트 스토리지 : 자신의 차가 어디에 세워지는지 알 필요가 없고 자신의 차 키만 있으면 됩니다.
그렇다면 AWS에서는 어떠한 스토리지 서비스가 있을까요?
Amazon Elastic Block Stroe(EBS)
- EC2 인스턴스에 사용할 수 있는 블록 수준 스토리지 볼륨을 제공합니다.
- 하드 드라이브와 같은 블록 디바이스처럼 볼륨을 사용할 수 있으며 볼륨의 구성을 동적으로 변경할 수 있습니다.
- 데이터에 빠르게 액세스하고 장기적으로 자주 지속하는 경우에 좋습니다.
Amazon Elastic File System(EFS)
- AWS와 온프레미스에 사용할 수 있는 확장 가능하며 탄력적인 네트워크 파일 시스템을 제공합니다.
- 애플리케이션을 중단하지 않고 온디맨드 방식으로 자동 확장 축소가 됨
Amazon Simple Storage Service(S3)
- 인터넷용 객체기반 무제한 스토리지 서비스입니다.
- 다양한 스토리지 클래스가 제공되에 편의에 맞게 사용할 수 있습니다. (용어 정리 2에 정리되어있음)
AWS CloudFormation
- 일일이 수동으로 리소스를 만들지 않고 코드를 통하여 생성 가능
- 리소스 비용을 쉽게 추정할 수 있음
- 템플릿이 많기에 활용성이 높음
- 개인적으로 최근 들었던 서비스 중 제일 유용하고 신기한 서비스인 것 같습니다.
이제 AWS-입문(4주차)를 시작하겠습니다.
1. AWS 콘솔에서 CloudFormation 서비스에 들어갑니다.
2. 오른쪽 상단에 스택생성 버튼을 누릅니다.
3. 준비된 템플릿과 Amazon S3 URL을 체크한 후 밑의 URL에 다음과 같은 주소를 작성한 후 다음을 누릅니다.
https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/STORAGE/Storage.yaml
# 위의 URL의 해석은 Cloudneta팀이 만든 Cloudformation의 스토리지에서 템플릿을 받아온다는 내용이며
# 템플릿의 내용은 Storage.yaml에 들어 있습니다.
# yaml 안에는 서브넷 생성, VPC 생성, 자원 선정 등 이전 시간에 콘솔로 직접 했던 내용들이
# 코드로 구현되어 있습니다.
4. 스택 이름은 자유이며 파라미터의 키는 자신이 예전 실습때 만든 키로 지정해주고 다음을 누릅니다.
5. 스택 옵션 구성에서는 바꿀 내용이 없기에 다음을 눌러줍니다.
6. 검토에서 맨 밑에 체크박스에 체크를 한 후 생성을 눌러줍니다.
7. 맨 처음 이벤트가 1개였다가 새로고침을 누르면 여러 이벤트가 발생된걸 알 수 있습니다.
8. 어느 정도의 시간이 경과 후 EC2 서비스에서 EBS로 들어가줍니다.
9. 볼륨 생성을 누른 후 아래와 같이 설정한 다음 생성해줍니다.
10. 금방 만든 볼륨에 클릭한 후 작업의 볼륨 연결로 들어갑니다.
11. 인스턴스에는 EC2-STG1을 클릭하고 디바이스명은 xvdf로 변경한 후 연결을 누릅니다.
12. 이제 SSH로 접속을 시도해보겠습니다
13. 이전에 설치해놓은 Xshell7을 실행하고 STG1의 IP로 접속을 해줍니다.
14. 밑의 창이 뜬다면 찾아보기에서 자신이 예전 실습에 만든 ㅁㅁ.pem 키를 넣어주고 연결합니다.
15. 무사히 접속했다면 다음과 같은 창이 출력됩니다.
16. 다음과 같은 코드를 순서대로 하면서 코드의 의미와 출력의 내용을 이해합니다.
# 관리자 권한으로 변경
sudo su -
# 라이브 상태에서 디바이스 추가 확인 됨
[root@ST1 ~]# 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
# 볼륨 ID 확인
[root@ST1 ~]# lsblk -o +SERIAL
# 현재는 파일 시스템이 없음
[root@ST1 ~]# file -s /dev/xvdf
/dev/xvdf: data
# 볼륨을 포맷하여 파일시스템을 생성
[root@ST1 ~]# mkfs -t xfs /dev/xvdf
meta-data=/dev/xvdf isize=512 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=0
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=12800, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 디렉터리를 생성 후 마운트
[root@ST1 ~]# mkdir /data
[root@ST1 ~]# mount /dev/xvdf /data
# 파일을 생성 후 확인
[root@ST1 ~]# echo "EBS Test" > /data/memo.txt
[root@ST1 ~]# cat /data/memo.txt
EBS Test
# 디바이스 확인
[root@ST1 ~]# 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 /data
[root@ST1 ~]# df -hT /dev/xvdf
Filesystem Type Size Used Avail Use% Mounted on
/dev/xvdf xfs 100G 135M 100G 1% /data
# xvdf는 20G로 표현됩니다.
17. AWS 콘솔에 EFS 서비스에 들어가 파일 시스템 생성을 누릅니다.
18. 이름은 자유이며 VPC에는 ELB-VPC를 선택한 후 생성해줍니다.
19. 만들어진 EFS를 클릭하고 아래에 네트워크 메뉴에서 관리버튼을 누릅니다.
20. 보안 그룹을 기존에 있던 디폴트 그룹을 지우고 템플릿을 통해 만들어둔 보안 그룹으로 지정해주고 저장합니다.
21. EC2-STG1 에 EFS 마운트할건데 SSH에서 아래의 코드를 순서대로 입력하며 자신의 EFS ID에는 위에 EFS를 눌렀을 당시 자신의 이름 옆에 나오는 코드를 의미합니다.
EC2 - ST1)
# 현재 웹서버 동작 중
[root@ST1 ~]# curl localhost
<html><h1>Hello from Web Server - Region ( ap-northeast-2a ) - Private IP ( 172.31.12.49 )</h1></html>
# efs 디렉터리 생성
[root@ST1 ~]# mkdir /var/www/html/efs
# 자신의 EFS ID 확인 후 마운트
mount -t efs -o tls 자신의-EFS-ID:/ /var/www/html/efs
[root@ST1 ~]# mount -t efs -o tls fs-7871ca18:/ /var/www/html/efs
# EFS 마운트 한 곳에 파일 생성
[root@ST1 ~]# echo "<html><h1>Hello from Amazon EFS</h1></html>" > /var/www/html/efs/index.html
# EFS에 생성한 파일 확인
[root@ST1 ~]# curl localhost/efs/
<html><h1>Hello from Amazon EFS</h1></html>
# EFS Size 확인 - 사용자는 용량 신경 쓸 필요 없이 실제 사용한 용량 만큼만 비용 지불
[root@ST1 ~]# df |grep efs
fs-1ebe907f.efs.ap-northeast-2.amazonaws.com:/ 9007199254739968 0 9007199254739968 0% /var/www/html/efs
[root@ST1 ~]# df -hT |grep efs
127.0.0.1:/ nfs4 8.0E 0 8.0E 0% /var/www/html/efs
# EFS DNS 주소의 IP는 각 AZ에 속한 IP 주소이다
dig +short 자신의-EFS-ID.efs.ap-northeast-2.amazonaws.com
dig +short fs-26a11a46.efs.ap-northeast-2.amazonaws.com
22. 그 후 SSH에서 새로운 셸을 추가합니다.
23. SSH의 윗 부분에 다음의 코드를 넣고 엔터를 누르면 STG2에 접속을 하게 됩니다.
ssh://ec2-user@자신의 EC2에 있는 STG2 인스턴스의 퍼블릭 ip
#ssh://ec2-user@15.164.98.89
24. STG2에 EFS를 마운트하기 위해 다음과 같은 코드를 SSH에 입력합니다.
EC2-STG2)
sudo su -
mkdir /var/www/html/efs
mount -t efs -o tls 자신의-EFS-ID:/ /var/www/html/efs
curl localhost/efs/
df -hT |grep efs
dig +short 자신의-EFS-ID.efs.ap-northeast-2.amazonaws.com
for i in {1..100}; do touch /var/www/html/efs/deleteme.$i; done;
ls /var/www/html/efs
rm -rf /var/www/html/efs/deleteme*.*
25. 다시 aws 콘솔에서 S3 서비스에 들어가 버킷 만들기룰 누릅니다.
26. 버킷의 이름은 유일하여야 하기에 아무렇게나 어렵게 설정해주시고 밑에 체크를 아래와 같이 한다음 만들어줍니다.
27. 자신이 만든 버킷을 클릭 후 아무 이미지 파일을 업로드 해주고 권한에서 아래처럼 설정 한 다음 업로드합니다.
28. 업로드된 객체를 클릭 후 객체의 URL을 복사합니다. 객체의 URL로 웹브라우저에서 열 수 있습니다.
29. 메모장에 아래의 코드를 붙여넣고 중간중간에 자신의 닉네임과 위의 객체 URL을 넣어 수정합니다.
cat <<EOF> /var/www/html/index.html
<html>
<body>
<h1>닉네임 S3 Storage<br>
<img src="https://S3 객체 URL 주소 입력">
</body>
</html>
EOF
30. 그 후 Xshell7 에서 STG1셸에서 붙여넣어줍니다.
31. 다시 AWS EC2에서 STG1의 퍼블릭 IP를 웹브라우저에서 열게되면 업로드한 이미지든 동영상이든 볼 수 있습니다.
32. 이렇게 나만의 스토리지 서버를 만들고 주변 사람들에게 IP를 배포하면 누구든지 접속할 수 있습니다.
33. 다음은 마찬가지로 SSH STG1에서 다음 코드를 입력하면서 내용을 이해합니다.
# S3 조회
aws s3 ls
# S3 버킷 생성(자유롭게 이름설정)
aws s3 mb s3://버킷(유일한 이름) --region ap-northeast-2
# 버킷 이름을 변수에 지정
MyS3=버킷
# 로컬 파일을 S3로 업로드
echo "111" > /var/www/html/111.txt
aws s3 cp /var/www/html/111.txt s3://$MyS3
aws s3 ls s3://$MyS3
# 웹 디렉터리(하위 포함)을 버킷에 업로드(백업)하기
tree /var/www/html
aws s3 sync --delete /var/www/html s3://$MyS3
aws s3 ls s3://$MyS3 --recursive
34. 아래와 같이 새로생긴 버킷에 파일들이 자동으로 업로드(백업)된 것을 볼 수 있습니다.
35. 이제 사용했던 자원들을 전부 삭제해주어야 하는데 템플릿으로 생성하였기에 생각보다 조금 있습니다.
36. EC2 인스턴스 종료 (EC2 → 인스턴스 → 인스턴스 선택 → 작업 → 인스턴스 상태 → 종료)
37. EBS 스냅샷 삭제, EBS 볼륨 (분리) 삭제
38. EFS 삭제
39. S3 삭제 (버킷 비우기 → 버킷 삭제)
40. CloudFormation 삭제
돈과 관련된 부분이 있기에 꼭 삭제해주어야 합니다.
이 부분에 대해서는 차후 조금 더 다듬도록 하겠습니다.
심화내용들이 생각보다 많아 어느 부분을 올릴지에 대해서 고민을 해봐야할 것 같습니다.
'AWS > 실습(입문)' 카테고리의 다른 글
AWS-입문(6주차) 데이터베이스 서비스 (1) | 2021.07.15 |
---|---|
AWS-입문(5주차) 보안 서비스 (0) | 2021.07.12 |
AWS-입문(3주차) 네트워킹 서비스 (0) | 2021.06.28 |
AWS-입문(2주차) EC2 배포 - 2 (0) | 2021.06.17 |
AWS-입문(1주차) EC2 배포 (0) | 2021.06.12 |