Как хранить большие зависимости Python на S3 (для AWS Lambda с Serverless) - PullRequest
0 голосов
/ 15 февраля 2019

Я использую AWS Lambda для размещения проекта Python, управляю развертыванием с помощью инфраструктуры без серверов и столкнулся с общепринятыми ограничениями хранилища пакетов в 50 МБ.До сих пор я успешно разделял свои требования по функциям, используя подключаемые модули «serverless-python-индивидуально» и «serverless-python-Requirements» для объединения, сжатия и загрузки каждого файла в виде отдельной функции Lambda, как показано в разделе ключеймой файл serverless.yml, показанный ниже.

Это позволило первым трем пакетам функций не превышать 50 МБ и создать простой рабочий процесс, в котором я могу вносить изменения, просто используя: sls deploy --pi-dockerizedPip.Тем не менее, четвертый пакет, только с требованием SciPy, не может быть уменьшен ниже 52 МБ, и после большого прочтения единственный общий подход, который я вижу, состоит в том, чтобы загрузить мою зависимость (ии?) В S3 (где-то) и каким-то образом обеспечить мой импортоператоры в состоянии найти зависимости.

Я не нашел четких инструкций о том, как именно должен выполняться этот процесс упаковки зависимостей, и (почти так же важно), как может работать вместе с Serverless (так что я могусохранить хороший рабочий процесс)?

Ключевые разделы serverless.yml:

package:
  individually: True
  exclude:
    # Exclude everything first.
    - '**/*'

functions:
  brain:
    handler: src/1-brain/wrap.handler
    package:
      include:
        - src/1-brain/**
    events:
      - schedule: rate(5 minutes)
  data:
    handler: src/2-data/wrap.handler
    package:
      include:
        - src/2-data/**
  strategy:
      handler: src/3-strategy/wrap.handler
      package:
        include:
          - src/3-strategy/**
  balancer:
      handler: src/4-portfolio-balancer/wrap.handler
      package:
        include:
          - src/4-portfolio-balancer/**  
custom:
  pythonRequirements:
    useDownloadCache: true
    useStaticCache: true
    dockerizePip: true
    zip: true
    slim: true
  pyIndividually:
    wrap:brain: src/1-brain/aws_handler.handler     # mapping to the real handler
    wrap:data: src/2-data/datafeed.handler          # mapping to the real handler
    wrap:strategy: src/3-strategy/strategy.handler  # mapping to the real handler
    wrap:balancer: src/4-portfolio-balancer/balancer.handler  # mapping to the real handler

1 Ответ

0 голосов
/ 15 февраля 2019

AWS Lambda Layers позволяют вам объединять ваши пакеты / среду в слой.Вы можете использовать до 5 уровней и иметь несжатый лимит в 250 МБ по совокупной сумме всех соответствующих уровней + лямбда-код для любой конкретной лямбда-функции.

Ознакомьтесь с разделом «Включение зависимостей библиотеки в слой» https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...