使用 AWS Lambda 時,開發人員面臨的常見挑戰之一是管理大型 Python 相依性。 Pandas、Shapely 和 GeoPandas 等庫對於地理空間分析等任務至關重要,通常會超過 Lambda 的 250 MB 解壓層限制。一個實用的解決方案?將您的依賴項儲存在 EFS(彈性檔案系統) 上並將其掛載到您的 Lambda 函數。
在這篇文章中,我們將逐步介紹其設定過程,包括先決條件、主要優勢和逐步實施。
先決條件
這篇文章是針對具有進階 AWS 經驗的使用者。它假設您對 Lambda、EFS、VPC 和安全群組等 AWS 服務有深入的了解,並且熟悉管理基礎架構和在雲端部署可擴展的解決方案。
在我們深入設定之前,請確保您具備以下條件:
- AWS Lambda 函數:您將使用 EFS 配置的已部署 Lambda 函數。
- EFS 檔案系統:在相同 AWS 區域中建立的彈性檔案系統。
- EFS 存取點:在同一AWS 區域中建立的EFS 存取點,根目錄路徑為/data ,確保正確設定POSIX 權限和目錄建立權限,如下所示,1101 和1001,次要群組ID 1002 和權限0755。
- VPC 和網路:確保 Lambda 函數與 EFS 位於相同 VPC 中,並正確設定子網路和安全群組。
- IAM 權限:您的 Lambda 函數需要存取 EFS 的權限。附加適當的策略(例如,elasticfilesystem:ClientMount、elasticfilesystem:ClientWrite)。
用於安裝軟體包的處理程序代碼
處理程序直接在掛載到 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 查看已安裝的軟體包
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 中安裝的依賴項
更新 Lambda 函數的處理程序以包含安裝在 EFS 上的依賴項,這裡的關鍵是將 efs 中的依賴項路徑掛載到 lambda 處理程序的 PYTHONPATH:
重要提示
所有希望使用已安裝相依性的 Lambda 函數都必須將 EFS 附加到 Lambda。如果沒有此附件,Lambda 將無法存取 EFS 上儲存的所需相依性。
{ "packages": ["requests", "pandas"] }
主要優點
雖然直接在 EFS 中安裝 Python 依賴項並不常見,但在 Lambda 的預設限制(例如 250 MB 解壓縮層大小)受到限制的情況下,它提供了某些優勢。這種方法對於需要使用諸如Pandas、Shapely 和GeoPandas 等繁重庫進行地理空間計算的應用程式特別有用,這些函式庫通常超出層大小限制。
使用 EFS 進行依賴項的好處:
- 繞過 Lambda 層大小限制:安裝和使用庫,無需擔心打包限制。
- 啟用大規模地理空間處理:在無伺服器環境中處理複雜的空間運算。
- 簡化相依性管理:動態新增或更新函式庫,無需重新部署 Lambda 函數。
此解決方案非常適合高級資料處理任務,例如地理空間分析,還可以根據需要輕鬆擴展存儲,同時保持無伺服器架構的靈活性。
以上是使用 EFS 在 AWS Lambda 上安裝 Python 依賴項的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境