티스토리 뷰

 

목차

  • 01. 아마존 웹 서버(Amazon Web Services, AWS)는 무엇인가요?
  • 02. EC2 클라우드 서비스 구축하고 내 컴퓨터에서 접속하기
  • 03. github url 다운로드 후, 프로그램 실행해 보기
  • 04. flask app.py 파일 실행해서, 웹 서비스 확인하기

 

사전 준비

- Amazon 계정 가입

 

 

(1) AWS(아마존 웹 서비스) 구축, Flask 프로그램 실행하기 (이번 시간)

(2) ---

 

 

1. 아마존 웹 서버(Amazon Web Services, AWS)는 무엇인가요?

아마존 웹 서버(Amazon Web Services, AWS)는 아마존이 제공하는 클라우드 컴퓨팅 서비스의 집합입니다. AWS는 다양한 IT 리소스를 인터넷을 통해 제공하며, 기업이나 개인이 서버, 스토리지, 데이터베이스, 네트워킹, 머신 러닝, 분석, 보안 등 다양한 서비스를 사용할 수 있도록 합니다.

 

그렇다면 AWS EC2는 무엇일까요? AWS EC2(Amazon Elastic Compute Cloud)는 아마존 웹 서비스(AWS)가 제공하는 클라우드 컴퓨팅 서비스로, 사용자가 가상 서버(인스턴스)를 생성하고 관리할 수 있도록 도와주는 서비스입니다. 

간단히 말해, AWS EC2는 인터넷을 통해 서버를 임대하는 서비스로, 물리적인 서버를 직접 관리할 필요 없이 애플리케이션을 실행하거나 데이터를 처리할 수 있는 유연한 환경을 제공합니다. 

 

자, 이제 AWS EC2를 검색해 봅니다.

그림 1-1-1 AWS EC2 검색 결과

 

검색된 결과에서 Amazon EC2를 선택하여 웹 사이트로 접속합니다.

그림 1-1-2 AWS EC2 검색 결과 페이지

 

로그인 후, AWS EC2에 접속합니다.

다음과 같이 로그인 화면이 보입니다. IAM은 AWS에서 제공하는 서비스로 사용자와 리소스에 대한 엑세스를 안전하게 제어할 수 있도록 해 주는 것입니다. AWS 리소스에 대한 접근 권한을 관리하는 도구입니다. IAM 사용자 이름이 없을 경우, 루트 사용자 이메일을 사용하여 로그인을 수행합니다. IAM 사용자 이름이 있을 경우에는 이를 사용하여 로그인을 수행합니다.

그림 1-1-3 AWS EC2 로그인

 

 

그림 1-1-4 AWS EC2 로그인

 

로그인 후, 보이는 처음 화면입니다.

그림 1-1-5 AWS EC2 로그인 성공 후, 화면

 

 

'All services'를 선택 후, EC2 서비스를 선택합니다.

그림 1-1-5 AWS EC2 로그인 성공 후, 화면

 

EC2 대시보드를 선택 후, 인스턴스 시작을 선택합니다. 

"인스턴스"는 Amazon EC2(Amazon Elastic Compute Cloud)에서 사용자가 실행하는 가상 서버를 의미합니다. EC2 인스턴스는 클라우드에서 애플리케이션을 실행하기 위한 컴퓨팅 자원을 제공하며, 사용자는 필요에 따라 서버의 종류와 크기를 선택해 실행할 수 있습니다. 인스턴스를 시작하면, 이 가상 서버가 클라우드에서 작동하며, 웹 애플리케이션, 데이터 처리 등의 다양한 작업을 수행할 수 있습니다.

그림 1-1-6 인스턴스 시작

 

인스턴스의 이름을 입력하고, 설치하고자 하는 OS를 선택합니다. 또한 아마존에서 무료로 제공하는 프리티어를 선택하여 인스턴스의 시작이 가능합니다.

그림 1-1-7 인스턴스 OS 및 장비 이미지 선택

 

인스턴스 유형을 선택합니다. t2.micro는 AWS에서 제공하는 EC2 인스턴스 유형 중 하나로, 프리 티어(free tier)에서 사용 가능한 인스턴스입니다.

키페어는 새 키 페어 생성을 선택합니다.

그림 1-1-8 인스턴스 유형 선택, 새 키 페어 생성

 

인스턴스 세부 정보


- 패밀리: t2 (일반적인 용도의 인스턴스 패밀리)
- vCPU: 1개의 가상 CPU
- 메모리: 1 GiB
- 현재 세대: true (최신 세대 인스턴스)
- 요금: 각 운영 체제별로 시간당 청구되는 요금이 표시됩니다.


 - RHEL(레드햇): 0.0288 USD/시간
 - Linux: 0.0144 USD/시간
 - SUSE: 0.0144 USD/시간
 - Windows: 0.019 USD/시간

 

새로운 사용자들이 AWS 서비스를 무료로 체험해볼 수 있도록 제공하는 프로그램입니다. 하지만, 특정 조건을 벗어날 경우에는 요금이 발생할 수 있습니다. 프리 티어는 일정 자원과 사용량에 대해 무료로 제공되지만, 사용량이 이 범위를 초과하면 요금이 부과됩니다.

프리 티어는 매월 제한된 리소스를 무료로 제공합니다. 예를 들어, t2.micro 인스턴스는 매월 750시간 동안 무료로 사용할 수 있습니다. 예를 들어, t2.micro 인스턴스를 750시간 이상 사용하면 그 초과된 시간에 대해 요금이 발생합니다.

 

이 이미지는 AWS EC2에서 인스턴스에 안전하게 연결하기 위해 키 페어(Key Pair)를 생성하는 화면을 보여줍니다.

 

키 페어 이름:

  • 사용자 정의 이름을 입력할 수 있는 필드입니다. 최대 255개의 ASCII 문자로 구성된 이름을 입력할 수 있으며, 앞뒤에 공백은 허용되지 않습니다.
  • 이 이름은 생성된 키 페어를 구분하기 위해 사용됩니다.

 

키 페어 유형:

  • RSA: RSA 암호화 알고리즘을 사용하는 프라이빗 및 퍼블릭 키 페어입니다. 기본적으로 많이 사용되는 옵션입니다.
  • ED25519: 더 빠르고 보안성이 높은 ED25519 알고리즘을 사용한 키 페어입니다. 선택적으로 사용할 수 있습니다.

 

프라이빗 키 파일 형식:

  • .pem: OpenSSH와 함께 사용되는 프라이빗 키 파일 형식입니다. 리눅스나 macOS 환경에서 많이 사용됩니다. 여기에서는 pem을 선택 후, 진행하도록 하겠습니다.
  • .ppk: Windows의 PuTTY 프로그램에서 사용되는 프라이빗 키 파일 형식입니다. 필요에 따라 선택할 수 있습니다.

키페어 이름을 입력 후, RSA를 선택 후, .pem을 선택합니다.

그림 1-1-9 새 키 페어 생성

 

 

이 이미지에서는 Amazon EC2 인스턴스의 네트워크 설정을 구성하는 화면을 보여주고 있습니다. 사용자는 이 화면에서 인스턴스가 네트워크에 어떻게 연결되고 보안 설정이 어떻게 구성될지를 선택할 수 있습니다. 여기서 중요한 부분은 보안 그룹 생성과 트래픽 허용 설정입니다.

 

인터넷에서 HTTPS 트래픽 허용

이 옵션은 HTTPS(포트 443)를 통한 트래픽을 허용합니다. HTTPS는 웹사이트에 암호화된 연결을 제공하며, 웹 서버가 보안된 연결을 제공할 때 사용됩니다.
이 설정을 통해 사용자가 인스턴스에서 웹 서버를 운영할 때 HTTPS 프로토콜을 통해 외부에서 해당 서버에 접속할 수 있도록 허용합니다. 이는 보안 인증서가 설정된 경우에 사용됩니다.

 

인터넷에서 HTTP 트래픽 허용

이 옵션은 HTTP(포트 80)를 통한 트래픽을 허용합니다. HTTP는 비암호화된 웹 트래픽을 처리하는 프로토콜입니다.
이 설정은 웹 서버가 HTTP로 외부에서 접근 가능하도록 허용하며, 보안이 필요하지 않은 페이지에 대한 일반적인 트래픽을 처리할 때 사용됩니다.

 

이 부분의 설정은 웹 서버를 운영하려는 경우 필수적입니다. 

예를 들어, 웹사이트를 호스팅하거나 API 서버를 제공하는 용도로 인스턴스를 사용할 때, 이 설정을 통해 외부에서 웹 서버에 접속할 수 있게 됩니다.

 

인터넷에서 HTTPS 트래픽 허용, 인터넷에서 HTTP 트래픽 허용을 선택 후, 진행합니다.

그림 1-1-10 웹 서버 구성을 위한 EC2 인스턴스 네트워크 설정

 

이 화면은 AWS EC2 인스턴스를 시작하기 전, "요약" 페이지로, 사용자가 선택한 설정을 확인할 수 있는 부분입니다. 주요 정보는 다음과 같습니다.

인스턴스 시작을 선택합니다.

그림 1-1-11 EC2 인스턴스 시작 전 설정 요약

 

 

  • 인스턴스 개수: 인스턴스 수는 1로 설정되어 있습니다.
  • 소프트웨어 이미지(AMI): Canonical, Ubuntu 24.04 (AMD64) 이미지가 선택되어 있습니다. 사용자가 선택한 AMI(아마존 머신 이미지)를 나타냅니다.
  • 가상 서버 유형(인스턴스 유형): t2.micro가 선택되어 있으며, 이는 프리 티어에서 제공되는 기본적인 가상 서버 유형입니다. t2.micro는 낮은 수준의 성능을 제공하지만, 무료로 사용할 수 있습니다.
  • 방화벽(보안 그룹): 새 보안 그룹이 생성되었으며, 이 그룹은 인스턴스와 관련된 트래픽을 필터링하고 보호합니다.
  • 스토리지(볼륨): 8GiB의 스토리지가 설정되어 있으며, 이는 해당 인스턴스에 연결될 디스크 용량입니다.
  • 프리 티어 안내: 첫 해에는 프리 티어 조건으로 인스턴스를 750시간 사용할 수 있고, 다양한 리소스가 제공된다는 안내가 포함되어 있습니다. 여기에는 퍼블릭 IPv4 주소, EBS 스토리지 30GiB, 스냅샷 1GB 등이 포함됩니다.

 

이 화면은 AWS EC2 인스턴스가 성공적으로 시작된 이후의 페이지입니다. 상단에 있는 녹색 바는 인스턴스가 정상적으로 시작되었음을 나타내며, 인스턴스 ID도 함께 표시되어 있습니다. 이 ID는 인스턴스에 대한 고유한 식별자로, AWS 내에서 이 인스턴스를 관리할 때 사용됩니다.

그림 1-1-12 EC2 인 스턴스 시작 전 설정 요약

 

'모든 인스턴스 보기' 버튼을 선택합니다.

AWS EC2 대시보드에서 EC2 인스턴스가 성공적으로 실행 중임을 확인할 수 있습니다. 내용을 확인 후, 인스턴스 ID를 선택합니다. 초기에 대기중에서 실행 중으로 변경되어야 실제 인스터스가 시작되어, 실행 확인이 가능합니다.

그림 1-1-13 AWS EC2 인스턴스 실행 상태 확인

 

인스턴스를 선택 후, 보안을 선택합니다.

 

 

보안 선택 화면 설명

이 이미지는 AWS EC2 보안 설정에서 보안 그룹(Security Group)의 세부 정보를 보여주는 화면입니다. 보안 그룹은 인스턴스에 대한 인바운드아웃바운드 트래픽을 제어하는 규칙을 설정하는 기능입니다.

 

보안 그룹 ID: sg-08c27a41...로 시작하는 보안 그룹 ID가 선택되어 있으며, 이 보안 그룹을 통해 인스턴스에 대한 네트워크 트래픽을 관리합니다.

  • 인바운드 규칙: 인스턴스로 들어오는 트래픽에 대한 규칙입니다.
    • 포트 80 (HTTP), 포트 22 (SSH), 포트 443 (HTTPS)에 대한 TCP 프로토콜 규칙이 설정되어 있으며, 원본은 0.0.0.0/0로 지정되어 있어 모든 IP에서 접근이 가능합니다.
  • 아웃바운드 규칙: 인스턴스에서 나가는 트래픽에 대한 규칙입니다.
    • 모든 포트와 모든 프로토콜에 대해 대상이 0.0.0.0/0로 설정되어 있어, 모든 IP로의 아웃바운드 트래픽이 허용되어 있습니다.

 

인바운드 규칙 편집을 위해 보안 그룹을 선택합니다.

그림 1-1-14 AWS EC2 보안 그룹 설정 확인 - 인바운드 및 아웃바운드 트래픽 규칙

 

 

AWS EC2 보안 그룹 설정 화면을 확인할 수 있습니다. 인바운드 규칙 편집을 선택하여 인스턴스로 들어오는 트래픽 규칙을 수정할 수 있습니다. '인바운드 규칙 편집'을 선택합니다.

그림 1-1-15 AWS EC2 보안 그룹 인바운드 규칙 설정

 

 

인바운드 규칙 편집 화면 설명

AWS EC2 인스턴스의 보안 그룹에 대한 인바운드 규칙 편집 화면 확인할 수 있습니다. 사용자는 인스턴스가 외부에서 수신할 수 있는 트래픽을 제어하는 규칙을 추가하거나 수정할 수 있습니다. 인바운드 규칙을 통해 인스턴스로 들어오는 요청들을 제어하며, 보안 그룹에 맞는 규칙을 설정하여 특정 포트에 대한 접근을 허용할 수 있습니다. 설정한 이후에 규칙을 저장합니다. 저희는 맨 마지막 열을 추가했습니다.

 

  • 보안 그룹 규칙 ID: 각 규칙에는 고유한 규칙 ID가 있으며, 여러 규칙이 나열되어 있습니다.
    • HTTP: 포트 80 (TCP)
    • SSH: 포트 22 (TCP)
    • HTTPS: 포트 443 (TCP)
    • 사용자 지정 TCP: 포트 5000 (TCP)
  • 소스: 이 규칙들이 허용하는 트래픽의 출처를 지정하며, 현재 소스는 모두 0.0.0.0/0로 설정되어 있어, 이는 전 세계 모든 IP에서 접근 가능하다는 의미입니다. 이는 일반적으로 보안에 주의가 필요한 설정입니다.
  • 규칙 저장 버튼: 화면 하단에서 인바운드 규칙 변경사항을 저장하는 버튼입니다. 이 버튼을 클릭하면 규칙이 적용됩니다.
  • 경고 메시지: 하단의 경고 메시지는 "소스가 0.0.0.0/0"이거나 "::/0"인 경우, 모든 IP 주소에서 인스턴스에 접근할 수 있음을 알리고, 보안상 안전한 설정이 필요하다는 점을 경고하고 있습니다.

규칙 추가를 선택 후, 사용자 지정 TCP, 5000포트 추가 후, 규칙을 저장합니다.

Streamlit의 실행을 위해 8051도 추가합니다.

그림 1-1-16 AWS EC2 보안 그룹 인바운드 규칙 설정

 

다음으로 기본 화면으로 돌아가서, 인스턴스 연결을 선택합니다.

그림 1-1-17 AWS EC2 인스턴스 연결

 

 

인스턴스 연결 화면

SSH 클라이언트를 선택합니다. 아래 화면은 AWS EC2 인스턴스에 SSH 클라이언트를 통해 연결하는 방법을 확인할 수 있습니다. 사용자는 SSH를 사용하여 EC2 인스턴스에 원격으로 접속할 수 있으며, 이 과정에서 개인 키 파일을 사용하여 인증을 수행합니다.

우리는 로컬 컴퓨터에서 ssh을 이용하여 가상 서버에 연결이 가능합니다.

그림 1-1-18 AWS EC2 SSH 클라이언트 연결 방법

 

내 컴퓨터에서 AWS EC2 인스턴스에 SSH를 통해 접속하기 위해 커맨드 프롬프트를 띄웁니다. 이후, 확인한 명령을 이용해서 Window환경에서 웹 서버로 연결합니다.

그림 1-1-19 AWS EC2 인스턴스에 SSH로 접속하기

 

그림 1-1-20 AWS EC2 인스턴스에 SSH로 접속하기

 

성공적으로 접속이 성공하면 우분투 터미널 화면을 확인할 수 있습니다. 아래 화면은 사용자가 인스턴스에 접속했을 때의 기본 메시지입니다.

그림 1-1-21 EC2 인스턴스 SSH 접속 후 Ubuntu 터미널 화면

 

 

위의 정보는 다음과 같은 내용을 포함합니다.

 

  • 업데이트 알림: 시스템에서 사용할 수 있는 업데이트 목록이 일주일 이상 오래되었음을 알리며, 최신 업데이트를 확인하려면 sudo apt update 명령을 실행하라고 안내합니다.
  • 소프트웨어 라이선스 정보: Ubuntu 시스템에 포함된 프로그램은 무료 소프트웨어이며, 프로그램별로 배포 조건이 /usr/share/doc/*/copyright 경로에 설명되어 있다는 내용을 안내합니다.
  • 경고문: Ubuntu 시스템은 특정 법적 제한에 따라 사용되며, 보증이 없음을 명시하고 있습니다.
  • 관리자 권한 사용법 안내: 루트 사용자 권한으로 명령을 실행하려면 sudo <command> 명령어를 사용하라는 안내가 있습니다.

 

연결시 에러 1

해당 pem 파일을 찾을 수 없을 경우, 다음과 같은 에러 메시지가 발생됩니다. 위치를 다시 확인 후, 재 시도 해 보세요.

Warning: Identity file totofriend.pem not accessible: No such file or directory.
ubuntu@ec2-3-39-229-19.ap-northeast-2.compute.amazonaws.com: Permission denied (publickey).

 

연결시 에러 2

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'to---d.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "to---d.pem": bad permissions
ubuntu@ec2-3-39-22229-19.ap-nor--te.amazonaws.com: Permission denied (publickey).

 

권한 문제로 인해, 이를 해결 후, 다시 실행해 봅니다.

# 권한 모드 제거
icacls "D:\git11\BOOK_TASK\aws\toto1234.pem" /reset

# 상속을 제거
icacls "D:\git11\BOOK_TASK\aws\toto1234.pem" /inheritance:r

# 읽기 권한 부여
icacls "D:\git11\BOOK_TASK\aws\toto1234.pem" /grant:r "%username%":"(R)"

 

 

성공적으로 연결되었습니다.

 

 

github의 소스 코드 가져와 확인하기

 

그림 1-1-22 EC2 github 주소 확인하기

 

 

https://github.com/LDJWJ/AwsTest.git

이후 확인된 URL을 이용해서 git clone으로 이를 AWS 서버로 내용을 복제해 옵니다.

 

 git clone https://github.com/LDJWJ/AwsTest.git

 

flask 프로그램을 실행하는 것을 확인해 봅니다.

streamlit_app.py

# Streamlit 라이브러리 가져오기
import streamlit as st

# 애플리케이션 제목
st.title("간단한 Streamlit 웹 애플리케이션")

# 사용자 입력 받기
user_input = st.text_input("메시지를 입력하세요:")

# 입력된 메시지 출력하기
if user_input:
    st.write(f"입력하신 메시지: {user_input}")

 

 

# 기본 환경 준비
sudo apt update
sudo apt install python3-pip
sudo apt install python3-flask
sudo apt install python3-venv 

# 가상환경 만들기
python3 -m venv myenv
source myenv/bin/activate

# 가상환경 생성 후, 설치
cd /home/ubuntu/AwsTest
pip install -r requirements.txt
pip install streamlit

 

 

마지막으로 streamlit_app.py를 실행해 봅니다.

> streamlit run streamlit_app.py

 

실행이 되면 서버가 실행이 됩니다. 그리고 이를 중지시키면 외부에서 보이는 것도 중지가 되게 됩니다.

 

인터넷 브라우저에서 아래 IPv4주소로 접속이 가능합니다. flask에서는 5000번 포트로 웹 서버를 띄우기 때문에

54.180.xx.xx:5000 으로 접속이 가능합니다. 그리고 streamlit의 경우는 8501 포트로 확인이 가능합니다.

 

 

 

여기까지 따라오시느라 수고많으셨습니다.

오늘도 화이팅입니다.