ABOUT ME

-

Total
-
  • Python: 무료 Cloud Flask 서버 만들기 (AWS EC2 + S3)
    컴퓨터/파이썬 2020. 12. 26. 17:44
    728x90
    반응형

    AWS

     

    클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services

    브라우저 기반 셸, 더 안전하고 손쉬운 카오스 엔지니어링, 기존 도구와 서비스의 향상된 기능 발표 내용 살펴보기 

    aws.amazon.com

     

    1. 소개

    AWS는 클라우드 서버를 제공해 주어서 ssh로 접속하면 가상 환경으로 서버에 접속할 수 있다.

    카카오 챗봇 스킬 서버를 구름 IDE 무료 버전으로 이용하고 있으나, 인터넷 창을 닫으면 꺼진다.

    터미널은 열어두기 편하고, AWS을 이용해 보고 싶어서 아래와 같은 상황을 만들 것이다.

     

    • AWS S3 온라인 클라우드 만들기 (ES2 서버에서 로컬 컴퓨터 파일 sync)
    • AWS EC2 우분투 서버 만들고 실행하기
    • python 가상 환경 만든 후 flask 서버 실행

     

    2. AWS EC2 서버 만들기

    AWS 계정이 없으면 일단 하나 만든다. @계정 만들기

     

    계정을 무료 플랜으로 만든 후 콘솔에서 EC2를 클릭

     

    인스턴스 시작 클릭

     

    Free tier 원하는 OS 선택

    이 글에선, Ubuntu 20.04 버전으로 설명됐다.

     

    이후, 검토 및 시작 - 시작을 눌러 키 페어를 생성

    자신의 이름이나 랜덤 문자를 적어준다.

     

    인스턴스 시작 후 연결

    인스턴스를 시작했으면

     

    인스턴스 ID 클릭 후 맨 오른쪽 연결 클릭

     

    ECS 인스턴스 연결에서 바로 하거나, 윈도우 파워셀에서 하기 위해

    SSH 클라이언트를 이용한다.

     

    CHMOD 400 .pem

    윈도에서 400 상태를 만들어 주기 위해 아래와 같이 설정한다.

     

    pem 파일 우클릭 - 보안

    고급에서 상속 사용 안 함

    Admin, SYSTEM 이외 나머지 계정 전부 제거

     

    SSH 연결

    ssh 클라이언트 연결 메뉴에서 명령어 복사 후 서버 ubuntu에 접속한다.

     

    파이썬 설치

    sudo apt update
    sudo apt install software-properties-common
    sudo add-apt-repository ppa:deadsnakes/ppa

    ppa 추가하면 원하는 파이썬 버전을 다운로드할 수 있다.

    (@버전 목록)

     

    python을 했을 때 알아서 python3을 불러오도록 설정

    (python3.8 + pip 설치)

    sudo apt install python3.8
    alias python=python3
    
    sudo apt-get install python3-pip
    alias pip=pip3

     

    (옵션) 파이썬 가상 환경

    pip install virtualenv

     

    server란 가상 환경으로 만들었다.

    virtualenv ~/server
    source ~/server/bin/activate

     

    패키치 설치

    pip install flask

     

    Flask 포트 설정

    EC2 인스턴스 메뉴에서 보안 그룹을 클릭

     

    launch-wizard~ 클릭 후 인바운드 규칙 편집

     

    규칙 추가 - 사용자 지정 TCP - 포트 범위 8000 - 소스 0.0.0.0/0 설정

    8000 포트로 접속할 수 있게 만든다.

     

    3. AWS S3 클라우드

    내 컴퓨터 개발 폴더 전체를 s3를 주기적으로 sync 후,

    EC2 가상 환경에서 nano로 py를 편집하지 않는 방식으로 할 것이다. (s3 클라우드에서 py 다운로드)

     

    콘솔에서 S3 클릭

     

    버킷 만들기

     

    버킷 설정

    퍼블릭 설정을 위해 "모든 퍼블릭 액세스 차단" 해제 후 원하는 옵션을 클릭한다.

     

    자신의 버킷 - 권한으로 이동

     

    JSON 복사

    내 버킷 이름을 자신의 버킷으로 변경한다.

    퍼블릭으로 만들기 위한 설정이다.

    {
        "Version": "2012-10-17",
        "Id": "Policy1608967205105",
        "Statement": [
            {
                "Sid": "Stmt1608967202197",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::내 버킷 이름/*"
            }
        ]
    }

     

    수정하면 퍼블릭 액세스 가능이라고 뜰 것이다.

    이제, S3 클라우드 설정은 끝났다.

    원하는 파일 업로드 후 접속이 잘되는지 확인한다.

     

    테스트 파일

     

    AWS CLI 설치

    @CLI 다운로드 사이트

     

    AWS 명령줄 인터페이스

    aws-shell은 명령줄 셸 프로그램으로서, AWS 명령줄 인터페이스를 사용하는 새로운 사용자와 고급 사용자 모두에게 도움이 되는 편의 기능 및 생산성 기능을 제공합니다. 주요 기능은 다음과 같습

    aws.amazon.com

    알맞은 운영체제에 맞게 설치한다.

    (윈도우는 설치 파일, linux/ubuntu는 pip)

     

    IAM 키 만들기

    AWS CLI를 사용하기 위해 액세스 키를 만들어준다.

    (맨 우측 자신의 계정 클릭 - 내 보안 자격 증명)

     

    터미널에서 aws configure 실행

    위에서 만든 자신의 키를 복사하고, region은 서울 기준 (ap-northeast-2)

    모르겠으면, 자신의 ec2 인스턴스로 이동해서 브라우저 url, region을 확인한다.

     

    내 폴더 sync

    스케쥴러로 10분마다 sync 하게 할 수도 있다.

    aws s3 sync 윈도우복사할경로 s3://버킷 이름

     

    EC2 서버에서 S3 클라우드 다운로드

    awscli pip 설치

    pip install awscli

     

    --recursive 옵션으로 내 버킷에 있는 파일/폴더 전부를 pykf 폴더로 복사한다.

    (혹은 s3 클라우드를 내 폴더와 sync)

    aws s3 cp s3://내버킷/ ~/pykf --recursive
    
    aws s3 sync s3://내버킷/ ~/pykf

    복사 완료

     

    설정한 포트로 서버.py를 실행

    python app.py 8000

     

    자신의 퍼블릭 IPv4 DNS 주소:8000으로 접속해본다.

     

    오류 상황

    만약 서버 실행 중에 Connectiond reset by ~ ssh port 22라고 뜨면,

    EC2 인스턴스 터미널에서

    sudo nano /etc/ssh/sshd_config

    후, ClientAliveInterval 을 주석 해제 후, 0~240 값으로 바꾼다.

     

    Windows 쪽에선

    ~/user/.ssh에서 config 파일을 만든 후, 아래를 입력한다.

    Host *
    ServerAliveInterval 200

     

    재시작

    728x90

    댓글