웹 서비스 환경 구성

1. 루트 사용자로 로그인 후 IAM 사용자 생성
2. 새로 생성한 admin 계정으로 로그인 후 네크워크 생성(=VPC 생성)
=> 현재까지 완료한 내용.
이처럼 VPC 생성 마법사를 통해 VPC 내부 서브넷, igw, 라우팅을 설정하는 방법도 알아야 하지만,
저번처럼 직접 설정하는 방법 또한 아는 것이 중요.

3. 보안그룹 생성 - HTTP(80), SSH(22) port 에서의 접근을 허용하도록 생성
4. 웹 인스턴스 생성
- 사용자 데이터에 아래 내용 입력
=> 사용자 데이터 : 인스턴스 최초 생성 시에 실행하는 프로그램. 초기 설정에 대한 내용이 들어간다.
| #!/bin/sh amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2 <= lamp == linux aphchi mysqlmariadb php yum -y install httpd php-mbstring # Start the web server chkconfig httpd on systemctl start httpd # Install the web pages for our lab if [ ! -f /var/www/html/immersion-day-app-php7.tar.gz ]; then cd /var/www/html wget https://aws-joozero.s3.ap-northeast-2.amazonaws.com/immersion-day-app-php7.tar.gz => 경로에 저장된 php파일 다운. tar xvfz immersion-day-app-php7.tar.gz => tar 명령어로 압축 해제 fi cat <<EOF > /var/www/html/get-index-meta-data.php <?php \$hostname = gethostname(); \$results = explode(".", \$hostname); echo "<table style='width:100%'>"; echo "<tr><th style='width:30%'>Meta-Data</th><th style='width:70%'>Value</th></tr>"; echo "<tr><td>Private IP DNS Name</td><td>".\$hostname."</td></tr>"; echo "<tr><td>Private IP</td><td>".getHostByName(\$hostname)."</td></tr>"; echo "<tr><td>Region</td><td>".\$results[1]."</td></tr>"; echo "</table>"; ?> EOF => 압축 해제된 내용에 대해 덮어쓰기 하는 코드 # Install the AWS SDK for PHP if [ ! -f /var/www/html/aws.zip ]; then cd /var/www/html mkdir vendor cd vendor wget https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip unzip aws.zip fi # Update existing packages yum -y update |
- 인스턴스의 퍼블릭 IPv4 주소로 접속이 가능함을 확인.
5. 인스턴스로 SSH 접속
- 과정
SSH 클라이언트 실행 -> 키 페어 등록 -> 인스턴스의 public IP / 22포트로 접속
- 기본 사용자 이름
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/managing-users.html

6. (웹 서버 설정이 모두 끝난 상태에서) AMI 생성

=> 생성한 webserver-ami 이미지를 이용해서 웹 서버 인스턴스를 public-subnet-c 서브넷에 추가로 생성하면...
사용자 데이터 항목에 입력했던 스크립트(프로그램 설치 및 설정)를 생략할 수 있다!
7. 로드밸런서 구성
- 동일한 기능(내용)을 제공하는 인스턴스가 현재 2개 실행되고 있다.
그러나 개별 인스턴스 주소로 접속하는 경우, 이용의 불편과 부하 집중되는 문제가 발생할 수 있다.
=> 이는 로드밸런서를 이용해서 서비스 되도록 수정하면, 부하 분산과 서비스 편의를 제공할 수 있다.

- 애플리케이션 로드밸런서 생성
- 보안 그룹 신규 생성
- 대상 그룹(target group) 생성 후 로드밸런서 생성
- 로드 밸런서가 활성화되면 로드 밸런서의 DNS 주소로 접근 (두개의 인스턴스가 교대로 응답하는 것을 확인)
8. 로드 밸런서를 통해서만 서비스를 이용할 수 있도록 제한
- 현재 사용자가 로드 밸런서를 이용하지 않고 개별 인스턴스로 직접 접근이 가능하다.
=> 모든 요청을 로드 밸런서를 통해서만 처리하도록 제한하기 위해서는....
개별 인스턴스에 로드 밸런서로부터 오는 HTTP(80)만 허용하도록 수정한다.
이 말은 보안 그룹(webserver-sg)를 수정해야 한다는 것이다.

9. 모니터링 기능을 추가
- Amazon CloudWatch
https://aws.amazon.com/ko/cloudwatch/
- Amazon SNS (Simple Notification Service)
https://docs.aws.amazon.com/ko_kr/sns/latest/dg/welcome.html
- SNS 콘솔에서 topic(주제)을 설정하고 구독, 구독자에게 메세지 발송
- webserver 인스턴스에 경보를 설정
- 브라우저를 통해 로드밸런스 주소로 접속한 후 LOAD TEST 를 클릭.
=> CPU사용률이 증가하는지 확인하고, 경보 이메일이 오는지 확인
10. 오토 스케일링(Auto Scailing)
- 앱의 부하(load)를 처리할 수 있도록 EC2 인스턴스를 자동으로 증가 또는 감소시켜주는 서비스
- 시작 템플릿 생성
- 대상 그룹(target group)에 등록된 대상을 제거
=> 로드밸런서의 대상 그룹을 오토 스케일링으로 자동으로 생성되는 인스턴스를 사용할 것이기 때문에
로드밸런서의 대상 그룹을 지정할 필요는 없다.
- Auto Scailing 그룹 생성
- 브라우저로 로드밸런스 주소로 접근하여 LOAD TEST 클릭
11. 리소스 정리 (순서 중요!!!!!)
- Auto Scailing 그룹 용량을 0으로 조정
- Auto Scailing 그룹 삭제
- 시작 템플릿 삭제
- 로드밸런서 삭제
- 대상 그룹 삭제
- 인스턴스 종료
- (AMI) 이미지 삭제
- AMI와 연결된 스냅샷 삭제
- 키페어, 보안그룹 삭제
- VPC 삭제
- SNS 구독 삭제
- SNS 주제 삭제
- 경보 삭제
- 사용자(admin) 계정 삭제
'Study > seSAC 금천 4기' 카테고리의 다른 글
| 클라우드_4일차_241008 (1) | 2024.10.15 |
|---|---|
| 클라우드_5일차_241010 (0) | 2024.10.14 |
| 클라우드_2일차_241002 (0) | 2024.10.10 |
| 클라우드_1일차_241001 (0) | 2024.10.08 |
| 컨테이너 Orchestration_3일차_240926 (3) | 2024.09.30 |