> aws lambda層是能夠與不同的lambdas重複使用代碼的好方法。我已經看到了許多有關如何為現有的PIP軟件包創建層的教程,但是沒有那麼多解釋如何使用自己的代碼來進行操作並允許您與lambda一起進行調試。在我的情況下,您可以使用此層有幾層和幾個lambdas,並沿模擬AWS環境調試Lambdas和層的代碼。我將假設您已經擁有使用其template.yml創建的lambda函數。如果不是,請查看以下文章,以了解如何創建lambda https://docs.aws.amazon.com/lambda/lambda/latest/dg/getting-started.html。創建它後,您可以將其下載為zip文件,然後從那裡提取代碼和template.yml。
準備您的層
首先,我們需要設置該圖層的文件夾結構。我喜歡創建一個稱為layers的文件夾,每一層都創建自己的文件夾。 AWS lambda需要該圖層的特定文件夾結構,其中每個層的代碼位於Python/文件夾中。有關此信息的更多信息,請參見以下鏈接。 https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html
我們的圖層將稱為layer_utils。然後,我們將一個文件夾layer_utils放入Python文件夾中,內部我們創建文件request_handler.py和processor.py和代碼。我們還需要一個init
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py> request_handler.py將接收帶有URL的請求,並致電將使用庫請求獲取數據並返回數據的處理器。
./ layers/layer_utils/python/layer_utils/processor.py.py
import requests def process_data(url): """ Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. """ try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f"Error fetching data: {str(e)}"
./ layers/layer_utils/python/layer_utils/request_handler.py
from layer_utils.processor import process_data def handle_request(request): """ Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. """ # Example: Extract 'url' from the request and process it if "url" not in request: return {"error": "Missing 'data' in request"} data = request["url"] processed_result = process_data(data) return {"result": processed_result}>在這裡,重要的是要注意如何通過從layer_utils.processor導入process_data而不是從processor import import import process_data導入處理器函數。使用絕對路徑有助於以後避免導入錯誤。
包裝您的層
好的,現在我們創建了層代碼。但是我們還沒有完成。我們現在需要使用PIP創建一個可編輯的軟件包,因此可以通過Lambda代碼使用。我們將遵循PEP 660風格。我們需要創建兩個文件:需求.txt和pyproject.toml。在這種情況下,第一個將包括我們所需的所有外部庫。第二個是我們需要使用PIP創建一個可編輯軟件包的文件,並確保安裝所有依賴關係。這允許編輯圖層代碼而無需不斷重新包裝(我們需要調試)。
>這是樹的外觀
>
PIP將使用Pyproject.toml使用我們的圖層來創建軟件包。
./ layers/layer_utils/python/python/pyproject.toml
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
在此文件中,Setuptools軟件包對於創建軟件包來說是必需的,並且使用車輪軟件包將代碼包裝到可分佈的格式中。
> the要求。 txt指示我們的圖層所需的所有外部模塊。在我們的情況下,我們只需要請求模塊,但是您可以在必要時添加盡可能多的模塊。
./ layers/layer_utils/python/sumpliont.txt
import requests def process_data(url): """ Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. """ try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f"Error fetching data: {str(e)}">我認為重要的是要跟踪您使用的包裝的哪個版本,因為您的外部軟件包將通過直接從AWS調用AWS lambda層資源來導入您的外部軟件包。如果直接通過直接從Python環境運行Lambda而不是使用SAM Local Invoke或Sam Local Start-API來直接在系統上調試,則需要確保使用PIP安裝的本地軟件包與已部署的本地套件相同層中的包裝。我不會解釋如何創建外部圖層,因為有很多好的教程(例如,此https://www.keyq.cloud/en/blog/creating-an-an-aws-an-aws-lambda-layer- for- Python-Requests-Module
)。
現在,讓我們創建一個虛擬環境。這不是必需的,但是建議它隔離依賴關係並確保Python環境與Lambda將使用的環境一致。為此,在您的項目dir的控制台中,輸入
from layer_utils.processor import process_data def handle_request(request): """ Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. """ # Example: Extract 'url' from the request and process it if "url" not in request: return {"error": "Missing 'data' in request"} data = request["url"] processed_result = process_data(data) return {"result": processed_result}>第一個使Python使用-M VENV運行VENV模塊,並創建一個稱為VENV的虛擬環境。
第二個通過調用運行虛擬環境激活腳本的內置命令源來激活虛擬環境。如果您使用的是Visual Studio代碼,則可能會提示您切換到虛擬環境。是的。
之後,您應該在外殼中看到類似的東西。
>
└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt(VENV)一開始表明您在虛擬環境中。
有時,我喜歡直接使用SAM工具來調試運行Python文件(因為它更快)。為此,我將在虛擬環境上安裝所有外部軟件包,以便我可以在本地使用它們進行開發和調試。
>
[project] name = "layer_utils" version = "0.1.0" [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
我們現在需要打包該層,因此我們的lambda可以找到該層作為Python軟件包。
requests==2.32.2
偵錯
好吧,現在讓我們看看我們將如何調試。這是我的文件夾結構,帶有圖層和lambdas。
>
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
這是我的lambda
的代碼
import requests def process_data(url): """ Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. """ try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f"Error fetching data: {str(e)}"
您可以運行文件,並且應該獲得沒有錯誤的有效結果。
>如果您使用的是帶有Pylance的Visual Studio代碼,您可能會發現即使代碼有效,該圖層的導入也無法解決。
為了解決此問題,您可以編輯工作空間的設置。 DO Control/Command Shift P,輸入首選項:打開工作區設置(JSON),並在括號內添加以下內容(如果您有更多的Extroapaths,只需添加路徑)
from layer_utils.processor import process_data def handle_request(request): """ Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. """ # Example: Extract 'url' from the request and process it if "url" not in request: return {"error": "Missing 'data' in request"} data = request["url"] processed_result = process_data(data) return {"result": processed_result}
將圖層添加到堆棧中
我們現在需要在lambdas template.yml上設置圖層。我們需要在資源中添加以下內容:部分(根據您的項目調整內容)
> ./ lambdas/mylambda/template.yml>
└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt另外,您需要在文件
>的lambda部分上引用該圖層。
[project] name = "layer_utils" version = "0.1.0" [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"與山姆調試
>讓我們對此進行測試。讓我們先構建它。我從與位置的不同路徑構建模板方面遇到了問題,因為在模板中,有關於源代碼所在位置的指示。為了避免這種情況,我建議直接從模板文件的路徑構建它。
>
>這將建立所有必要的依賴關係。
requests==2.32.2>現在我們可以調用它。我創建了一個事件文件來測試lambda
./ lambdas/mylambda/events/event.json
>現在我們可以調用調試文件。請記住,您需要為此安裝並運行Docker。同樣,請記住從模板文件所在的地方調用此。
python3.12 -m venv venv source venv/bin/activate
>這將在template.yml上調用函數。 -d標誌表示調試端口為5678。 -E標誌指示將提交給lambda的事件文件在哪裡。
將您的lambda和圖層部署到AWS
>現在,通過將代碼部署到AWS。
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
設置VSCODE進行調試
如果您想使用VSCODE進行調試,設置斷點等,我們需要執行一些額外的步驟。
我們需要添加調試配置。為此,請執行控制/命令換檔P並輸入調試:添加配置。 ...這將打開啟動。 JSON文件。您需要在此處添加配置。
>我們正在使用將附加到SAM Local Invoke的Debugpy,在這裡我們設置了使用-D標誌調用時看到的端口5678。確保Localroot指向Lambda代碼所在的目錄。如果您有更多配置,請將配置中的零件添加到列表中。
import requests def process_data(url): """ Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. """ try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f"Error fetching data: {str(e)}">我們將需要調試庫進行調試。讓我們首先將其添加到您的lambda
> txt的要求中。
./ lambdas/mylambda/supiends.txt
現在,讓我們與PIP
from layer_utils.processor import process_data def handle_request(request): """ Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. """ # Example: Extract 'url' from the request and process it if "url" not in request: return {"error": "Missing 'data' in request"} data = request["url"] processed_result = process_data(data) return {"result": processed_result}
>您也可以通過要求安裝它。 TXT文件
└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt
>我們需要創建一個環境文件,在其中我們可以定義一個AWS_SAM_LOCAL環境變量,該變量將告訴我們的圖層它在本地運行。我們在工作區文件夾上創建一個文件.ENV。
[project] name = "layer_utils" version = "0.1.0" [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"
./
>在這裡,我們定義AWS_SAM_LOCAL,以便Lambda知道通過AWS SAM在本地運行的Lambda。
>我們還需要告訴我們的Python環境,它需要使用環境文件中的環境變量。這就是應該看起來像
>
>最後,我們需要修改我們的lambda代碼,以便知道在本地運行時需要將其附加到調試器。在文件的開始,我們將添加以下代碼
python3.12 -m venv venv source venv/bin/activate./ lambdas/mylambda/src/lambda_function.py >
現在,我們調用函數(再次,從函數的路徑中):
>
(venv) usar@MacBookPro my-lambda-project當控制台顯示等待調試器附加...,按F5或選擇python調試器:使用linaign.json
調試時
pip3 install -r ./layers/layer_utils/python/requirements.txt
>現在您準備好調試本地層和lambdas!
>以上是創建,調試和部署您的代碼作為可重複使用的AWS lambda層的詳細內容。更多資訊請關注PHP中文網其他相關文章!

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中