Usage:
build_layer.sh <layer_name> <path/to/requirements/file> <python-version>
for example,
scripts/build_layer.sh tensorflow requirements/tensorflow.txt 3.8
where requirements/tensorflow.txt
contains:
tensorflow==2.4.0
build_layer.sh
#!/bin/bash
set -eo pipefail
function usage {
file_name=$0
echo "usage: ${file_name} <layer_name> <path/to/requirements.txt/file> <python_version>"
exit 1
}
layer_name=${1}
requirements_file=${2}
python_version=${3}
if [[ -z "${requirements_file}" ]]; then
requirements_file="requirements.txt"
fi
if [[ -z "${layer_name}" || ! -f "${requirements_file}" ]]; then
usage
fi
layer_path=".layers/${layer_name}/python/lib/python${python_version}/site-packages"
rm -rf "$layer_path"
echo "Installing packages from ${requirements_file}"
docker run --rm \
--user $UID \
--volume "$PWD:/var/task" \
--workdir /var/task \
--env CV_PYPI_USERNAME \
--env CV_PYPI_PASSWORD \
"lambci/lambda:build-python${python_version}" \
pip install -Ur "${requirements_file}" --target "${layer_path}"
echo "Removing unnecessary packages from ${layer_path}"
rm -rf "$layer_path"/{botocore,boto3}*
echo "Removing unnecessary files/folders from ${layer_path}"
find "$layer_path" -type f -name "*.pyc" -exec rm -rf {} +
find "$layer_path" -type d -name "__pycache__" -exec rm -rf {} +
find "$layer_path" -type d \( -name "tests" -o -name "test" \) -exec rm -rf {} +
echo "Layer creation finished at ${layer_path}"
Top comments (0)