요구사항에 맞는 서브넷(프라이빗,퍼블릭), 가용영역, NAT 등 구성
Public Subnet의 EC2 Bastion Host를 통해 Private Subnet의 EC2에 접속하는 방법
1) Bastion 호스트는 Public 서브넷에, 웹서버 EC2는 각 Private 서브넷에 생성합니다.
→ 배스천호스트에는 PublicIP를 부여하고, 웹서버EC2에는 PublicIP를 부여하지 않습니다.
→ 각 EC2에 알맞은 보안그룹을 설정합니다. (ex. 배스천 : TCP 22 MyIP 허용 / 웹서버: TCP 22 배스천 puvlicIP허요)
2) 푸티를 이용하여 BastionHost에 SSH 접속 후, Private Subnet 웹서버에 SSH 접속합니다.
→ 웹서버 인스턴스들의 .pem파일을 BastionHost에 업로드해야 합니다.
→ pem파일과 접속하려는 웹서버 privateIP를 이용해 ssh접속합니다.
3) private subnet에 위치한 ec2에 메인 애플리케이션 및 관련 패키지를 명령어로 구성합니다.
→ wget http://52.78.225.154/install.sh;sudo bash install.sh
오토 스케일링(Auto Scaling) : 서버에 부하가 발생할 때, 자동적으로 서버 수를 늘려 부하를 분산하는 방식
→ Auto Scaling 그룹에 묶인 EC2 서버의 앞단에는 Load Balancing 을 구성하여, 늘어난 서버로 부하를 분산할 수 있도록 구성해 주어야 함
Loadbalancer 중,어플리케이션 레이어에 사용되는 ALB를 선정
1) ALB 생성: 리스너와 가용영역을 구성하고 보안그룹과 타겟그룹을 생성하고 라우팅을 구성합니다.
← 생성된 ALB
2) ALB의 DNS 주소로 접속하여, EC2 웹서버로 로드밸런싱이 잘 이루어지고 있는지 확인합니다.
→ 새로고침시 두개의 다른 인스턴스ID를 확인 할 수 있습니다.
3) AutoScaling 그룹을 생성을 위해, 시작템플릿을 먼저 생성합니다.
→ VPC와 서브넷, 기존 ELB를 선택합니다.
→ 원하는 용량, 최소용량, 최대용량을 선택합니다.
4) Load Test 페이지로 Scaleout이 되는지 확인합니다.
1) 데이터베이스 생성을 위해 서브넷그룹을 먼저 생성합니다.
2) RDS 데이터베이스를 생성합니다.
→ 해당하는 VPC와 서브넷그룹을 설정합니다 ,
→ 다중 AZ 배포가 가능하도록 하고, 새 보안그룹을 설정합니다.
→ 추후 진행을 위해, 초기 DB이름을 설정합니다.
1) 요구사항에 맞게 새로운 파라미터 그룹을 생성합니다.
→ 현재 최대 연결수 (max_connections)를 확인하고 이를 “1” 증가시켜 상수로 수정합니다.
→db.t2.small의 최대연결수는 45로 확인되어 기존(GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000}))을 '46'으로 변경
2) RDS 데이터베이스를 새로운 파라미터 그룹이 적용될 수 있도록 수정합니다.
애플리케이션에서 RDS 접속
1) RDS 엔드포인트, DB이름, 사용자명, 패스워드를 이용해 Addressbook 데이터베이스에 접속합니다 .
2) 수정,삭제,생성 등이 가능한지 확인합니다.
Autoscaling 구성
ELB 생성
메인 애플리케이션의 인스턴스 타입(EC2 : t2.micro / RDS : t2.small)
RDS 파라미터 그룹 설정
2개 이상의 가용영역 사용
EC2 S3 권한 및 네트워크 구성
EC2 배스천 호스트 구성
기타 checklist
애플리케이션의 지속적인 업데이트 반영
웹서버 인스턴스의 사용자데이터 설정
http://sso-elb-1537886764.ap-northeast-2.elb.amazonaws.com/challenge
1) Amplify 콘솔에서 준비된 정적 웹 application ZIP파일을 선택해 배포합니다.
→ git 과 연동하여 지속적 배포를 구성할 수 있습니다.
→ 생성된 도메인으로 접속이 가능합니다.(https://web.d20j3rvwryfr93.amplifyapp.com)
1) Lambda 콘솔에서 함수를 생성합니다. (javascript 이용)
→ 웹페이지에서 테스트가 가능하도록, name과 txt 를 body에 담습니다.
1) 새 REST API 생성 후, 새 리소스 및 매서드를 생성합니다.
→ POST, Lambda 함수 사용
1) DynamoDB 테이블을 생성합니다
→ NameDatabase
2) IAM 정책을 사용하여, DynamoDB 서비스를 사용할 수 있도록 람다함수에 권한을 추가합니다.
→ 테이블의 ARN을 추가합니다.
1) Amplify의 index.html을 lambda를 호출할 수 있도록 수정합니다.
→ script에 API 호출 URL을 추가해야 합니다.
2) 웹어플리케이션 ZIP 파일을 다시 배포합니다.
3)어플리케이션을 실행하여 작동을 확인합니다.
→ 이름과 텍스트를 입력하면 API가 람다함수를 호출합니다.
→ 람다 함수에 의해 name과 text는 DynamoDB에 저장된것을 콘솔에서 확인 할 수 있습니다.