- 저번주에 예고했던대로 요금이 발생하였다.
- 도쿄 리전으로 10Gb용량의 스냅샷을 이동했기 때문이다.
- 원화로 51원이 발생하였다.
- Data Transfer가 나중에 실무에도 중요한 이슈 사항이 있을 수 있다.
- 이름 : WEB01
- Amazon Linux 5.10 (프리티어)
- 키페어 : 기존 키 사용
- 네트워크 설정
- ap-northeast-2a
- 방화벽(보안그룹) : 기존 보안그룹 선택, SG-WEB
- 사용자데이터
#!/bin/bash yum install -y httpd systemctl enable --now httpd echo "<h1>WEB01(Amazon Linux)</h1>" > /var/www/html/index.html
- 현재 볼륨을 xvda 1 8Gb를 사용하고 있다.
- 파일 스토리지
- 관리형 파일 시스템, 완전 관리형 서비스이다.
- 관리형 : 자동으로 백업, 고가용성 유지, 자동으로 조정
- EC2용 (완전)관리형 파일 스토리지
- AWS에서 사용할 EFS이기 때문에 이름을 AWS-EFS로 한다.
- 또, 현재는 VPC가 하나밖에 없지만 나중에나 실무에서는 여러개일 수 있다. 현재는 하나뿐이다.
- EFS도 일종의 인스턴스 이기 때문에 리전이 존재한다.
- One Zone은 단일 AZ내에 데이터를 저장한다.
- 가용성이 낮지만 저렴하다.
- 리전은 가용성이 높지만 비용이 증가한다. (다만 현재 프리티어이기 때문에 무료다.)
- 위와 같이 설정되었다
EFS 연결(1)
- 연결버튼을 누르면 이 화면이 나온다.
- IP를 통해 탑재
- 하이브리드 클라우드를 구성할 때 이 방법을 주로 사용한다.
- DNS를 통한 탑재
mkdir efs
sudo mount -t efs -o tls fs-0c6b513144d49160f:/ efs
- 위 명령어로 웹서버 인스턴스와 EFS를 연결한다.
- 그러나 efs는 공식이 아니기때문에 따로 설치해야한다.
sudo yum install -y amazon-efs-utils
- 그러나 작동하지 않는다.
- 보안그룹을 확인해야 한다.
EFS 보안그룹 생성
- EC2 보안그룹을 만들어준다.
- 이름을 SG-EFS로 만들어주고, 설명을 비워두면 안되서 이름을 그대로 넣어준다.
- 또, VPC를 설정해준다.
- 인바운드 규칙에 NFS(2049)포트를 모든 사용자에 대해 열어준다.
- 만약 인바운드 규칙으로 소스에 다른 보안그룹으로 열어주면, 그 보안그룹에 연결되어있는 인스턴스만 들어올 수 있다.
- 보안그룹을 이렇게 생성한다.
- EFS 클릭 -> 네트워크에서 가용 영역의 보안그룹을 확인한다.
- 모두 보안그룹이 Default로 되어있다.
- 보안그룹을 제거한다.
- 모두 SG-EFS로 변경한다.
- 여기서 웹서버 인스턴스에서 다시 명령어를 입력해본다.
sudo mount -t efs -o tls fs-0c6b513144d49160f:/ efs
- EFS가 127.0.0.1 이름으로 연결되어있다.
- 객체 스토리지
- URL 생성, 클릭 -> 다운로드
- OpenStack에서 swift를 생각할 수 있다.
- S3와 S3 Glacier가 존재한다.
- Glacier는 빙하라는 의미로, 차갑다는 표현은 느리다는 표현이라고 생각할 수 있다.
- 저렴하면서 대용량의 공간을 제공하지만, 한번 업로드 된것을 다시 다운로드 받는데, 매우 느리다.
- OpenStack Swift에서는 컨테이너를 만들었는데, S3는 버킷을 만든다.
버킷 만들기
- 버킷을 만들어 본다.
- 버킷의 이름은 고유해야 한다. (다른사람이 사용하면 안된다.)
- 공백, 또는 대문자를 포함할 수 없다.
- 기존에 정의한 도메인을 넣어서
s3.[도메인주소]
로 이름을 만들어준다.
- S3는 글로벌 영역에 존재한다. 내 VPC영역 밖에서 인터넷 망을 통해 S3에 연결된다. 즉, 우리의 VPC영역에 있지 않아 로컬 통신을 못한다.
- 리전에 S3를 정의하지만, 로컬은 아닌 특이한 위치에 존재한다.
ACL (Access Control List)
- 차단 및 허용
- ACL 비활성화(권장)은 버킷의 퍼블릭 액세스를 차단하는 것이다.
- 퍼블릭 액세스를 차단하면 오직 계정을 가진사람만 접근할 수 있다.
- ACL 비활성화가 원천 봉쇄라면, ACL 활성화는 허용을 선택해서 허용한다는 것이다.
- 위와 같이 조건별로 액세스를 컨트롤 할 수 있다.
- 아래 경고는, 버킷 안에 데이터가 아무나 들어와서 가져갈 수 있다는 것이다.
- 만약 SNS등에 링크가 풀려서 아무나 들어와 데이터를 가져가고, 통제할 수 없다면, DataTransfer에서 어마어마한 요금이 청구될 것이다.
버킷 버전관리
- 똑같은 이름을 가진 파일이 중복되서 업로드 되었을 때, 그 중복되어 사라진 파일이 버전관리로써 따로 보관되게된다.
- 의도치않게 덮어씌우기되거나, 이전 버전으로 돌아가고 싶을 때, 따로 보관된 파일을 가져오면 된다.
- 구글 드라이브에는 이미 적용되어있다.
기본 암호화
- 스니핑 공격을 막을 수 있도록, 암호화 하는것이다.
- Key를 가지고 암호화하고, 또 복호화 한다.
- 데이터가 업로드 될 때, 암호화
- 데이터 다운로드 할 떄, 복호화한다.
- Amazone S3 관리형 키(SSE-S3)는 서버측에서 자동으로 암호화, 복호화 해준다.
객체 잠금
- 파일이 쉽게 지워지거나 변경되지 않게 버킷을 쉽게 지우지 않도록 하는 것이다.
버킷
- 버킷이 생성되었다.
- 액세스, 객체를 퍼블릭으로 설정할 수 있다. 즉, 아직 한번의 보안이 남아있다.
- 폴더를 생성한다.
- 폴더별로 서버측 암호화를 또 적용할 수 있지만 이번엔 비활성화 한다.
- 폴더가 잘 생성되었다.
- 폴더에 이미지를 올려본다.
- 이미지가 잘 올라갔다.
- 파일을 올려도, 업로드 버튼을 눌러 업로드를 완료해줘야 한다.
- 업로드 후, 이미지에 체크박스를 누르고, URL복사를 눌러본다.
- 크롬이 아닌, FireFox로 접근해본다.
- 안된다.
- 현재 퍼블릭 액세스기능을 설정하지 않아서 접근이 안된다.
- 작업 -> ACL을 사용하여 퍼블릭으로 설정 을 클릭해 퍼블릭으로 설정한다.
- FireFox에서 사진이 잘 보인다.
- 이번엔 index.html을 올려본다.
- index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Sample Deployment</title> <style> body { color: #ffffff; background-color: #0188cc; font-family: Arial, sans-serif; font-size: 14px; } h1 { font-size: 500%; font-weight: normal; margin-bottom: 0; } h2 { font-size: 200%; font-weight: normal; margin-bottom: 0; } </style> </head> <body> <div align="center"> <h1>S3 TEST PAGE</h1> <h2>This application was deployed using AWS ECS, EKS.</h2> <p>For next steps, read the <a href="https://aws.amazon.com/ko">AWS Management Console.</a></p> <p><img src="https://s3.ap-northeast-2.amazonaws.com/s3.cocudeny.shop/images/two-rabbit+(1).jpg" alt="두마리 토끼" height="350"></p> </div> </body> </html>
- 파일을 업로드 하면서, 권한 -> 퍼블릭 읽기 액세스 권한부여로 설정하면, 업로드하면서 동시에 퍼블릭으로 설정할 수 있다.
- 바로 html에 접근이 가능했다.
- 이렇게 서버가 다운되어야하는 상황일 떄, 간단한 HTML파일로 서버 공지를 올리는 방식으로 사용할 수 있다.
구글 드라이브
https://drive.google.com/file/d/1zWtTceWhExiBatt-Lc1Ay_ri1M5UlZwX/view
이 링크로 클릭하면,
- 이런식으로 나온다.
- 구글드라이브에 올라와있는 파일은 웹브라우저가 없으면 받을 수 없다. 그저 view라는 파일이 다운로드 돼있다.
- 즉, 우리가 흔히 생각한 객체 스토리지라고 생각할 수 없다.
S3
- S3에서는 wget으로 이미지를 얻을 수 있었다.
- Swift나 S3 등 객체스토리지만 가능하다.
- 인스턴스 주소로 들어가서 위와같이 이미지를 확인할 수 있다.
- WEB02
- Ubuntu 18.04
- 기존키 사용
- ap-northeast-2c
- 보안그룹 SG-WEB
- 파일 시스템은 EFS와 EFx를 선책할 수 있고,
- 아래 공유파일 시스템 추가 버튼으로 쉽게 마운트를 진행할 수 있다.
- 파일 시스템이 우리가 생성한 AWS-EFS이고, 탑재지점이 마운트 경로이다.
- 긴 이름으로 마운트가 잘 된 것을 볼 수 있다.
- 마운트 경로도 설정한 대로 설정되어있다.
- 아까 입력한 파일도 잘 출력된다.
- Ubuntu (WEB02)에서 파일을 수정해본다.
- WEB01에서 추가된 내용을 볼 수 있다.
get https://s3.ap-northeast-2.amazonaws.com/s3.alibaba9.shop/aws.tar
- 교수님 S3에서 aws.tar를 가져왔다.
sudo apt-get install apache2
- 우분투에서 apache2(httpd)설치해준다.
sudo tar -xf aws.tar -C /var/www/html/
- aws.tar의 압축을 해제해준다.
- 웹 서버가 잘 작동한다.
- Amazone 머신 이미지(AMI)는 인스턴스를 시작하는데 필요한 정보를 제공한다.
- Root볼륨 -> Snapshot -> 이미지
- snapshot을 복사해서 백업을 할 수도 있고, 다른 리전으로 전송도 가능하다.
- 이미지를 다른 리전으로 전송할 떄, 스냅샷도 다른 리전으로 같이 이동한다.
- 즉, 이미지는 스냅샷과 함께 전송된다.
- WEB02의 이미지를 만들어 본다.
- 이미지를 생성했는데, 스냅샷이 생성되고있다.
- 이미지는 스냅샷이 따라가야 하기 때문이다.
- 이미지도 생성되었다.
- 현재 우리는 웹서버가 설치된 이미지를 만들었다.
- 이미지로 인스턴스를 생성만 해도 웹서버가 설치되어 IP주소로 접근할 수 있다.
- 만약 게임회사라면, 게임서버를 이미지로 만들어 인스턴스 생성하자마자 게임서버가 되는 이미지를 생성할 수도 잇을 것이다.
- 생성한 이미지로 인스턴스를 만들어본다.
- 내 AMI -> 내 소유 -> MY-AMI
- t2.micro
- 기존 키페어 사용
- ap-northeast-2c
- SG-WEB
- 인스턴스 생성만 했는데 부트스트랩 웹페이지가 나온다.
템플릿 생성
- 이렇게 인스턴스에서 템플릿을 생성한다.
- 이름을 정하고, 이미지를 내 소유 이미지로 설정한다.
- 기존과 비슷하게 생성한다.
- 결국 이름만 다르게 했을 뿐, 그대로이다.
템플릿으로 인스턴스 생성
- EC2 대시보드에서 인스턴스 시작에 보면 템플릿으로 인스턴스 시작 버튼이 있다.
- 이전에 설정했던 설정값들이 모두 저장되어있다.
- 설정에서 바꿀 부분은 그 부분만 수정해서 인스턴스를 시작하면 된다.
- 즉, 미리 템플릿을 만들어 놓고, 인스턴스를 금방 만들 수 있다.
- VPC, 서브넷, 라우팅테이블, 인터넷 게이트웨이는 무료다 ㅎㅎ
- VPC 대시보드
- 기본으로 제공된 Default VPC가 하나 존재하는 것을 볼 수 있다.
- 172.31.0.0/16의 IPv4범위를 가지고 있다.
- /16 범위는 총 16개의 서브넷 범위를 가지고 있다.
- 그러나 현재 a~d까지 4개의 서브넷만 사용하고 있다.
- 기본 Public 서브넷의 2a ~ 2d까지 이므로 알기 쉽게 Name태그를 붙혀준다.
- 라우팅 테이블은 현재 하나가 존재한다.
- 기본 VPC와 같이 사용되어있었다.
- 라우터는 내부 서브넷에서 다른 서브넷으로 이동할 떄, 목적지 (Destination)주소가 내부 주소범위에 속한다면, 한 서브넷에 존재하는 것처럼 다른서브넷과 서로 연결해주는 역할을 한다.
- 또, 옳은 목적지 IP주소가 들어오면 다음 라우터 (Next hop)로 전달하고, 이상한 IP주소가 들어오면 거부하는 외부와의 통신도 연결해준다.
- 라우팅 테이블에서 Local Target (내부 서브넷 IP 테이블)만 존재한다면 그것을 Private RTB(Routing table)라고 한다.
- Local Target과 Anyware (0.0.0.0)까지 존재해, 외부로 들어오고 나갈 수 있다면 Public RTB이다.
- 현재 AWS의 라우팅 테이블은 내부 서브넷끼리만 연결하니, Private 라우팅테이블이라고 할 수 있다.
- 외부 인터넷 망과, 내부 라우터를 연결해주는 인터넷 게이트웨이다.
- Attached : VPC와 직접적으로 연결되어 있다.
- 이름을 MY-VPC로 한다.
- IPv4 CIDR은 강의실에서 배정한 범위를 사용한다.
- 만든 VPC에 Public 가용영역을 DEF-VPC처럼 4개를 만들어준다.
서브넷 생성
- 방금 만든 MY-VPC를 선택해준다.
- 첫번째 서브넷이다. 서브넷 2a를 이용하기 위해 이름도 같이 2A로 붙여준다. 또, 이름에도 표시한 만큼 반드시 서브넷 2a를 사용한다.
- 두번째 서브넷이다. 역시 2B를 사용하며, CIDR(싸이더)블록은 10.28.16.0/20부터 시작하게 된다.
- 똑같이 세번째 서브넷이다. 2C를 사용하며 10.28.32.0/20부터 시작한다.
- 마지막으로 네번째 서브넷이다. 2d를 사용하며, 10.28.48.0/20부터 시작한다.
- 서브넷이 생성되었다.
- 이름만 주면 세팅할 것이 없다.
- 기능이 내재되어있기 때문에 연결만하면 된다. 매우 편리하다.
- 인터넷 게이트웨이가 생성되었다. 위 초록색 알림을 보면, 이제 VPC에 연결하여 VPC가 인터넷과 통신하도록 할 수 있다고 한다.
- 즉, VPC와 연결해야한다.(필수)
- 하지 않으면, 인터넷을 사용할 수 없다.
- 이 과정을 항상 잊어버리곤 한다.
- 위 화면에서 생성한 VPC를 선택하고 인터넷 게이트웨이 연결해준다.
- 잘 연결되어있다.
- 인스턴스 모두 삭제
- Default VPC에 생성된 인스턴스들은 모두 172.~~~ IP를 가지고 있다.
- EFS 모두 삭제
- 템플릿으로 인스턴스를 생성한다.
- 아까 생성한 웹서버 템플릿이 있다.
- 설정에서 바꿔야할 부분이 좀 있다.
- MY-PUBLIC-SUBNET-2A으로 네트워크를 설정해야한다.
- 서브넷이 바뀌었기 때문에, 보안그룹을 새로 생성해야한다.
- 이름을 MY-SG-WEB으로 생성하고, 기존SG-WEB처럼 만들어준다.
- 이렇게 인스턴스를 생성하기위해 설정을 변경하는데, 이게 템플릿 자체에 수정되는것이 아닌, 임시적으로 바꿔 인스턴스를 커스터마이징 하는 것이다.
- 인스턴스 생성이 잘 되었고, 웹에서 접속할 수 있었다.
- DNS서버 설정할 떄 사용했던 A레코드, Cname등 을 사용할 것이다.
- 인스턴스 종료
- 이미지 삭제
- 스냅샷 삭제
- 시작 템플릿도 삭제
- S3 삭제
- 안에 객체들을 모두 지워야 버킷을 삭제할 수 있다.
- 버전관리 때문에 숨겨져 있는 파일들이 존재해서 비워있지 않다는 문구를 볼 수 있다. 버킷 지우기 구성을 눌러 비운 후, 삭제하면 된다.