
使用 aws lambda 时,开发人员面临的常见挑战之一是管理大型 python 依赖项。 pandas、shapely 和 geopandas 等库对于地理空间分析等任务至关重要,通常会超过 lambda 的 250 mb 解压层限制。一个实用的解决方案?将您的依赖项存储在 efs(弹性文件系统) 上并将其挂载到您的 lambda 函数。
在这篇文章中,我们将逐步介绍其设置过程,包括先决条件、主要优势和分步实施。
这篇文章面向具有高级 aws 经验的用户。它假设您对 lambda、efs、vpc 和安全组等 aws 服务有深入的了解,并且熟悉管理基础设施和在云中部署可扩展的解决方案。
在我们深入设置之前,请确保您具备以下条件:
处理程序直接在挂载到 aws lambda 函数的 amazon efs 存储上安装 python 依赖项。这种方法绕过了 lambda 层的大小限制,使其适用于地理空间数据处理通常需要的重依赖项,例如 pandas、geopandas 和 shapely。它确保 /mnt/data 目录中提供所需的库,供 lambda 在执行期间使用:
import os
import subprocess
package_dir = "/mnt/data/lib/{}/site-packages/"
def get_python_version_tag():
"""generates a python version tag like 'python3.11'."""
return f"python{os.sys.version_info.major}.{os.sys.version_info.minor}"
def install_package(package):
"""installs a python package into the efs-mounted directory."""
target_dir = package_dir.format(get_python_version_tag())
os.makedirs(target_dir, exist_ok=true)
try:
subprocess.run(
[
"pip",
"install",
package,
"--target",
target_dir,
"--upgrade",
"--no-cache-dir",
],
check=true,
)
print(f"package {package} installed successfully!")
except subprocess.calledprocesserror as e:
print(f"failed to install package {package}: {e}")
def handler(event, context):
"""aws lambda handler for installing packages."""
try:
# list of packages to install from the event input
packages = event.get("packages", [])
for package in packages:
install_package(package)
#optional for see packages installed
#os.system(f"ls -la {package_dir.format(get_python_version_tag())}")
return {"statuscode": 200, "body": "packages installed successfully!"}
except exception as e:
print(f"error: {e}")
return {"statuscode": 500, "body": f"an error occurred: {e}"}
调用 lambda 函数时,传递以下 json 负载:
{
"packages": ["requests", "pandas"]
}
使用 ssh 会话或 aws cli 导航到您的 efs 挂载点(例如 /mnt/data/lib/)。
检查 site-packages/ 目录下已安装的软件包。
或者简单地使用 a 查看已安装的软件包
os.system(f"ls -la {package_dir.format(get_python_version_tag())}")
更新 lambda 函数的处理程序以包含安装在 efs 上的依赖项,这里的关键是将 efs 中的依赖项路径挂载到 lambda 处理程序的 pythonpath:
所有希望使用已安装依赖项的 lambda 函数都必须将 efs 附加到 lambda。如果没有此附件,lambda 将无法访问 efs 上存储的所需依赖项。
import sys
sys.path.append("/mnt/data/lib/python3.11/site-packages/") # Adjust Python version as needed
# Dependencies are now available!!!
import pandas as pd
def lambda_handler(event, context):
return {"message": "Dependencies loaded successfully!"}
虽然直接在 efs 中安装 python 依赖项并不常见,但在 lambda 的默认限制(例如 250 mb 解压缩层大小)受到限制的情况下,它提供了某些优势。这种方法对于需要使用诸如 pandas、shapely 和 geopandas 等繁重库进行地理空间计算的应用程序特别有用,这些库通常超出层大小限制。
立即学习“Python免费学习笔记(深入)”;
该解决方案非常适合高级数据处理任务,例如地理空间分析,还可以根据需要轻松扩展存储,同时保持无服务器架构的灵活性。
以上就是使用 EFS 在 AWS Lambda 上安装 Python 依赖项的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号