AWS
AWS
클라우드 서비스
물리적 자원 혹은 논리적 자원을 대여하는 것
만약 서버를 하나 구축한다고 가정했을 때
- 자신의 집에 장비를 직접 구축
- 클라우드 서비스에서 자원을 대여받는 것
- 클라우드 서비스의 장점
- 장비가 필요없음 따라서 구매나 관리가 필요없음
- 서버의 확장 또는 축소에 대응하기 좋다.
애플리케이션 구축에 필요한 서비스들을 돈을 주고 대여하는 것
비용절감에 매우 효과적이다.
시작 전 계정 생성 및 계좌 등록 진행
1. EC2
Elastic Compute Cloud의 약자이며 물리적인 자원을 대여해주는 것
특징
- 원하는 만큼 CPU ,디스크 등 자원을 선택하여 대여할 수 있음
- 여러가지 OS 선택이 가능하다.
EC2 요금
- 온디맨드 : 쓰는만큼 돈을 내는 것 운영체제와 지역에 따라 금액이 달라지니 확인 필
- 인터넷에서 Amazon EC2로 데이터 전송 시 무료
- Amazon EC2에서 인터넷으로 데이터 전송 시 1GB/월 무료 이후 참고
- 저장공간 , 고정IP등 추가적인 요금 확인
EC2의 자원 생성
인스턴스 1개가 컴퓨터 1개라고 생각
프리 티어 사용가능으로 셋팅
- AWS 웹 브라우저 접속 후 아시아 태평양(서울)로 지역설정
- 서비스에서 EC2를 찾은 후 인스턴스 탭에서 인스턴스 시작 클릭
- Quick start -> Amazon Linux(OS)로 선택
- 키 페어 설정 저장 된 파일을 잘 보관해야 함
- 나머지 기본 값으로 진행
EC2의 어플 배포
Node.js 어플
- 생성한 인스턴스 우측 하단에 Iv4 퍼블릭 IP주소를 복사
- 터미널 실행
- 다운로드 받은 keypair가 있는 폴더로 이동
chmod 400 testKey.pem
- 위 명령어로 400권한으로 조정
원격 제어
- 다운로드 받은 keypair가 있는 폴더로 이동
ssh -i testKey.pem ec2-user@13.124.89.173
- ssh -i 키페어파일 ec2-user@IV4 퍼블릭 IP
- 이후 등록 확인 메시지 yes 입력
- NVM(Node Version Manager).sh 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
- ssh 터미널 창에서 아래 명령어로 설치
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
- 환경변수 설정
nvm install --lts
- –lts (안정적인 버전 사용)을 사용하여 노드 다운로드
nvm use --lts
- 위 명령어로 –lts 버전으로 스위칭
- App 폴더 생성
mkdir App cd App
- Express 패키지 설치
npm i -S express
- Node.js 앱 생성
vi index.js
- vi 편집기를 이용하여 다음 코드 작성
const express = require('express')
const app = express()
app.get('', async (req, res) => {
res.send("Hello World\n")
})
app.listen(3000, () =>{
console.log("App is listening 3000 port")
})
- esc -> :wq로 저장 후 닫기
node index.js
- index.js 파일 실행 후 확인
- 동일 인스턴스 내 Get 요청 보내기
- 위 2번 과정 중 ssh명령어를 이용하여 추가로 동일한 인스턴스 접근 (터미널 2개)
curl http://localhost:3000
- 위 명령어로 인스턴스 내 로컬호스트 get요청 후 Hello World 결과 확인
- 외부에서 Get 요청
- AWS 인스터스 화면에서
- 인스턴스 설명 -> 자신의 보안그룹 선택
- 인바운드 규칙 편집
- 규칙 추가
- 3000포트 추가
- 0.0.0.0/0
- 설명 : node.js
- 규칙 저장
전세계에 3000포트 개방
- 자신의 퍼블릭 IP 13.124.89.173:3000으로 확인
EC2 자원 삭제
- keypair.pem파일 삭제
- 아마존 콘솔 -> 인스턴스 종료
- 추가적으로 만든 보안그룹이 있다면 삭제
- 인스턴스가 종료된 이후에 삭제가 가능
- EC2 대시보드 -> 삭제 확인
- 바로 삭제되지 않고 어느정도 시간이 소요된 후 삭제가 될 수있다.
———————–EC2
S3
Simple Storage Service
S3는 하드디스크와 같은 저장공간이라고 생각하면 된다. 보관뿐만아니라 파일 서버로도 사용이 가능하며 자동으로 유지 기능도 제공해준다. CRUD (Create Read Update Delete)를 할 수 있도록!
S3 목적
- 중요한 프로젝트에서 중요한 내용이 들어있는 중요한 파일을 안전하게 관리하기 위함
S3 구성요소 3인방
- Bucket
- 하나의 프로젝트가 Bucket
- Folder
- Object(File)
- S3에서는 File + 부가적인 정보를 Object라고 표현한다.
- 쉽게 Object = file이라고 생각하자
S3 버킷(Bucket) 생성
- 버킷 만들기 후 이름을 만들고(중복 불가) 진행
- 버전 관라 : 수정된 과거 내용도 보관 (설정 X)
- 서버 액세스 로깅 : 웹서버로 이용시 접근 내용을 기록 (설정 X)
- 기본 암호화 : 파일을 업로드할 때 암호화된 상태로 보관 (설정 X)
- 퍼블릭 액세스 설정: 파일을 공개파일로 설정
- 새 퍼블릭 ACL 및 퍼블릭 객체 업로드 (체크 해제)
- 퍼블릭 ACL을 통해 부여된 퍼블릭 액세스 권한 제거(체크 해제)
- 버킷만들기
수정 가능
S3 폴더(Folder) 생성
- 버켓 -> 객체 탭 -> 폴더만들기
- 이름바꾸기는 어려움
S3 객체(Object) 생성
- 원하는 폴더 또는 파일을 드래그앤드랍
- 중요도/속도/안정성 등에 따라 비용이 달라진다 자신의 상황에 맞게 스토리지 클래스 설정
- 스탠다드로 진행
객체(Object) 공유
- 객체 클릭 후 객체 개요
- 객체 URL로 공유
- 접근 거부 시 권한 변경 방법(1)
- 객체 클릭 후 권한
- 객체 소유권 - ACL 활성화
- ACL(액세스 제어 목록) 모든 사람(퍼블릭 액세스) 읽기 체크
- 접근 거부 시 권한 변경 방법(2)
- 객체 클릭 후 우측 상단(객체 작업)
- ACL을 사용하여 퍼블릭으로 설정 클릭
S3 스토리지 클래스
- 스탠다드
- 가장 많이 사용하며 잘 모른다면 사용
- 스탠다드 -IA
- 수명이 길고 자주 액세스하지 않는 데이터
- 단일 영역 -IA
- 스탠다드 IA와 비슷하지만 중요하지 않은 데이터
- 중복 감소(권장 안함)
- 권장 안함…
- Amazon Clacier
- 영수증 등 보관만 하는 용도 (꺼내오는데 오랜시간이 걸림) 모든 클래스는 장.단점이 존재하며 자신한테 맞는 클래스를 정하는게 중요
- 저장공간, 사용, 전송 요금등이 다 다르다.
- 모든 데이터 수신은 무료이다. 송신은 요금표 참조
- 저장/GET/PUT에 따라 요금이 다름
———————–S3
CloudFront
ColudFront = Cache Server + CDN
Cache
- 사용자에게 1번 보낸적이 있다면 그 기록을 저장해서 다음번에 그 데이터를 이용
CDN
Content Delivery Network
- 전세계 어디에 있던지 빠르게 서비스를 제공
- 전세계에 있는 엣지 로케이션을 통해 사용자에게 웹 서비스를 제공
EC2로 만든 웹서버를 이용하여 실습
CloudFront 생성
- 서비스 -> 네트워킹 및 컨테츠 전송 -> CloudFront 클릭
- 요청 Clinet -> Cloud Front(Distribution) -> Web Server(Origin)
- 전달 Clinet <- Cloud Front <- Web Server
- 이후 동일한 요청에 대해서 Clinet <-> Cloud Front
- CloudFront 배포 생성
- 원본 도메인 선택 : 웹서버 주소 (도메인 만)
- HTTP Port : Origin(포트 번호) 위 2가지만 설정 후 생성
#일반적인 웹서버보다 더 빠른 서비스 제공이 가능하나 동적으로 반응하지는 못함 즉 신선도가 떨어짐!! 이를 해결해야 함
캐쉬 설정
만들어진 CloudFront 탭 -> 행동 클릭 -> Object Caching : Use Origin Cache Headers
WEB Browser -> Colud Front -> WEB Server
- Chche-Control : max-age = 60
- 60초동안 유효하니 Server에게 다시 요청 필요없음 WEB Browser <- Colud Front <- WEB Server
CloudFonrt는 캐쉬를 24시간동안 유지한다 이 때 웹서버에 코드에서 캐쉬 유효시간하고 맞춰주는 작업이 필요하다.
캐쉬 무효화
- Create Invaltidation : 파일 무효화
- index.php(무효화 하려는 파일 혹은 경로) 유료 시스템임
———————–CloudFront
RDS
Amazon Relational Database Service
데이터베이스 생성
- 서비스 -> 데이터베이스 -> RDS -> 인스턴스 생성
- RDS는 여러개의 관계형데이터베이스를 빌려줌
- MySQL 설정 -> 프리티어 옵션만 선택(무료)
- DB 인스턴스 클래스
- 데이터베이스 컴퓨터의 사양 설정
- 프리티어로 설정했기때문에 나머지는 선택불가
- 언제든지 업그레이드 가능
- 다중 AZ배포 (Availiabilty Zone)
- 서로 다른 가용성 지역에 RDS DB 생성
- 데이터의 유실을 방지
- 비용 2배
- 스토리즈 유형
- 데이터를 저장하는 디스크 범용(SSD)제공
- 용량이 커지면 요금도 올라감
- 용량이 커지면 속도도 올라감 프로지버닝된 IOPS(SSD) : 더 비싸지만 빠르며 용량과 속도를 따로 설정이 가능하다.
-
설정 -> 정보 입력
- 고급 설정 구성 -> 네트워크 및 보안
- VPC : 외부로부터 독립된 안전한 네트워크를 구성
- 같은 VPC안에 EC2를 사용하여 안전하게 접근가능
- 퍼블릭 액세스 가능 : 같은 VPC안에서 허가된 인원만 접속가능
- 백업 보존 기간 설정 가능
퍼블릭 방식으로 접속
-
생성된 RDS 수정 -> 퍼블릭 액세스 가능을 즉시 적용하여 수정
-
엔드포인트 - > 데이터베이스 주소
-
mysql -h 데이터베이스 주소 -u 생성시 아이디 -p -> 비밀번호 입력 후 접속
- 접속이 안될 시 보안그룹에서 허용범위가 달라서 그럴 수 있음
- 보안그룹 -> 인바운드 -> 유형(MySQL)선택 -> 소스(위치무관 또는 내 IP(안전)) -> 저장
비공개 상태로 접속
같은 VPC안에서 EC2인스턴스가 RDS에 접속할 수 있게하는방법 (상당히 안전)
- 기존 퍼블릭 액세스 가능성을 아니요를 선택 후 즉시 적용하여 수정
-
보안그룹 -> 인바운드 -> 모두 설정 제거 (아무것도 없게)
- 가장 저렴한 EC2 인스턴스를 생성
- 네트워크 VPC를 RDS와 같은 값으로 설정
- 퍼블릭 IP 자동 할당 -> 활성화
- 보안그룹 : 22포트(SSH 방법)
- 생성
- 퍼블릭 주소 또는 DNS 주소로 원격제어 시작
ssh ubuntu@주소 -i keypare.pem
- mysql 설치 필요
sudo apt update
sudo apt install mysql-clinet
- RDS 에서 엔드포인트 주소 복사
mysql -h엔드포인트 주소 -이름 -p
접속 불가 -> 보안그룹 수정 필요
- 보안그룹 등록 (2가지 방법 존재하며 2번 추천)
-
- EC2 인스턴스 -> IP주소를 RDS 보안그룹에 등록
-
- EC2 인스턴스가 속해 있는 보안그룹 접속 후 보안그룹 아이디를 복사
- RDS 보안그룹 -> 인바운드
- 유형(MySQL)
- 소스 : 복사해둔 EC2 보안그룹 등록
-
6번 명령어 재실행
항상 EC2를 경유해서 RDS를 접속해야한다는 불편함은 존재하지만 그만큼 안전성이 증가한다.
모니터링
RDS -> CloudWatch(컴퓨터의 하드웨어)
- DB 연결: 클라이언트가 DB에 접속하는 횟수
- 여유 스토리지 공간 : DB에 저장할 수 있는 공간
- 사용 가능한 메모리 : 메모리가 꽉 차있으면 느림
- IOPS 쓰기/읽기 : Input Output Per Second 초당 입출력
확장 모니터링(유료 서비스)
실시간으로 프로그램의 현재상황을 전달해줌 훨씬 더 정교함