我刚刚使用seaborn创建了自定义层,并且可以确认它可以工作。该层显式安装了一些依赖项,但不使用numpy 和scipy。这两个包必须由AWS托管层AWSLambda-Python37-SciPy1x提供。
因此您需要在您的函数中使用两层。下面创建了一个自定义,第二个是AWSLambda-Python37-SciPy1x。
使用的技术包括最近 AWS 博客中描述的 docker 工具:
因此对于这个问题,我验证了如下:
- 创建空文件夹,例如
mylayer。
mkdir mylayer && cd mylayer
- 进入文件夹并创建
requirements.txt:
echo seaborn > requirements.txt
echo matplotlib >> requirements.txt
echo pyparsing >> requirements.txt
echo cycler >> requirements.txt
echo certifi >> requirements.txt
echo pillow >> requirements.txt
echo six >> requirements.txt
echo pandas >> requirements.txt
echo kiwisolver >> requirements.txt
echo pytz >> requirements.txt
- 运行以下 docker 命令:
注意使用--no-deps 跳过任何依赖appart
从上面指定的那些。
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.7" /bin/sh -c "pip install --no-deps -r requirements.txt -t python/lib/python3.7/site-packages/; exit"
- 将层创建为 zip:
zip -9 -r mylayer.zip python
-
在 AWS 控制台中基于 mylayer.zip 创建 lambda 层。
不要忘记将Compatible runtimes 指定为python3.7。
-
使用以下 lambda 函数在 lambda 中测试层:
import json
import seaborn
def lambda_handler(event, context):
print(dir(seaborn))
函数正确执行:
['FacetGrid', 'JointGrid', 'PairGrid', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_orig_rc_params', 'algorithms', 'axes_style', 'axisgrid', 'barplot', 'blend_palette', 'boxenplot', 'boxplot', 'categorical', 'catplot', 'choose_colorbrewer_palette', 'choose_cubehelix_palette', 'choose_dark_palette', 'choose_diverging_palette', 'choose_light_palette', 'clustermap', 'cm', 'color_palette', 'colors', 'countplot', 'crayon_palette', 'crayons', 'cubehelix_palette', 'dark_palette', 'desaturate', 'despine', 'distplot', 'distributions', 'diverging_palette', 'dogplot', 'external', 'factorplot', 'get_data_home', 'get_dataset_names', 'heatmap', 'hls_palette', 'husl_palette', 'jointplot', 'kdeplot', 'light_palette', 'lineplot', 'lmplot', 'load_dataset', 'lvplot', 'matrix', 'miscplot', 'mpl', 'mpl_palette', 'pairplot', 'palettes', 'palplot', 'plotting_context', 'pointplot', 'rcmod', 'regplot', 'regression', 'relational', 'relplot', 'reset_defaults', 'reset_orig', 'residplot', 'rugplot', 'saturate', 'scatterplot', 'set', 'set_color_codes', 'set_context', 'set_hls_values', 'set_palette', 'set_style', 'stripplot', 'swarmplot', 'utils', 'violinplot', 'widgets', 'xkcd_palette', 'xkcd_rgb']