Flask + Serverless — AWS Lambda의 API를 사용하는 쉬운 방법

11557 단어 apipythonflaskaws
소규모 API를 신속하게 배포해야 하거나 AWS Lambda의 이점을 활용하기 위해 코드베이스를 마이그레이션하기로 결정한 경우. 물론 직접 앱을 포장하고 업로드하는 것과 같이 이를 수행하는 방법에 대한 다른 가이드가 있습니다. 일부 종속성이 호환되지 않고(Linux on lambda 때문에) 이를 처리해야 한다는 것을 알게 되면 프로세스가 좀 더 까다로워집니다.

해결책



Flask와 서버리스 프레임워크의 강력한 콤보를 사용합니다. Django와 같은 모든 WSGI 애플리케이션도 작동할 수 있습니다. 견적 서비스를 이용하겠습니다.

레시피



  • 장치에 다운로드 및 설치Python한 다음 pip 및 virtualenv 패키지를 설치합니다.

      pip install virtualenv
    


  • 서버리스 프레임워크 설치see full instructions

      $ npm install -g serverless
    


  • 기본 폴더를 만들고 "따옴표"라고 부를 수 있습니다. 그런 다음 python venv를 만듭니다.

        mkdir quotes
        cd quotes
        virtualenv venv -p python3
        (venv) pip install Flask
        (venv) pip freeze > requirements.txt
    

    이제 venv 폴더가 생기고 quotes/venv/Scripts로 이동하여 "활성화"를 실행하여 가상 환경을 활성화합니다.

  • 기본 폴더/quotes에서 견적 서비스를 포함할 app.py 파일을 만든 다음 아래 정보를 추가합니다.

        from collections import namedtuple
        from random import choice
    
        from flask import Flask, jsonify
    
        Quote = namedtuple("Quote", ("text", "author"))
    
        quotes = [
            Quote("Talk is cheap. Show me the code.", "Linus Torvalds"),
            Quote("Programs must be written for people to read, and only incidentally for machines to execute.", "Harold Abelson"),
            Quote("Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live",
                "John Woods"),
            Quote("Give a man a program, frustrate him for a day. Teach a man to program, frustrate him for a lifetime.", "Muhammad Waseem"),
            Quote("Progress is possible only if we train ourselves to think about programs without thinking of them as pieces of executable code. ",
                "Edsger W. Dijkstra")
        ]
    
        app = Flask(__name__)
    
        @app.route("/")
        def hello_from_root():
            return jsonify(message='Hello from root!')
    
        @app.route("/quote", methods=["GET"])
        def get_random_quote():
            return jsonify(choice(quotes)._asdict())
    


  • 서버리스 프레임워크와 연결하십시오. 그렇게 하려면 serverless.yml 파일(루트에서)을 수동으로 생성해야 합니다. 파일은 다음과 같습니다.

        service: quotes #name this whatever you want
    
        provider:
        name: aws
        runtime: python3.6
        region: us-east-1
        memorySize: 128
    


  • 2개의 서버리스 플러그인을 설치합니다. 첫 번째로 필요한 것은 Lambda가 WSGI(Flask/Django가 사용하는 프로토콜)를 이해하도록 하는 것입니다. 두 번째는 Serverless가 Python 요구 사항을 배포 패키지에 포함하도록 만드는 것입니다.

      $ sls plugin install -n serverless-wsgi
      $ sls plugin install -n serverless-python-requirements
    


  • 필요한 플러그인 및 추가 정보로 serverless.yml 파일을 업데이트합니다.

    service: quotes-serverless #name this whatever you want
    
    provider:
    name: aws
    runtime: python3.6
    region: us-east-1
    memorySize: 128
    
    plugins:
    - serverless-wsgi
    - serverless-python-requirements
    
    custom:
    wsgi:
    app: app.app
    packRequirements: false
    
    functions:
    app:
    handler: wsgi_handler.handler
    events:
        - httpApi: '*'
    
    deprecationNotificationMode: error #add this for debugging
    configValidationMode: error #add this for debugging
        `);
    
    

    해당 플러그인에 대한 구성을 보유하는 새 섹션(사용자 정의)을 볼 수 있습니다. wsgi 부분은 앱이 있는 위치를 말하고 요구 사항 패킹을 해제합니다. 마지막 부분(함수)은 서비스에 포함된 내용을 선언합니다. 하나의 서비스 내에서 더 많은 기능을 가질 수 있으며 특정 권한이 필요합니다. 이 경우 모든 요청은 설치된 플러그인에서 제공하는 WSGI 핸들러를 통해 처리됩니다.

  • requirements.txt 업데이트

    Flask==1.1.4
    Werkzeug==1.0.1
    markupsafe==2.0.1
    

    'Werkzeug' 버전을 확인하세요. 배포하는 동안 오류가 발생할 수 있습니다.

  • 서비스를 테스트하기 위해 로컬 배포를 수행하고 다음을 실행합니다.

        $ serverless wsgi serve
    

    server을 특정 경로로 열 수 있습니다(예: http://localhost:5000/).

    use /quotes to see the random quotes.



  • 프로젝트를 AWS에 배포하기 전에 다음을 수행해야 합니다create an account.
  • AWS 계정에 로그인하고 Identity & Access Management(IAM) 페이지로 이동합니다.
  • 사용자를 클릭한 다음 사용자 추가를 클릭합니다. 첫 번째 필드에 이름을 입력하여 이 사용자가 serverless-admin과 같이 서버리스 프레임워크와 관련되어 있음을 상기시킵니다. 확인란을 클릭하여 프로그래밍 방식 액세스를 활성화합니다. 다음을 클릭하여 권한 페이지로 이동합니다. 기존 정책 직접 연결을 클릭합니다. AdministratorAccess를 검색하여 선택한 후 다음: 검토를 클릭하십시오. 모든 것이 잘 보이는지 확인하고 사용자 만들기를 클릭합니다.
  • API 키 및 암호를 보고 임시 위치에 복사합니다. 이것이 AWS 액세스 키입니다.

  • see more instruction in here



  • AW 자격 증명을 프로젝트에 추가합니다. 가장 쉬운 방법은 루트 폴더에 .env 파일을 만들고 아래 정보를 추가하는 것입니다.


  • 프로젝트 폴더의 루트에 새 파일 nodemon.json을 편집하여 환경 변수를 저장하는 데 사용할 파일을 편집합니다. nodemon을 사용하지 않는 경우 .env 파일을 생성합니다.

        set AWS_ACCESS_KEY_ID=<your-key-here>
        set AWS_SECRET_ACCESS_KEY=<your-secret-key-here>
        # AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are now available for serverless to use
        serverless deploy
    
        # In Linux use 'export' instead of 'set'
    




  • 프로젝트를 배포하고 아래 명령을 실행합니다.

        $ serverless deploy
    

    이제 endpoint에서 서버를 볼 수 있습니다. AWS Cloudformation에서 이제 배포된 프로젝트의 스택이 있습니다.


  • If you get an internal error or want to see recent logs, open CloudWatch in your AWS console or just type: serverless logs -f app



    이 블로그contains와 함께 이 저장소를 자유롭게 방문하십시오.

    좋은 웹페이지 즐겨찾기