카이도스의 Tech Blog

2주차 - 컴퓨팅 서비스 본문

AWS

2주차 - 컴퓨팅 서비스

카이도스 2023. 3. 7. 17:44
728x90
반응형

모든 교육은 가시다님의 도움으로 진행됩니다


👨‍💻 (사전 준비) : SSH/SCP Client / (도움되는 영상) : EC2 기본 사용법 리전과 가용영역 CloudWatch Alarm (생활코딩)


1. AWS 글로벌 인프라

  • [글로벌 인프라 소개](https://aws.amazon.com/ko/about-aws/global-infrastructure/.)
  • AWS 는 전 세계적으로 분포한 데이터센터에서 다양한 서비스를 제공하는 있는 클라우드 플랫폼입니다. 현재 AWS는 31개의 리전과 99개의 가용영역, 410개이상의 POP을 운영하고 있습니다. 각각의 리전은 이중화된 100G 케이블(해저 광케이블)로 연결되어 있으며, 암호화되어 전달되고 있습니다.
  • 글로벌 인프라 맵 → 한국(AZ 가용영역 4곳) & 해저 케이블 맵


2. AWS 리전 & 가용영역 & 엣지

**리전(Region)**은 해당 지리적인 영역 내에서 격리되고 물리적으로 분리된 여러 개의 가용 영역(AZ)의 모음을 말합니다. 리전은 최소 2개의 가용 영역으로 구성되고 최대 6개의 가용 영역으로 구성된 리전도 있습니다.

AWS Cloud Essentials Webinar

가용 영역(AZ = Availability Zone)은 한 개 이상의 데이터 센터들의 모음을 말합니다. 각 센터는 광통신 전용망으로 연결되어 있습니다. 가영 영역과 외부(인터넷) 연결을 위한 이중화된 트랜짓 센터가 있습니다. 트랜짓 센터는 AWS 글로벌 백본 네트워크에 연결이 되고, 엣지 POP을 통해서 CDN 등 서비스를 합니다.

AWS 사용자는 서비스 구성 시 여러 가용 영역에 분산하여 처리할 수 있도록 구성을 권장합니다.

엣지(Edge)는 외부 인터넷과 AWS 글로벌 네트워크망과 연결하는 별도의 센터입니다. 엣지는 엣지 로케이션과 리전별 엣지 캐시로 구성되며, CloudFront 와 같은 CDN 서비스의 데이터 캐시 기능을 제공합니다.


3. EC2 소개

AWS 컴퓨팅 서비스 범주

  • Amazon Elastic Compute Cloud(Amazon EC2)는 Amazon Web Services(AWS) 클라우드에서 확장 가능 컴퓨팅 용량을 제공합니다.
  • Amazon EC2를 사용하면 하드웨어에 선투자할 필요가 없어 더 빠르게 애플리케이션을 개발하고 배포할 수 있습니다.
  • Amazon EC2를 통해 원하는 만큼 가상 서버(=인스턴스 Instance)를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능합니다.
  • 또한 Amazon EC2는 요구 사항이나 갑작스러운 인기 증대 등 변동 사항에 따라 신속하게 규모를 확장하거나 축소할 수 있어 서버 트래픽 예측 필요성이 줄어듭니다.

EC2 제공 기능 - 링크

- *인스턴스*: 가상 컴퓨팅 환경
- *Amazon 머신 이미지(AMI)*: 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿으로 인스턴스를 쉽게 만들 수 있습니다.
- *인스턴스 유형(Types)*: 인스턴스를 위한 CPU, 메모리, 스토리지, 네트워킹 용량의 여러 가지 구성 제공
- *키 페어*를 사용하여 인스턴스 로그인 정보 보호(AWS는 퍼블릭 키를 저장하고 사용자는 개인 키를 안전한 장소에 보관하는 방식)
- *인스턴스 스토어 볼륨*: 임시 데이터를 저장하는 스토리지 볼륨으로 인스턴스 중단, 최대 절전 모드로 전환 또는 종료 시 삭제됨
- Amazon Elastic Block Store(Amazon EBS), 즉 *Amazon EBS 볼륨*을 사용해 영구 스토리지 볼륨에 데이터 저장
- 인스턴스와 Amazon EBS 볼륨 등의 리소스를 다른 물리적 장소에서 액세스할 수 있는 *리전* 및 *가용 영역*
- *보안 그룹*을 사용해 인스턴스에 연결할 수 있는 프로토콜, 포트, 소스 IP 범위를 지정하는 방화벽 기능
- *탄력적 IP 주소(EIP)*: 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소
- *태그*: 사용자가 생성하여 Amazon EC2 리소스에 할당할 수 있는 메타데이터
- AWS 클라우드에서는 논리적으로 격리되어 있지만 원할 때마다 고객의 네트워크와 간편히 연결할 수 있는 가상 네트워크인 *Virtual Private Clouds(VPC)*

인스턴스 구입 옵션 - 링크

- **온디맨드 인스턴스** - 시작하는 인스턴스에 대한 비용을 초 단위로 지불합니다.
- **[Savings Plans](https://aws.amazon.com/ko/blogs/korea/new-savings-plans-for-aws-compute-services/)** – 1년 또는 3년 기간 동안 시간당 USD로 일관된 컴퓨팅 사용량을 약정하여 Amazon EC2 비용을 절감할 수 있습니다.
- **예약 인스턴스(RI)** – 1년 또는 3년 기간 동안 인스턴스 유형 또는 지역을 포함해 일관된 인스턴스 구성을 약정하여 Amazon EC2 비용을 절감할 수 있습니다.
- **스팟 인스턴스** – 미사용 EC2 인스턴스를 요청하여 Amazon EC2 비용을 대폭 줄일 수 있습니다.
- **전용 호스트** - 인스턴스 실행을 전담하는 실제 호스트 비용을 지불하며, 기존의 소켓, 코어 또는 VM 소프트웨어별 라이선스를 가져와 비용을 절감합니다.
- **전용 인스턴스** - 단일 테넌트 하드웨어에서 실행되는 인스턴스 비용을 시간 단위로 지불합니다.
- **용량 예약** – 원하는 기간 동안 특정 가용 영역의 EC2 인스턴스에 대해 용량을 예약합니다.

AMI

*Amazon 머신 이미지(AMI)*는 소프트웨어 구성이 기재된 템플릿입니다(예: 운영 체제, 애플리케이션 서버, 애플리케이션).
AMI에서 *인스턴스*를 바로 시작하실 수 있는데, 이 **인스턴스**는 AMI의 사본으로, 클라우드에서 실행되는 가상 서버입니다.

인스턴스 중지

인스턴스를 중단하면 정상적인 실행종료 과정이 이루어지고 `stopped` 상태가 됩니다.
인스턴스의 모든 Amazon EBS 볼륨이 연결된 상태로 유지되므로 나중에 언제든지 다시 시작할 수 있습니다.
인스턴스가 중지됨 상태에 있는 동안에는 추가 인스턴스 사용량에 대한 요금이 부과되지 않습니다.
중지됨 상태에서 실행 중 상태로 전환할 때마다 최소 1분의 요금이 부과되며,
인스턴스가 중지된 상태에서 인스턴스 유형을 변경하면, 다음에 인스턴스가 시작된 후 신규 인스턴스 유형에 대한 요금이 부과됩니다.
모든 연결 Amazon EBS 루트 디바이스 사용을 비롯한 인스턴스 사용에 관련된 비용은 일반 Amazon EBS 요금이 적용됩니다.
인스턴스가 중지 상태인 경우 인스턴스에 Amazon EBS 볼륨을 연결하거나 분리할 수 있습니다.
또한 인스턴스로부터 AMI를 만들수도 있으며, 커널, 램 디스크, 인스턴스 유형을 변경할 수 있습니다.

 

  • 아래 처럼 중지 후 인스턴스의 유형을 변경 할 수 있다

https://bit.ly/2NqrUru

인스턴스 종료

인스턴스가 종료될 때 인스턴스는 일반 종료를 수행합니다.
루트 디바이스 볼륨은 기본적으로 삭제되지만 모든 연결된 Amazon EBS 볼륨은 기본적으로 유지됩니다.
이는 각 볼륨의 `deleteOnTermination` 속성 설정에 따라 결정됩니다. 인스턴트 자체도 삭제되므로 나중에 다시 시작할 수 없게 됩니다.
인스턴스 종료를 비활성화하면 실수로 인스턴스를 종료하는 일을 방지할 수 있습니다.
이 경우에는 해당 인스턴스에 관련된 `disableApiTermination` 속성을 `true`로 설정했는지 확인하십시오.
Linux의 `shutdown -h` 및 Windows의 `shutdown` 같은 인스턴스 실행종료 동작을 제어하려면,
 `instanceInitiatedShutdownBehavior` 인스턴스 속성을 `stop`이나 `terminate`로 적절히 설정하십시오.
기본 설정은 인스턴스 실행종료 시 Amazon EBS 볼륨을 루트 디바이스로 사용하는 인스턴스는 `stop` 상태,
인스턴스 스토어를 루트 디바이스로 사용하는 인스턴스는 항상 종료 상태로 변경됩니다.
자세한 내용은 [인스턴스 수명 주기](https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) 섹션을 참조하세요.

4. 실습 전 사전 준비 사항

  • 신규 VPC 생성 : SecondVPC 생성
IPv4 CIDR 블록 : 10.20.0.0/16
VPC 이름 : SecondVPC
퍼블릭 서브넷의 IPv4 CIDR : 10.20.1.0/24
가용 영역 : ap-northeast-2a
서브넷 이름 : SecondVPC-Subnet1

5. [데모 실습] 인스턴스 배포

AWS EC2 인스턴스를 배포 후 해당 인스턴스에 SSH Client 로 접속을 하고 기본 동작들을 확인합니다.

[데모 실습 & 실습 과제 2] 인스턴스 배포 및 모니터링/알람

 


(1) AWS 관리 콘솔에 접속 후 EC2 배포 & 인스턴스 시작 시 명령 실행

Amazon Linux 2 AMI : 64bit(x86)/ t2.micro /
- 네트워크 : **SecondVPC**
- 서브넷 : *'**SecondVPC**' 선택 시 자동으로 1개 있는 서브넷 선택됨'*
- 퍼블릭 IP 자동 할당 : **활성화**

-고급 세부 정보

#!/bin/bash
hostnamectl --static set-hostname Aws101-WebSrv
yum install httpd -y
systemctl start httpd && systemctl enable httpd
echo "<h1>Welcome to 화성탐사 나도 가즈아 Web Server</h1>" > /var/www/html/index.html

생성 완료


(2) 자신의 PC에서 SSH 로 인스턴스의 퍼블릭 IP로 접속 & SCP로 파일 업/다운로드

 

# 접속
ssh -i 키파일 ec2-user@공인IP
ssh -i PJH-aws-test.pem ec2-user@54.180.128.118

park@Jeongheeui-MacBookPro ~ % ssh -i PJH-aws-test.pem ec2-user@54.180.128.118
The authenticity of host '54.180.128.118 (54.180.128.118)' can't be established.
ED25519 key fingerprint is SHA256:jJFGxNktjhxSyQqKck3ySwmz/4Hu9xspNu+kAqKxJzY.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '54.180.128.118' (ED25519) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
4 package(s) needed for security, out of 4 available
Run "sudo yum update" to apply all updates.
[ec2-user@Aws101-WebSrv ~]$ sudo su -
[root@Aws101-WebSrv ~]#

(3) EC2 퍼블릭 IP로 웹 브라우저로 접속 확인 → 인스턴스 시작 시 명령 실행(User Data - shell 스크립트) 적용 확인

리눅스의 기초 명령어들을 활용하여 배포한 EC2의 기본 정보를 확인한다

# CPU 확인
cat /proc/cpuinfo
[root@Aws101-WebSrv ~]# cat /proc/cpuinfo |egrep '(processor|name)'
processor	: 0
model name	: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz

# 메모리 확인 1GiB
[root@Aws101-WebSrv ~]# cat /proc/meminfo |grep MemTotal
MemTotal:         987912 kB

# 다양한 시스템 관련 부하 확인 툴 설치
# sudo 는 슈퍼유저의 권한으로 실행
[ec2-user@Aws101-WebSrv ~]$ sudo yum -y install htop

# htop 으로 CPU Memory 등 시스템 자원 확인
[ec2-user@ip-172-31-46-223 ~]$ htop

# 프라이빗 IP 정보 확인
[ec2-user@Aws101-WebSrv ~]$ ip -br -c addr show
lo               UNKNOWN        127.0.0.1/8 ::1/128 
eth0             UP             10.20.1.8/28 fe80::4f:b5ff:fea5:6fe0/64 

[ec2-user@Aws101-WebSrv ~]$ ip a

# 퍼블릭 IP 정보 확인
[ec2-user@Aws101-WebSrv ~]$ curl ipinfo.io
curl -s http://ipinfo.io/city
curl -s http://ipinfo.io/ip
curl -s http://ipinfo.io/loc

# 터미널에서 날씨 보기 - 링크
curl -s wttr.in/seoul
curl -s wttr.in/seoul?format=3
curl -s 'wttr.in/{London,Busan}'
curl -s wttr.in/Moon

# 스토리지 확인 : 부트볼륨(EBS) 정보 확인
[ec2-user@Aws101-WebSrv ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /

[ec2-user@Aws101-WebSrv ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  474M     0  474M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  416K  482M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  1.6G  6.4G  21% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000

# 서비스 제공 확인(포트 Listen) : SSH(서버 서비스 중, TCP 22 포트 사용) , HTTP(서버 서비스 중, TCP 80 포트 사용)
# 예시) ss -t(TCP) -l(Listen) -n(숫자로 출력)
[ec2-user@Aws101-WebSrv ~]$ sudo ss -tln
State          Recv-Q         Send-Q                   Local Address:Port                   Peer Address:Port         Process         
LISTEN         0              100                          127.0.0.1:25                          0.0.0.0:*                            
LISTEN         0              128                            0.0.0.0:111                         0.0.0.0:*                            
LISTEN         0              128                            0.0.0.0:22                          0.0.0.0:*                            
LISTEN         0              128                               [::]:111                            [::]:*                            
LISTEN         0              511                                  *:80                                *:*                            
LISTEN         0              128                               [::]:22                             [::]:*                                     *:*
...

[ec2-user@Aws101-WebSrv ~]$ sudo netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3069/master         
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      2624/rpcbind        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3214/sshd           
tcp6       0      0 :::111                  :::*                    LISTEN      2624/rpcbind        
tcp6       0      0 :::80                   :::*                    LISTEN      3366/httpd          
tcp6       0      0 :::22                   :::*                    LISTEN      3214/sshd           
udp        0      0 127.0.0.1:323           0.0.0.0:*                           2642/chronyd        
udp        0      0 0.0.0.0:68              0.0.0.0:*                           2875/dhclient       
udp        0      0 0.0.0.0:111             0.0.0.0:*                           2624/rpcbind        
udp        0      0 0.0.0.0:668             0.0.0.0:*                           2624/rpcbind        
udp6       0      0 ::1:323                 :::*                                2642/chronyd        
udp6       0      0 fe80::4f:b5ff:fea5::546 :::*                                2924/dhclient       
udp6       0      0 :::111                  :::*                                2624/rpcbind        
udp6       0      0 :::668                  :::*                                2624/rpcbind 
...

*EC2 CPUUtilization(사용률) 경보(Alarm) 생성

EC2 1분 간격 모니터링 설정(추기 미미한 비용 발생!) : EC2 → 모니터링 및 문제 해결 → 세부 모니터링 관리 [활성화]

CloudWatch 서비스 → 경보 → 경보 생성

[단계 1] 지표 및 조건 지정 → 지표 선택 후 'EC2 → 인스턴스별 지표 'CPUUtilization' 검색 필터링(엔터) 후 '인스턴스 ID' 확인

[단계 2] 작업 구성 → 아래 설정 후 맨 하단 다음 클릭

[단계 3] 경보 이름 : WebSrv-CPU-High-Alarm ⇒ 아래 다음 클릭

[단계 4] 맨 아래 경보 생성 클릭

1분 간격 모니터링 시(추가 비용 발생!) : EC2 → 모니터링 및 문제 해결 → 세부 모니터링 관리 [활성화]

 


(4) CPU 부하 발생

# CPU 부하 툴 설치
sudo amazon-linux-extras install -y epel
sudo yum install -y stress-ng
stress-ng -h

# CPU 부하 발생
sudo stress-ng --cpu 1 --cpu-load 70% --timeout 10m --metrics --times --verify

 


(5) ~ (6) 알람 이메일 확인 & 모니터링 확인

이메일
모니터링

 

728x90
반응형

'AWS' 카테고리의 다른 글

ALB- S3 로그 연동  (0) 2023.04.04
AWS MongoDB backup - S3  (0) 2023.04.04
EC2-cloudwatch 로그 연동  (0) 2023.03.29
1주차 - AWS & 컴퓨트 서비스  (0) 2023.03.03
AWS EC2 볼륨 증가  (0) 2023.03.03
Comments