Я использую 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