Вот скрипт, который я использую для загрузки слоя:
#!/usr/bin/env bash
LAYER_NAME=$1 # input layer, retrived as arg
ZIP_ARTIFACT=${LAYER_NAME}.zip
LAYER_BUILD_DIR="python"
# note: put the libraries in a folder supported by the runtime, means that should by python
rm -rf ${LAYER_BUILD_DIR} && mkdir -p ${LAYER_BUILD_DIR}
docker run --rm -v `pwd`:/var/task:z lambci/lambda:build-python3.6 python3.6 -m pip --isolated install -t ${LAYER_BUILD_DIR} -r requirements.txt
zip -r ${ZIP_ARTIFACT} .
echo "Publishing layer to AWS..."
aws lambda publish-layer-version --layer-name ${LAYER_NAME} --zip-file fileb://${ZIP_ARTIFACT} --compatible-runtimes python3.6
# clean up
rm -rf ${LAYER_BUILD_DIR}
rm -r ${ZIP_ARTIFACT}
Я добавил содержимое выше в файл с именем build_layer.sh
, затем я назвал его bash build_layer.sh my_layer
. Для сценария требуется requirements.txt
в той же папке, и он использует Docker для того же времени выполнения, что и для Python3.6 Lambdas.
Аргументом скрипта является имя слоя.
После загрузки слоя в AWS убедитесь, что на версию Lambda ссылается версия нужного слоя.