serverless-python-requirements icon indicating copy to clipboard operation
serverless-python-requirements copied to clipboard

Ever lambda has same size

Open tw1t611 opened this issue 2 years ago • 1 comments

I just figured, that every lambda deployed with serverless has the same size

dashboard: https://app.serverless.com/timpolyma/apps/birdzview/birdzview/dev/eu-central-1
endpoints:
  POST - https://fjwyyf75v9.execute-api.eu-central-1.amazonaws.com/api/open-ai
  GET - https://fjwyyf75v9.execute-api.eu-central-1.amazonaws.com/api/scores/all
  GET - https://fjwyyf75v9.execute-api.eu-central-1.amazonaws.com/api/scores/{id}
functions:
  fetch_open_ai: birdzview-dev-fetch_open_ai (105 MB)
  get_all_scores: birdzview-dev-get_all_scores (105 MB)
  get_scores_per_user: birdzview-dev-get_scores_per_user (105 MB)
layers:
  pythonRequirements: arn:aws:lambda:eu-central-1:028655318971:layer:birdzview-dev-python-requirements:8

I think my structure might be wrong, or is that the intended behavior? I placed all the files in one module /lib, which might be wrong. However, It seems like only the the dependencies written in the PipFile matter. The project needs some big dependencies, so I can't fully deploy it at the moment. individual packaging didn't work for me. Is there any way to further reduce the file size of the functions?

serverless.yml

provider:
  name: aws
  runtime: python3.9
  region: eu-central-1
  httpApi:
    cors: true
  # environment:
  #   PYTHONPATH: "/var/task/vendored:/var/runtime"

custom:
  pythonRequirements:
    layer: true
    zip: true
    slim: true

functions:
  fetch_open_ai:
    handler: handler._fetch_open_ai
    events:
      - httpApi:
          path: /api/open-ai
          method: post

  get_all_scores:
    handler: handler._get_all_scores
    events:
      - httpApi:
          path: /api/scores/all
          method: get

  get_scores_per_user:
    handler: handler._get_scores_per_user
    events:
      - httpApi:
          path: /api/scores/{id}
          method: get

plugins:
  - serverless-python-requirement

handler.py

try:
    import unzip_requirements
except ImportError:
    pass

import json
from lib.open_ai.main import fetch_open_ai
from lib.scores.all_scores import get_all_scores
from lib.scores.scores_per_user import get_scores_per_user

def _fetch_open_ai(event, context):
    data = json.loads(event['body'])
    text = fetch_open_ai(data)
    response = {'statusCode': 200, 'body': json.dumps(text)}
    return response

def _get_all_scores(event, context):
    get_all_scores()
    response = {"statusCode": 200}
    return response

def _get_scores_per_user(event, context):
    id = event['pathParameters']['id']
    print(id)  # check README
    result = get_scores_per_user(id)
    response = {"statusCode": 200, "body": result}
    return respons

tw1t611 avatar Jun 30 '22 02:06 tw1t611