220530

HyeonKi Jo·2022년 5월 30일
0
post-thumbnail

AWS

  • 저번주에 예고했던대로 요금이 발생하였다.
    • 도쿄 리전으로 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를 사용하고 있다.

EFS (Elastic File System)

  • 파일 스토리지
  • 관리형 파일 시스템, 완전 관리형 서비스이다.
    • 관리형 : 자동으로 백업, 고가용성 유지, 자동으로 조정
  • 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 이름으로 연결되어있다.

S3 (Simple Storage Service)

  • 객체 스토리지
  • 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 생성

  • 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의 압축을 해제해준다.
  • 웹 서버가 잘 작동한다.

5. AWS 이미지 서비스

  • Amazone 머신 이미지(AMI)는 인스턴스를 시작하는데 필요한 정보를 제공한다.
  • Root볼륨 -> Snapshot -> 이미지
    • snapshot을 복사해서 백업을 할 수도 있고, 다른 리전으로 전송도 가능하다.
    • 이미지를 다른 리전으로 전송할 떄, 스냅샷도 다른 리전으로 같이 이동한다.
  • 즉, 이미지는 스냅샷과 함께 전송된다.
  • WEB02의 이미지를 만들어 본다.
  • 이미지를 생성했는데, 스냅샷이 생성되고있다.
    • 이미지는 스냅샷이 따라가야 하기 때문이다.
  • 이미지도 생성되었다.
  • 현재 우리는 웹서버가 설치된 이미지를 만들었다.
    • 이미지로 인스턴스를 생성만 해도 웹서버가 설치되어 IP주소로 접근할 수 있다.
    • 만약 게임회사라면, 게임서버를 이미지로 만들어 인스턴스 생성하자마자 게임서버가 되는 이미지를 생성할 수도 잇을 것이다.

WEB03만들기

  • 생성한 이미지로 인스턴스를 만들어본다.
  • 내 AMI -> 내 소유 -> MY-AMI
  • t2.micro
  • 기존 키페어 사용
  • ap-northeast-2c
  • SG-WEB
  • 인스턴스 생성만 했는데 부트스트랩 웹페이지가 나온다.

템플릿

템플릿 생성

  • 이렇게 인스턴스에서 템플릿을 생성한다.
  • 이름을 정하고, 이미지를 내 소유 이미지로 설정한다.
  • 기존과 비슷하게 생성한다.
    • 결국 이름만 다르게 했을 뿐, 그대로이다.

템플릿으로 인스턴스 생성

  • EC2 대시보드에서 인스턴스 시작에 보면 템플릿으로 인스턴스 시작 버튼이 있다.
  • 이전에 설정했던 설정값들이 모두 저장되어있다.
  • 설정에서 바꿀 부분은 그 부분만 수정해서 인스턴스를 시작하면 된다.
  • 즉, 미리 템플릿을 만들어 놓고, 인스턴스를 금방 만들 수 있다.

6. 네트워크 (VPC, Virtual Private Cloud)

  • 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와 직접적으로 연결되어 있다.

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를 선택하고 인터넷 게이트웨이 연결해준다.
  • 잘 연결되어있다.

라우팅테이블 생성


  • 자동 생성된 라우팅 테이블의 이름을 바꾸고 라우팅을 편집해준다.
  • 인터넷 게이트웨이를 눌러준다.
  • 이미지처럼 방금 생성한 인터넷 게이트웨이 이름이 튀어나와야 한다.
    • 만약 튀어나오지 않는다면, 인터넷 게이트웨이와 VPC가 연결되지 않은 것이다.

서브넷 연결 편집


  • 서브넷을 모두 연결해준다.
  • 이제 내가 만든 네트워크에 연결된 서브넷들이 외부와 통신이 되고, 또, 내부 서브넷끼리 통신이되는 전체 네트워크가 구성되었다.

네트워크를 새로 만들었으니, Default VPC 인스턴스 삭제

  • 인스턴스 모두 삭제
    • Default VPC에 생성된 인스턴스들은 모두 172.~~~ IP를 가지고 있다.
  • EFS 모두 삭제

MY-VPC에서 인스턴스 생성하기

인스턴스 생성

  • 템플릿으로 인스턴스를 생성한다.
  • 아까 생성한 웹서버 템플릿이 있다.
  • 설정에서 바꿔야할 부분이 좀 있다.
  • MY-PUBLIC-SUBNET-2A으로 네트워크를 설정해야한다.
  • 서브넷이 바뀌었기 때문에, 보안그룹을 새로 생성해야한다.
  • 이름을 MY-SG-WEB으로 생성하고, 기존SG-WEB처럼 만들어준다.
  • 이렇게 인스턴스를 생성하기위해 설정을 변경하는데, 이게 템플릿 자체에 수정되는것이 아닌, 임시적으로 바꿔 인스턴스를 커스터마이징 하는 것이다.
  • 인스턴스 생성이 잘 되었고, 웹에서 접속할 수 있었다.

Route 53 (확장 가능한 DNS 및 고메인 이름 등록)

  • DNS서버 설정할 떄 사용했던 A레코드, Cname등 을 사용할 것이다.

AWS 정리

  • 인스턴스 종료
    • 이미지 삭제
    • 스냅샷 삭제
    • 시작 템플릿도 삭제
  • S3 삭제
    • 안에 객체들을 모두 지워야 버킷을 삭제할 수 있다.
    • 버전관리 때문에 숨겨져 있는 파일들이 존재해서 비워있지 않다는 문구를 볼 수 있다. 버킷 지우기 구성을 눌러 비운 후, 삭제하면 된다.
profile
Talking Potato

0개의 댓글