Serverless Framework를 사용하여 AWS Lambda에 배포할 수 있는 환경 만들기

7316 단어 ServerlessFramework

개요



  • serverless framework을 사용하여 AWS AWS Lambda에 배포하는 방법
  • 외부 라이브러리도 함께 배포할 수 있습니다.
  • docker-lambda를 사용하여 pip 설치

  • 환경


  • macOS 10.13.6
  • Docker 18.03.1-ce
  • npm 5.6.0
  • 파이썬 3.6.5
  • 액세스 권한 AdministratorAccess가 부여된 IAM 사용자
  • awscli가 설치되어 있습니다 ( sudo pip install awscli )

  • 절차



    설치


  • serverless 설치
  • npm install --save serverless
    
  • 모듈을 함께 배포하는 플러그인 serverless-python-requirements 설치
  • npm install --save serverless-python-requirements
    
  • local에서 lambda 스크립트를 실행하기위한 라이브러리 설치
  • pip install python-lambda-local
    
  • (이어서) 이번 deploy 테스트에 사용하는 라이브러리 python-levenshtein 도 설치해 둡니다.
  • pip install python-levenshtein
    

    설정



    aws 프로필 설정



    AWS CLI 설정 을 참고로 설정합니다.

    다음과 같은 느낌.
    aws configure --profile 用意したユーザー名
    
    AWS Access Key ID [None]: アクセスキー
    AWS Secret Access Key [None]: シークレットアクセスキー
    Default region name [None]: ap-northeast-1
    Default output format [None]: json
    

    python3 용 serverless 템플릿 출력



    lambda 파일을 관리하는 폴더를 만들고 그 안으로 이동하여 다음 명령을 실행합니다.
    serverless create --template aws-python3
    

    .gitignore, handler.py, serverless.yml이 생성됩니다.

    deploy 설정하기


    serverless.yml 를 다음과 같이 편집합니다 (댓글이 삭제되었습니다.).

    serverless.yml
    service: aws-python3
    
    provider:
      name: aws
      runtime: python3.6
      region: ap-northeast-1
    
    plugins:
      - serverless-python-requirements
    
    custom:
      pythonRequirements:
        dockerizePip: true
    
    functions:
      sample-func:
        handler: handler.main
    

    docker-lambda로 컴파일된 라이브러리를 사용하기 위한 설정은 다음과 같습니다. ( 참고 ).
    custom:
      pythonRequirements:
        dockerizePip: true
    

    샘플 코드 작성



    두 문자열의 Levenshtein 거리를 찾는 코드입니다.

    handler.py
    import json
    import Levenshtein
    
    
    def main(event, context):
        print(Levenshtein.distance("東京都", "東海道"))
    
  • 필요한 라이브러리를 requirements.txt에 기술한다

  • requirements.txt
    python-levenshtein
    

    동작 확인



    로컬로 시도



    python-lambda-local을 사용하여 로컬에서 동작을 확인합니다. 인수용의 event.json (을)를 만듭니다. 실제로 사용하지 않으므로 빈 json입니다.

    event.json
    {}
    

    실행합니다.
    python-lambda-local -f main handler.py event.json
    
    [root - INFO - 2018-07-22 11:36:43,446] Event: {}
    [root - INFO - 2018-07-22 11:36:43,447] START RequestId: c2f1d96c-fed5-48c9-bb98-2ea9a541f6d3
    2
    [root - INFO - 2018-07-22 11:36:43,448] END RequestId: c2f1d96c-fed5-48c9-bb98-2ea9a541f6d3
    [root - INFO - 2018-07-22 11:36:43,448] RESULT:
    None
    [root - INFO - 2018-07-22 11:36:43,449] REPORT RequestId: c2f1d96c-fed5-48c9-bb98-2ea9a541f6d3  Duration: 0.98 ms
    

    계산되었습니다.

    deploy하다


  • aws-profile에 앞서 준비한 사용자 이름을 입력하십시오.
  • 다음을 실행하십시오.
  • serverless deploy --aws-profile 用意したユーザー名 --verbose
    

    아래와 같은 로그가 출력되어 라이브러리와 함께 로컬 코드가 S3 경유로 Lambda에 배포됩니다.
    Serverless: Installing requirements of requirements.txt in .serverless...
    Serverless: Docker Image: lambci/lambda:build-python3.6
    Serverless: Packaging service...
    Serverless: Excluding development dependencies...
    Serverless: Injecting required Python packages to package...
    Serverless: Uploading CloudFormation file to S3...
    Serverless: Uploading artifacts...
    Serverless: Uploading service .zip file to S3 (399.66 KB)...
    Serverless: Validating template...
    Serverless: Updating Stack...
    Serverless: Checking Stack update progress...
    CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - aws-python3-dev
    CloudFormation - UPDATE_IN_PROGRESS - AWS::Lambda::Function - SampleDashfuncLambdaFunction
    CloudFormation - UPDATE_COMPLETE - AWS::Lambda::Function - SampleDashfuncLambdaFunction
    CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - SampleDashfuncLambdaVersion6OU7Kc3zila3ZAax4gvx0
    CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - SampleDashfuncLambdaVersion6OU7Kc3zila3ZAax4gvx0
    CloudFormation - CREATE_COMPLETE - AWS::Lambda::Version - SampleDashfuncLambdaVersion6OU7Kc3zila3ZAax4gvx0
    CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - aws-python3-dev
    CloudFormation - DELETE_SKIPPED - AWS::Lambda::Version - SampleDashfuncLambdaVersionvDNqLnGSqO3Kpr8t0M
    CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - aws-python3-dev
    Serverless: Stack update finished...
    Service Information
    service: aws-python3
    stage: dev
    region: ap-northeast-1
    stack: aws-python3-dev
    api keys:
      None
    endpoints:
      None
    functions:
      sample-func: aws-python3-dev-sample-func
    
    Stack Outputs
    SampleDashfuncLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:07898663:function:aws-python3-dev-sample-func:10
    ServerlessDeploymentBucketName: aws-python3-dev-serverlessdeploymentbucket-19aaa
    
    

    deploy 확인


  • AWS Lambda에 액세스하면 라이브러리와 함께 배포되어 있는지 확인합니다.



  • 이상,

    좋은 웹페이지 즐겨찾기