
ELB : 부하분산 처리 기능.
*ELB 종류
*ELB 동작 방식



- 템플릿을 통해 리소스 생성
- 이름과 키페어 지정
*생성이 끝나면 EC2에서 4개의 EC2에 SSH를 이용해서 접속 해보기
yaml 파일의 리소스 테이블
- VPC :
- ELBVPC -> CidrBlock: 10.40.0.0/16, Key: Name(Value: ELB-VPC)
- MyVPC -> idrBlock: 20.40.0.0/16, Key: Name(Value: My-VPC)
- IGW:
- ELBIGW, Key: Name(Value: ELB-IGW)
- MyIGW, Key: Name(Value: My-IGW)
- 라우팅 테이블:
- ELBPublicRT: ELBVPC
- MyPublicRT: MyVPC
- 서브넷:
- ELBPublicSN1 -> CidrBlock: 10.40.1.0/24
- ELBPublicSN2 -> CidrBlock: 10.40.2.0/24
- MyPublicSN -> CidrBlock: 20.40.1.0/24
- 보안 그룹:
- MySG: tcp'22', icmp
- ELBSG: tcp'80', udp'161', tcp'22', icmp
- EC2:
- MyEC2: MyPublicSN
- ELBEC21: ELBPublicSN1
- ELBEC22: ELBPublicSN2
- ELBEC23: ELBPublicSN2
- 인스턴스 생성 후 ping test
*접속 후 테스트를 위한 S-1,2,3 에 대한 변수 설정

생성된 인스턴스(서버)의 public ip 확인
- 서버 1 ip : 13.125.159.20
- 서버 2 ip: 43.201.109.58
- 서버 3 ip: 13.209.98.178
- myEC2(client) 인스턴스에서 변수 지정 후 확인
*SNMP 161 테스트
- 생성된 인스턴스(서버)의 파일 확인(xff.php: 서버 정보 출력)
- snmpget 명령어( test 용도 ): 숫자 5를 바꿔가며 네트워크 관리 가능, 각각의 서버 관리
- myEC2에서 서버 호출해서 파일 확인 및 snmp 확인
-EC2 대상그룹 생성

- 대상 그룹 생성
- 그룹 구성 지정
- 이름과 VPC(ELB) 설정
- 대상 등록(어떤 대상을 그룹으로 만들 것인지)
- 대상 선택된 것 확인
- 그룹 대상 등록 클릭
- 그룹 실행중인 것 확인 (그룹을 하나로 묶었음)
-EC2 로드 밸런서 생성

- 로드 밸런스 생성
- 이름 지정
- ELB VPC 사용(서버의 로드 밸런스를 구축해서), 서브넷 지정
- ELB 보안그룹 사용
- 트래픽 배분을 위해 리스너 설정 (생성한 대상 그룹 선택)
- 로드 밸런서 생성 확인
- 로드 밸런서 세부 정보 확인( 유형, VPC, 가용영역...)
- 리스너 확인
리스너 추가 완료

-생성이 끝나면 ALB로 동작 하는지 TEST
-ALB DNS 이름을 변수로 지정
- ALB dns이름을 변수로 지정
- dns 이름 복사
- ALB dns 이름을 변수로 지정 완료
- 변수 지정된 것 확인
- 유동 ip 확인


- curl 명령어를 통해 웹 서버가 돌아가면서 열리는 모습
- 30번을 보냈을 때, 100번을 보냈을 때 통계(균일하게 분배)
라우터: 연결해주는 것
라우팅: 경로 설정
서버1: /dev/index.html
서버2,3: /mgt/index.html
*메인 서버(MyEC2)에서 원하는 Server로 접속해보기.(라우팅)
- 라우팅 확인
- dev밑의 파일이기 때문에 서버1만 정상적으로 호출
- /dev/index.html의 파일을 호출할 때 서버1은 호출가능, 서버2,3은 호출 불가능 (서버1은 index.html파일이 dev아래의 파일이고, 서버2,3은 index.html파일이 mgt아래의 파일이라서 서버1이 연결될때는 열리고 서버2,3이 연결될때는 열리지 않는다)
- 서버 1만 대상 그룹 생성
- 서버 2,3을 대상 그룹 생성
- 생성된 대상 그룹 확인
*Server-1에 대한 리스너 규칙 추가
- 서버 1에 대한 리스너 규칙 추가
- 이름 지정
- 조건 추가(경로 지정, 원하는 파일만)
- 추가한 조건 확인
- 대상 그룹 지정
- 우선 순위는 1( 중요한 파일이 있는 것이 먼저 )
*Server-2,3 에 대한 리스너 규칙 추가
- 서버 2,3에 대한 규칙 추가 대상 그룹 지정
- 우선 순위: 2
- 생성된 리스너 규칙 확인
*규칙 추가 후 각각의 그룹으로 테스트 해보면 에러 없이 해당 그룹으로만 테스트가 진행됨.
[root@MyEC2 ~]# for i in {1..10}; do curl $alb/dev/ --silent ; done | sort | uniq -c | sort -nr

[root@MyEC2 ~]# for i in {1..10}; do curl $alb/mgt/ --silent ; done | sort | uniq -c | sort -nr

- 이전에 에러가 났던 명령어가 우선 순위를 정해둬서 에러가 나지 않는다
- 경로 지정을 통해 서버 1만 호출한다
- 서버 2,3을 트래픽이 없도록 호출한다(균일하게)

-대상 그룹 생성
- UDP 프로토콜을 통해 대상 그룹 생성
- 이름 지정한 후에 프로토콜을 UDP로 설정, VPC 지정
- 상태 검사는 HTTP로 지정
- 대상 그룹 지정 확인
-로드 밸런서 생성 / NLB 생성 /

- NLB 로드 밸런스 생성
- 유형을 네트워크로 설정
- VPC 지정후 가용 영역 선택
- 보안 그룹 선택
- udp 프로토콜 선택후 생성한 대상 그룹 지정
- 생성된 로드 밸런서 확인
*생성된 NLB 확인 및 DNS 이름 확인 및 변수 설정
- DNS 이름 복사: NLBtest-hj-64d2541414e212af.elb.ap-northeast-2.amazonaws.com
- dig $nlb +short: ip는 유동적이여서 오래쓰면 자동으로 변경
- ip 변수 지정
*생성된 NLBs1, NLBs2에게 접속 테스트

- snmp 작동 test
- snmp 명령어를 통해 잘 작동하는지 테스트
- 반복문을 이용해서 효과적으로 분산되는지 확인
*NLB속성 탭 / 편집 / 대상 정책을 활성화 하면 아래 그림처럼 트래픽 분산이 더 원활하게 이루어짐.

- 로드 밸런서 속성 편집
- 가용 영역을 트래픽이 몰리지 않게 설정( 교차 영역, 트래픽 분산 원활 )
- 속도가 균일하게 나오는 것을 확인
*자원 삭제

-데이터를 불러오는 방식은 두가지 ( 스캔 방식 / 쿼리 방식 )
테이블 생성 /

- dynamoDB 테이블 생성
- 이름 지정 후 파티션 키(id)와 정렬 키(key) 지정
- 콘솔에서 테이블에 데이터 추가
- 항목 탐색에서 속성 편집을 이용하여 항목 추가
- 추가된 데이터 확인

- IAM 기능에서 정책 생성(람다 함수를 통해 테이블 생성)
- 권한 지정( dynamoDB )
- 쓰기 권한 부여( putitem )
- 모든 리소스 허용
- 정책 이름 지정
- 정책 생성 확인
- 역할 생성(람다 함수를 통해 테이블 생성)
- 람다 서비스 선택
- 생성한 정책 선택
- 역할 이름 지정
- 생성된 역할 확인
- 람다 함수를 이용해서 데이터 추가
- 람다 함수 생성( 이름 지정, 파이선으로 선택 )
- 기존 역할 사용에서 생성한 역할 선택
*입력 후 TEST 클릭 TEST 진행 하고 잘 되면 Deploy 하고 배포가 성공이 되면 DynamoDB 창에 업로드 된것 확인


- 람다 함수에서
- 테이블 입력 코드 작성 후 배포
- 생성된 항목 확인
*현 상황에서는 대량의 데이터는 업로드가 안됨. 대량의 데이터 업로드를 하려면 위에서 생성한 정책을 수정


- aws-learner-dynamoDB-policy-hj 정책 수정의 권한 수정(대량의 데이터로 테이블 작성)
- 정책 권한 수정(정책 편집기: 시각적으로 변경)
- 쓰기 권한 수정(batchwriteltem 선택)
- 리소스 모두에게 부여
- 편집한 정책 권한 확인
코드 수정 후 업로드 [ 노란색 부분만 다른내용 입력 해도됨 ]

- 람다 함수에서
- 대량의 데이터를 업데이트 할 수 있는 코드 작성
- 생성된 항목 확인
*대량의 데이터 업로드가 안되면..
IAM / 정책 / 위에서 생성한 정책 검색 / 편집 / 권한 추가에서 두가지를 한꺼번에 체크 하고 저장 후 다시 업데이트



- dynamoDB-table에서
- 스캔을 선택후 조건 설정
- 조건에 맞게 정렬된 것 확인