[TIL] 230627 <AWS> EC2, ELB
- -
클라우드 서비스의 종류
- IaaS (Infrastructure as a Service): 하드웨어 인프라를 인터넷을 통해 제공하는 서비스
- 가상화된 하드웨어, 스토리지, 네트워크, 운영체제 등을 제공하며, 사용자는 이를 이용해 자신의 애플리케이션을 실행
- AWS EC2, Microsoft Azure, Google Compute Engine 등이 IaaS 서비스를 제공 - PaaS (Platform as a Service) : 애플리케이션을 개발, 실행, 관리하기 위한 플랫폼을 인터넷을 통해 제공하는 서비스
- IaaS에서 제공하는 하드웨어 인프라와 미들웨어를 이용하여, 애플리케이션 개발, 배포, 운영 등에 필요한 환경을 제공
- AWS Elastic Beanstalk, Heroku, Google App Engine 등이 PaaS 서비스를 제공 - SaaS (Software as a Service): 사용자에게 완전한 애플리케이션을 제공하며, 이 애플리케이션은 클라우드 제공업체의 서버에서 실행됨
- 사용자는 애플리케이션에 대한 제한된 제어권을 가지며, 클라우드 제공업체가 모든 인프라, 운영 체제, 백엔드 애플리케이션 및 데이터 관리를 담당
- 대부분의 사용자에게 필요한 소프트웨어 서비스를 제공
- 구글 드라이브, 마이크로소프트 오피스 365, Salesforce 등이 SaaS 서비스의 예
[Elastic Compute Cloud]
- AWS EC2 (Elastic Compute Cloud)는 클라우드 컴퓨팅 서비스 중 하나로, 가상 서버 인스턴스를 제공
- EC2를 사용하면 필요한 시간만큼 가상 서버를 생성하고 사용할 수 있으며, 필요에 따라 스케일 업 또는 스케일 다운 가능
- 이 환경은 실제로는 하드웨어 리소스를 가상화하여 사용하고 있기 때문에, 하드웨어 상에서 실행 중인 물리적인 서버와는 다름
ㄴ 가상화된 컴퓨터 환경 : "인스턴스(instance)"- 각 인스턴스는 독립적으로 실행되고 관리되며, 필요에 따라 생성, 시작, 중지, 종료 등이 가능
- EC2 인스턴스는 다양한 운영 체제 (예: Linux, Windows)와 인스턴스 유형 (예: 범용, 컴퓨팅 최적화, 메모리 최적화)을 지원
- EC2는 유연하게 스케일링할 수 있으며, 필요에 따라 인스턴스를 추가하거나 제거하여 자원 사용량을 조절가능
- AWS의 다른 서비스와 통합하여 다양한 용도로 사용가능
[ EC2 주요 사용 사례 ]
- 웹 애플리케이션 호스팅
- 데이터베이스 호스팅
- 컴퓨팅 작업 (예: 데이터 분석, 머신 러닝)
- 애플리케이션 테스트 및 개발
EC2의 다양한 옵션들
- 인스턴스 유형 (Instance Types) → 서버에 할당되는 CPU, 메모리, 스토리지 및 네트워크 리소스와 같은 기본 성능 특성을 결정
ㄴ 일부 인스턴스 유형은 컴퓨팅 작업에 적합하고, 다른 유형은 메모리 집약적인 작업에 적합 - 운영 체제 (Operating System) → Amazon Linux, Ubuntu, Windows 등
- 스토리지 옵션 (Storage Options) → 인스턴스 스토어, Amazon EBS 및 Amazon S3 등
- 보안 그룹 (Security Groups) - 인바운드 및 아웃바운드 트래픽을 제어하는 방화벽 규칙
→ 각 보안 그룹은 포트 범위, 프로토콜 및 허용되는 IP 주소 범위를 정의 가능 - 키 페어 (Key Pair) - EC2 인스턴스에 대한 SSH 액세스를 허용
→ 키 페어를 만들면 EC2 인스턴스를 시작할 때 키 페어를 선택 가능 - 탄력적 IP 주소 (Elastic IP Address) - EC2 인스턴스에 고정 IP 주소를 할당
→ EC2 인스턴스를 중지하거나 시작할 때마다 IP 주소가 변경되는 것을 방지 - 사용 가능한 영역 (Availability Zones) - EC2 인스턴스는 여러 가용 영역에서 실행가능
→ 장애 대응 및 고가용성을 위해 중요
인스턴스 띄워보기
sudo apt-get update
sudo apt-get install nginx
sudo systemctl start nginx
sudo systemctl status nginx //active 상태인 것 확인
고정 IP 할당해주기
인스턴스 타입
보안 규칙을 위한 Security Group과 Ports
보안규칙
- 여러 인스턴스에 할당 가능
- time out → 보안규칙 이슈
- connection refuse → ec2 내부 이슈
- 모든 inbound는 디폴트로 막혀있음!
- 모든 outbound는 디폴트로 열려있음
포트
- 22 = ssh(secure shell)로 인스턴스에 원격 접속
- 21 = FTP 파일전송 프로토콜
- 80 = http 웹 접속
- 443 = https 안전한 http 접속, 현재의 스탠다드
SSH 연결
chmod : 파일이나 디렉토리의 권한을 변경하는 유닉스 명령어
ㄴ 파일이나 디렉토리는 소유자, 그룹, 그리고 나머지 세 개의 사용자 카테고리 가짐
ㄴ 각 카테고리에 대해 읽기(read), 쓰기(write), 실행(execute)의 권한을 설정가능
▶ chmod [권한](소유자,그룹,나머지) [파일명]
- chmod 400 : 해당 파일에 대해 소유자에게 읽기 권한만 부여됨
ㄴ 다른 사용자들은 읽기 및 쓰기 권한X
ㄴ 일반적으로 중요한 정보를 포함하는 파일이나 개인 키 파일과 같은 보안 파일에 적용 - chmod 644
- 소유자: 읽기와 쓰기 권한
- 그룹: 읽기 권한
- 나머지: 읽기 권한
▶ ssh -i [키 파일] [원격서버의 사용자명]@[원격서버의 공용 IP 주소]
- ssh: SSH 클라이언트를 호출하는 명령어
- SSH는 네트워크를 통해 다른 컴퓨터에 안전하게 로그인하고 명령을 실행할 수 있게 해주는 프로토콜
- -i newkeypair.pem: SSH 키 파일을 지정하는 옵션
- newkeypair.pem은 개인 키 파일로, 이는 원격 서버의 사용자 인증에 사용됨
- PEM(Privacy-Enhanced Mail) 형식의 키 파일은 보통 AWS나 다른 클라우드 서비스 제공자에서 인스턴스에 접근하기 위해 사용됨
- ubuntu@[public IPv4주소]: 원격 서버의 사용자명과 IP 주소
- ubuntu: 원격 서버의 사용자명
- [public IPv4주소]: 원격 서버의 공용 IP 주소. 이 주소를 통해 인터넷을 통해 해당 서버에 접속가능.
→ newkeypair.pem 키 파일을 사용하여 ubuntu 사용자로 지정된 원격 서버(공용 IP 주소가 [public IPv4주소]인 서버)에 SSH를 통해 접속!
→ 원격 서버의 터미널로 연결되어 명령을 입력할 수 있는 상태가 됨
EBS
- Amazon Elastic Block Store (EBS)는 Amazon EC2 인스턴스에 연결할 수 있는 블록 수준 스토리지 볼륨
- 네트워크를 통해 Amazon EC2 인스턴스에 연결되므로 데이터 지속성, 스냅샷 백업 및 다른 인스턴스에서 쉽게 사용가능
- 데이터의 지속성을 보장하기 위해 AWS 내에서 복제 및 백업되므로 안정적이고 내결함성이 높은 스토리지 옵션
- 인스턴스를 terminate 한 후에도 데이터를 유지가능!
- 특정 AZ에 한정됨
- 인스턴스의 usb 메모리라고 생각할 수 있음
- 하나의 인스턴스에서 떼어서 다른 인스턴스에 꽂을 수 있음
- 하나의 EBS는 하나의 인스턴스에만 연결될 수 있지만 하나의 인스턴스에는 여러개의 EBS가 연결될 수 있음
- EBS Snapshot
EBS snapshot
- EBS(Elastic Block Store) 스냅샷(Snapshot)은 EBS 볼륨의 데이터를 백업하는 데 사용되는 기능
- EBS 볼륨의 데이터를 인스턴스 내에서 복제하고, 이를 S3에 저장
- 스냅샷은 EBS 볼륨의 모든 데이터를 포함하므로, 데이터를 백업하고 나중에 이전 상태로 복원 가능
- 스냅샷은 필요에 따라 자동으로 스케줄링할 수 있으며, 각 스냅샷은 다른 스냅샷과 차이점만 저장됨
- 따라서 이전 스냅샷에 비해 적은 양의 스토리지 공간이 필요
- 스냅샷은 EBS 볼륨의 상태를 복원할 때 사용되며, 이전 상태로 데이터를 복원하면 해당 스냅샷을 기반으로 새로운 EBS 볼륨이 생성됨
[ EBS 스냅샷의 용도 ]
- 데이터 백업 및 복원: 스냅샷을 사용하면 EBS 볼륨의 데이터를 백업하고 나중에 이전 상태로 복원가능
- 볼륨 확장: 스냅샷을 사용하여 EBS 볼륨의 크기를 확장가능.
스냅샷에서 새로운 볼륨을 생성하고, 기존 볼륨에서 새로 생성한 볼륨으로 데이터를 복사가능. - 데이터 마이그레이션: 스냅샷을 사용하여 EBS 볼륨의 데이터를 다른 지역으로 이동가능.
AMI
- EC2 인스턴스를 생성할 때 사용되며 운영 체제와 애플리케이션, 라이브러리 등이 포함되어 있음
- 이러한 이미지를 사용하면 개발자는 이미 구성된 환경을 더 쉽게 설정가능
- AMI는 Amazon에서 제공하는 것뿐만 아니라 개발자가 직접 생성할 수도 있음
- 개발자는 자신이 구성한 인스턴스를 이미지로 만들어서 사용할 수 있으며, 이를 다른 사람과 공유할 수도 있음
EBS와 AMI의 차이
- Amazon EBS는 EC2 인스턴스에서 사용되는 스토리지 볼륨
- 이 볼륨은 인스턴스에 연결되어 인스턴스에 데이터를 저장하고 보존하는 데 사용됨
- EBS는 인스턴스를 종료해도 볼륨에 저장된 데이터를 보존
- 반면, Amazon Machine Image (AMI)는 EC2 인스턴스를 시작할 때 사용되는 이미지
- AMI는 이미 설치된 운영 체제와 애플리케이션을 포함하여 인스턴스를 구성하는 데 필요한 모든 정보를 포함
- 이를 통해 AMI를 사용하여 손쉽게 EC2 인스턴스를 시작하고, 중지하고, 삭제하고, 복제하고, 복원가능
▶ AMI는 EBS 스냅샷을 사용하여 생성될 수 있음
- EBS 스냅샷은 EBS 볼륨의 이미지
- AMI를 생성할 때 EBS 스냅샷을 사용하면 인스턴스를 시작할 때 EBS 볼륨이 생성되고, 해당 볼륨에는 이전 인스턴스와 동일한 데이터가 저장됨
[Elastic Load Balancer]
Scalability vs Availability
Scalability와 Availability는 모두 분산 시스템에서 중요한 개념이지만 서로 다른 개념!
- Scalability는 시스템이 커지거나 작아질 수 있는 능력
- 이는 사용자 수, 데이터 양, 처리량 등이 증가할 때 시스템의 성능과 처리 능력을 유지하거나 향상시키는 것
- 이를 위해서는 확장성 있는 시스템 디자인과 구현이 필요
- 반면 Availability는 시스템이 정상적으로 작동하고 사용 가능한 상태를 유지하는 능력
- 즉, 사용자가 요청하는 서비스를 항상 이용 가능한 상태로 유지하는 것
- 이를 위해서는 시스템의 안정성을 높이고 장애 대응 능력을 강화하는 것이 중요
로드 밸런서를 쓰는 이유
- 요청 분산 (EC2와 연동)
- 단일 액세스 포인트 공개 (Route 53과 연동)
- 인스턴스에 대한 헬스 체크
- HTTPS 제공 (ACM과 연동)
- 고가용성 제공
- 공개 트래픽과 내부 트래픽 분리
ELB
Elastic Load Balancer는 AWS에서 제공하는 로드 밸런싱 서비스로, 다수의 EC2 인스턴스를 사용하여 트래픽을 분산시킴.
고가용성과 확장성을 제공하므로, 인스턴스의 장애와 부하 분산에 대한 대응을 용이하게 해줌
[ ELB 유형과 특징 ]
- Application Load Balancer
: OSI 모델 7계층에서 동작하며, HTTP/HTTPS 트래픽을 처리
컨테이너화된 애플리케이션과 연동하여 사용가능
URL 경로 라우팅, 호스트 기반 라우팅 등 다양한 라우팅 정책을 제공
- HTTP 요청을 여러 타깃 그룹에 나눠줄 수 있음
- 한 머신 안이라도 여러 어플리케이션(컨테이너)에 나눠줄 수 있음
- HTTP/2와 웹소켓을 지원
- HTTPS로 리다이렉트 지원
- URL, hostname, query string, header에 기반해서 다른 타깃 그룹으로 보낼 수 있음 - Network Load Balancer
: OSI 모델 4계층에서 동작하며, TCP/UDP 트래픽을 처리
높은 처리량을 필요로 하는 애플리케이션에 적합 - Gateway Load Balancer
- Classic Load Balancer
: OSI 모델 4~7계층에서 동작하며, HTTP/HTTPS, TCP/UDP 트래픽을 처리
가장 오래된 형태의 로드 밸런서이며, 대부분의 경우 Application Load Balancer나 Network Load Balancer를 사용하는 것이 좋음
Application Loadbalancer (ALB) 사용해보기
#!/bin/bash
apt-get update //패키지 가져옴
apt-get install -y nginx //nginx 설치
cat <<EOF > /var/www/html/index.html //여기에 아래의 내용들 작성함
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Nginx</title>
</head>
<body>
<h1>Hello World!</h1>
<p>AWS deployed by Me!</p>
<p>private ip is $(hostname -f)</p>
</body>
</html>
EOF
sudo systemctl start nginx //nginx 시작
→ 완료 후 myloadbalancer의 DNS 통해 접속 시 새로고침 시마다 myinstance1과 myinstance2의 private IPv4 주소가 번갈아 나오는 것을 볼 수 있음! (정상 동작!)
→ myinstance1을 중단시키고 다시 실행시 myinstance2의 private IPv4 주소만 나오게 됨!
→ myinstance1과 myinstance2의 주소를 통해서는 접근이 불가하고 ALB 쪽은 정상적으로 작동!!!
SSL과 HTTPS
SSL(Secure Sockets Layer)
- 인터넷 상에서 정보를 안전하게 전송하기 위한 프로토콜
- 클라이언트와 서버 사이에 안전한 접속을 만들어주며, 전송되는 데이터를 암호화하여 정보의 안전성을 보장.
TLS (Transport Layer Security)
- SSL을 보완한 기술로 현재는 사실 SSL이 아니라 TLS 기술!
- 그러나 모두가 아직까지 SSL이라고 부르고 있음!
▼ SSH와 SSL의 차이점?!
SSH와 SSL은 모두 보안을 위해 사용되는 프로토콜이지만, 목적과 사용 방식에서 차이 존재!
SSH (Secure Shell)
1. 목적:
- SSH는 주로 원격 서버에 안전하게 접속하고 명령어를 실행하기 위한 프로토콜
- 주로 시스템 관리자와 개발자가 원격 서버 관리, 파일 전송, 터널링 등의 작업을 수행할 때 사용
2. 사용 예:
- 원격 서버 접속: `ssh user@remote_server`
- 파일 전송: `scp file user@remote_server:/path/to/destination`
- 포트 포워딩: `ssh -L local_port:destination_server:remote_port user@remote_server`
3. 작동 방식:
- SSH는 클라이언트-서버 모델을 사용
- 클라이언트가 서버에 접속할 때 인증 과정을 거쳐 암호화된 채널을 설정
- RSA, DSA, ECDSA 등의 공개 키 암호화를 사용한 키 기반 인증을 지원
4. 포트 번호:
- 기본적으로 TCP 포트 22를 사용
SSL (Secure Sockets Layer) / TLS (Transport Layer Security)
1. 목적:
- SSL은 데이터 전송 중에 네트워크 상에서 데이터의 도청 및 변조를 방지하기 위한 프로토콜
- 주로 웹사이트와 사용자 간의 안전한 통신을 보장하기 위해 사용
2. 사용 예:
- HTTPS: 웹사이트 보안. 브라우저와 웹 서버 간의 통신을 암호화합니다. (예: `https://example.com`)
- 이메일 보안: 이메일 클라이언트와 서버 간의 안전한 연결을 보장
3. 작동 방식:
- SSL/TLS는 클라이언트와 서버 간의 핸드셰이크 과정을 통해 암호화된 세션을 설정
- 대칭 키 암호화와 비대칭 키 암호화를 조합하여 데이터 전송의 기밀성과 무결성을 보장
- 서버는 SSL/TLS 인증서를 사용하여 자신의 신원을 증명
4. 포트 번호:
- HTTPS의 경우 기본적으로 TCP 포트 443을 사용
- SMTP의 경우 SSL을 사용하는 포트는 465, TLS를 사용하는 포트는 587
ALB에 SSL 적용하기
'TIL' 카테고리의 다른 글
[TIL] 230702 <JPA> JDBC (0) | 2024.07.02 |
---|---|
[TIL] 230628 <AWS> RDS (0) | 2024.06.28 |
[TIL] 230626 <AWS> AWS 기초, IAM (0) | 2024.06.26 |
[TIL] 230625 <Spring> 팀프로젝트 14조 - '일'과 함께 '사'라지다 KPT 회고 (0) | 2024.06.25 |
[TIL] 230621 <Spring> 소셜 로그인 (0) | 2024.06.21 |
소중한 공감 감사합니다