[AWS] Application 만들기

sso😊·2022년 7월 5일
1

AWS

목록 보기
10/10
post-thumbnail


Main Application

VPC 구성

VPC 마법사

요구사항에 맞는 서브넷(프라이빗,퍼블릭), 가용영역, NAT 등 구성

EC2 생성

배스천 호스트 구성

Public Subnet의 EC2 Bastion Host를 통해 Private Subnet의 EC2에 접속하는 방법

  • 배스천 호스트를 사용하면, 일종의 게이트 역할을 수행해 특정 IP만이 접근 가능하도록 설정 할 수 있으며, 한곳에서 모든 접근을 관리하므로써 운영과 로그확인에 장점이 있습니다. 

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


EC2 Auto Scaling Group 구성

오토 스케일링(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이 되는지 확인합니다. 



RDS 생성

DB 생성

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) 수정,삭제,생성 등이 가능한지 확인합니다. 

AWS well-architected

성능

Autoscaling 구성

ELB 생성

메인 애플리케이션의 인스턴스 타입(EC2 : t2.micro / RDS : t2.small) 

RDS 파라미터 그룹 설정

안정성

2개 이상의 가용영역 사용

보안

EC2 S3 권한 및 네트워크 구성

EC2 배스천 호스트 구성

기타 checklist

  • 웹서버용 EC2와 RDS는 서로 다른 Private subnet에 위치하여야 합니다. 
  • 웹서버용 EC2는 초기 구성과 추후 운영을 위해 아웃바운드 인터넷 연결을 필요로 합니다.
    • 이에 필요한 NAT GW, Route Table 등을 적절하게 구성해야합니다.
  • 웹서버용 EC2는 웹서비스(HTTP)와 운영(SSH)을 위한 통신만 가능하도록 설정해야합니다.
  • ELB는 80(HTTP)를 Listen 하도록 설정해야 합니다.
  • RDS는 웹서버용 EC2와 배스천 호스트로부터의 SQL을 위한 연결만 허용해야 하며, 외부 인터넷과 연결(인바운드/아웃바운드 모두) 불가능하도록 설정해야합니다.

운영 우수성

애플리케이션의 지속적인 업데이트 반영

웹서버 인스턴스의 사용자데이터 설정



Challenge Application

http://sso-elb-1537886764.ap-northeast-2.elb.amazonaws.com/challenge


Amplify

1) Amplify 콘솔에서 준비된 정적 웹 application ZIP파일을 선택해 배포합니다. 

→ git 과 연동하여 지속적 배포를 구성할 수 있습니다. 

→ 생성된 도메인으로 접속이 가능합니다.(https://web.d20j3rvwryfr93.amplifyapp.com)

Lambda 

1) Lambda 콘솔에서 함수를 생성합니다. (javascript 이용) 

→ 웹페이지에서 테스트가 가능하도록, name과 txt 를 body에 담습니다.


js NameFunction true { let helloName = JSON.stringify(`이름: ${event.name} 텍스트: ${event.txt} `); let name = event.name; let txt = event.txt; let params = { TableName:'NameDatabase', Item: { 'ID': 1, 'name': name, 'txt': txt, } }; await dynamodb.put(params).promise(); const response = { statusCode: 200, body: helloName , name ,txt }; return response; };]]>


API Gateway

1) 새 REST API 생성 후, 새 리소스 및 매서드를 생성합니다. 

→ POST, Lambda 함수 사용


DynamoDB 

1) DynamoDB 테이블을 생성합니다

→  NameDatabase

2) IAM 정책을 사용하여, DynamoDB 서비스를 사용할 수 있도록  람다함수에 권한을 추가합니다. 

→ 테이블의 ARN을 추가합니다.


애플리케이션 연결

1) Amplify의 index.html을 lambda를 호출할 수 있도록 수정합니다. 

→ script에 API 호출 URL을 추가해야 합니다. 

2) 웹어플리케이션 ZIP 파일을 다시 배포합니다. 

3)어플리케이션을 실행하여 작동을 확인합니다. 

→ 이름과 텍스트를 입력하면 API가 람다함수를 호출합니다.


→ 람다 함수에 의해 name과 text는 DynamoDB에 저장된것을 콘솔에서 확인 할 수 있습니다. 








0개의 댓글