[AWS] AWS 인스턴스 연결 및 로드 밸런서 실습

김윤섭·2024년 7월 15일
2
post-thumbnail

AWS 시작하기

AWS에 접속해서 회원가입 및 로그인
AWS 홈페이지

vpc 설정

상단 검색에 vpc 검색하고 들어간다.

vpc는 다음과 같이

vpc 및 서브넷 설정

cidr에 16 입력하면 안될수도 있음. 주로 아시아태평양 서울의 가용영역 a,c 사용한다.

nat 은 어디 가용영역에 있든 상관없다.

서브넷 설정

4개 서브넷 만들어주기

4개의 서브넷이 생겼다.

인바운드 규칙 편집

확인 가능하다.

인터넷 게이트웨이는 vpc에 연결해줘야 한다.

하나의 vpc 에는 하나의 인터넷 게이트웨이밖에 연결못한다.

nat 탄력적ip 할당하면 됌

인스턴스 생성하기

ec2 -인스턴스 시작

os를 설정해준다. 보통 아마존 리눅스나 우분투를 많이 사용한다.


프리티어에 해당하는 사양을 선택해주면 된다.

키페어는 나중에 터미널에서 인스턴스에 접속하기 위한 수단으로 위치를 기억해야 한다.

인스턴스에 만들어둔 기존 vpc 와 보안 규칙등을 연결시킨다.

private만 퍼블릭 ip 비활성화

총 3개의 인스턴스를 만들었다.

vpc-라우팅 테이블


퍼블릭만 연결해준다. private는 나중에 따로 연결해야 한다.

라우팅 테이블 성정

private 라우팅 테이블을 생성해준다.

NAT 게이트웨이는 인터넷 접속이 안되는것을 먼저 확인하기 위해 나중에 해준다.

로드밸런서 설정

로드 밸런서는 트래픽을 분산시켜주기 위한 도구이다.


기존의 보안그룹 선택해준다.

터미널에서 인스턴스 접속

pem 키 경로로 가서 public a,c 인스턴스 접속



sudo apt update && sudo apt install -y python3-flask
vim app.py

app.py 에 다음 내용을 입력하면 된다.

from flask import Flask, jsonify
import subprocess
import re

app = Flask(__name__)

def get_private_ip():
    try:
        # ip addr 명령어 실행
        result = subprocess.run(['ip', 'addr'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        
        # 명령어가 성공적으로 실행되었는지 확인
        if result.returncode != 0:
            raise Exception(result.stderr)
        
        # 정규식을 사용하여 192.168로 시작하는 IP 주소 추출
        ip_pattern = re.compile(r'inet\s+(192\.168\.\d+\.\d+)')
        match = ip_pattern.search(result.stdout)
        
        if match:
            # 매칭된 IP 주소를 반환
            return match.group(1)
        else:
            return None
    except Exception as e:
        print(f"An error occurred: {e}")
        return None

@app.route('/', methods=['GET'])
def private_ip():
    ip = get_private_ip()
    if ip:
        return jsonify({"private_ip": ip})
    else:
        return jsonify({"error": "Failed to retrieve private IP"}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

두개의 인스턴스에서 실행이 되는것을 확인



라우팅 테이블의 nat

로드밸런서

ec2의 로드밸런서에서 로드밸런서의 dns로 접속하면

ip 주소가 로드밸런서에 대상 등록되어있는 public-a , public-c 주소로 번갈아서 보여지는 것을 알 수 있다.


인스턴스 삭제

인스턴스는 실행중이면 계속 요금이 나가기에 실습이 종료되면 바로바로 삭제하거나 꺼줘야한다. 인스턴스 중지가 멈추는거고 종료는 아예 삭제하는 거니 주의하자.

정리

vpc 를 통해 사설망을 설정해서 외부에서 마음대로 접근이 불가능하다는 것을 알았고 로드 밸런서를 통해 트래픽이 어느식으로 분산되는지 직관적으로 알 수 있게 되었다. 아직은 ec2에서 보안설정과 네트워크 설정이 어렵지만 손에 익히는게 중요할 것 같다. 앞으로의 프로젝트들은 로컬 환경이 아닌 클라우드에 도메인을 띄워서 실제 서비스처럼 운영해봐야겠다.

0개의 댓글