오도원입니다.

건강과 행복을 위하여

데브옵스

파이썬 Zappa로 AWS Lambda에 서버리스 Web 구현하기

오도원공육사 2020. 9. 2. 14:11
반응형

* 다음 내용은 Hidekuma님의 파이썬 Zappa로 AWS Lambda에 서버리스 Web 구현하기를 참고했습니다.

목차

1. AWS credentials file 설정 및 Access Key ID와 Secret Access Key 생성

2. AWS CLI version2 설치

3. aws configure 설정

4. zappa 배포하기

1. AWS credential file 설정

Amazon Web Services(AWS) 계정을 처음 생성하는 경우에는 전체 AWS 서비스 및 계정 리소스에 대해 완전한 액세스 권한을 지닌 단일 로그인 자격 증명으로 시작한다. 이 자격증명을 AWS 계정 루트 사용자라고 한다. 

 

zappa 배포를 위해서는 aws configure을 설정해야한다. 따라서 엑세스 키를 생성해야한다. 자세한 과정은 AWS 계정 루트사용자 개발문서를 참고하라.

2. AWS CLI version 2

엑세스 키를 생성하면 access key와 secrete key가 생성된다. 이것을 aws configure로 등록하기 위해서는 여러방법이 있지만 본인은 aws cli 방식을 이용했다. AWS CLI 버전 2를 설치한다. 

 

다음은 본인이 Windows에서 WSL2로 ubuntu shell을 사용하기 때문에 linux 기준 AWS CLI 설치 코드이다.

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

3. aws configure

1) 인증정보 설정

$ aws configure
AWS Access Key ID [None]: [Access-Key-Code]
AWS Secret Access Key [None]: [Secrete-Key-Code]
Default region name [None]: ap-northeast-2
Default output format [None]: json

2) 인증정보 확인

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************CDEF shared-credentials-file
secret_key     ****************IJKL shared-credentials-file
    region           ap-northeast-2      config-file    ~/.aws/config

3) unmasking 인증정보 확인

$ aws configure get aws_access_key_id
[마스킹되지않은 엑세스키가 출력됨]
$ aws configure get aws_secret_access_key
[마스킹되지않은 시크릿키가 출력됨]

이제 aws configure까지하면 AWS credentials file 설정이 끝난 것이다.

 

4. zappa 배포하기

* 다음 내용은 Hidekuma님의 파이썬 Zappa로 AWS Lambda에 서버리스 Web 구현하기를 참고했습니다.

 

Python에서 Flask나 django와 같은 파이썬 웹을 서버리스로 띄우는데 zappa는 매우 용이하다.

 

1) zappa install

zappa-test(자유) 이름의 가상환경을 생성 후 접속한다. 그리고 pip install로 zappa 설치

(zappa-test) $ pip install zappa

* 주의할 점.

만일 windows OS를 사용한다면 default encoding code가 CP949로 설정되어있으므로 kappa를 설치할 때 인코딩 문제가 발생한다. kappa 0.6.0 버전 이후로는 encoding를 설정해주지 않기 때문이다. 해결방법은 다음을 참고하라.

 

2) zappa init

(zappa-test) $ zappa init

위의 커맨드 실행 후 나오는 옵션은 전부 엔터키를 눌러서 디폴트로 설정한다.

 

3) zappa_settings.json

zappa init을 하면 zappa_settings.json 파일이 생성된다.

(zappa-test) $ cat zappa_settings.json
{
    "dev": {
        "app_function": "app.app",
        "aws_region": "ap-northeast-2",
        "profile_name": "default",
        "project_name": "zappa-test",
        "runtime": "python3.8",
        "s3_bucket": "zappa-[s3코드]"
    }
}

4) flask app.py 코드

#app.py
import sys
from flask import Flask, redirect, request, jsonify, url_for, render_template
app = Flask(__name__, static_url_path='')
@app.route('/', methods=['GET'])
def index():
     return 'hello zappa!'
if __name__ == '__main__':
 if len(sys.argv) > 1:
     app.debug = True # 오류사항 발생 시, view에 오류내용이 그려진다.
     app.jinja_env.auto_reload = True # jinja / html / py 파일 변경점이 있을 시, 바로 재로드한다.
     app.config['TEMPLATES_AUTO_RELOAD'] = True
     app.run(host='0.0.0.0', port=4000)
 else:
     app.run(host='0.0.0.0')

5) flask 설치

(zappa-test) $ pip install flask

6) AWS lambda 업로드

(zappa-test) $ zappa deploy dev

7) undeploy

(zappa-test) $ zappa undeploy dev

 AWS IAM Role과 S3 bucket은 삭제되지 않으므로, 콘솔에 접속해서 직접 지워야한다.

zappa 자주 쓰는 commands

  • zappa deploy [stage] : 해당 스테이지로 소스를 업로드한다.
  • zappa update [stage] : 해당 스테이지를 업데이트한다.
  • zappa undeploy [stage] : 해당 스테이지를 삭제한다.
  • zappa tail [stage] : 해당 스테이지의 로그를 볼 수 있다.
  • zappa rollback [stage] -n [숫자] : [숫자]만큼 deploy한 횟수를 취소한다. 이전 deploy 환경으로 롤백시킨다.

conference.

https://hidekuma.github.io/serverless/aws/lambda/apigateway/zappa/python-zappa/

https://www.daleseo.com/aws-cli-configure/

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html

https://www.lesstif.com/lpt/linux-zip-unzip-80248839.html

반응형

'데브옵스' 카테고리의 다른 글

k9s logout 하는 법, oidc 로그아웃  (1) 2023.09.12
Amazon EC2란 무엇인가  (0) 2020.09.04
Amazon VPC란 무엇인가  (0) 2020.09.04
Amazon S3란 무엇인가  (0) 2020.09.03
서버리스란 무엇인가.  (2) 2020.09.02