相對 Python 匯入對於 lambda 函數來說可能很棘手。我三年前寫過一篇關於此的部落格。但最近,我在 Dockerized lambda 函數方面遇到了同樣的問題。所以,我想是時候創建一個新部落格了!
您可以按照步驟操作或直接在 GitHub 上查看結果。
項目設定
確保您安裝了 AWS CDK cli。
brew install aws-cdk
初始化項目:
cdk init app --language=typescript
拉姆達設定
首先我們需要建立檔案和資料夾結構:
mkdir -p lib/functions/hello-world/hello_world touch lib/functions/hello-world/hello_world/__init__.py touch lib/functions/hello-world/requirements.txt touch lib/functions/hello-world/Dockerfile
現在您需要填寫 Dockerfile,如下所示:
FROM public.ecr.aws/lambda/python:3.12 COPY requirements.txt . COPY hello_world ${LAMBDA_TASK_ROOT}/hello_world RUN pip install --no-cache-dir -r requirements.txt CMD ["hello_world.handler"]
我們使用的是基於 Python 3.12 的 Python 基礎鏡像。接下來,我們將複製requirements.txt 檔案和原始碼。我們將安裝requirements.txt 檔案中列出的所有依賴項,並確保處理程序方法設定為CMD。
接下來,我們需要用一些程式碼填入 Python 檔案。在__init__.py檔案中,可以放置以下內容:
from typing import Dict, Any def handler(event: Dict[str, Any], context: Any) -> Dict[str, str]: name = event.get("name", "World") return { "Name": name, "Message": f"Hello {name}!", } __all__ = [ "handler" ]
注意:此處使用的程式碼可以使用相對導入。這是可能的,因為它位於單獨的包中。此範例僅顯示 __init__.py 檔案中的程式碼。不過,您可以在此處使用多個文件來提高專案的可維護性。
對於這個例子,我不需要任何依賴項,因此我們可以將requirements.txt 檔案保留為空。我將其包含在本範例中是為了說明如何包含依賴項。
使用 IaC 建立 Lambda 函數
我們的資料夾和檔案已就位,因此是時候將 Lambda 函數添加到 CDK 構造中了。您可以像這樣簡單地添加它:
new lambda.Function(this, 'Function', { functionName: "hello-world", code: lambda.Code.fromAssetImage("lib/functions/hello-world", { platform: ecr_assets.Platform.LINUX_ARM64, }), runtime: lambda.Runtime.FROM_IMAGE, handler: lambda.Handler.FROM_IMAGE, architecture: lambda.Architecture.ARM_64, timeout: cdk.Duration.seconds(15), memorySize: 128, });
要使其工作,您還需要以下導入:
import * as lambda from 'aws-cdk-lib/aws-lambda'; import * as ecr_assets from 'aws-cdk-lib/aws-ecr-assets';
請注意,我們確保程式碼目錄指向包含 Dockerfile 的目錄,並且我們為程式碼和函數本身選擇 ARM 平台。
本地測試 lambda 函數
快速回饋很重要,因此在某些情況下您可能需要在本地運行容器。為此,您首先需要建立容器:
docker build --platform linux/arm64 \ -t hello-world:latest \ -f ./lib/functions/hello-world/Dockerfile \ ./lib/functions/hello-world
請注意,該指令可以從專案的根目錄執行。接下來,我們需要確保它正在運行,然後才能呼叫它:
docker run --platform linux/arm64 -p 9000:8080 hello-world:latest
之後,您可以如下呼叫該函數:
curl http://localhost:9000/2015-03-31/functions/function/invocations -d '{"name": "Joris"}'
結論
相對導入可能很棘手!您需要將代碼放入包中。這允許您在自己的包中進行相對導入。這將使程式碼更加清晰,因為您可以將職責拆分到多個文件中,從而更易於管理和維護。
攝影:Kaique Rocha
以上是Dockerized lambda 函數中的相對 Python 導入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

toAppendElementStoApythonList,usetheappend()方法forsingleements,Extend()formultiplelements,andinsert()forspecificpositions.1)useeAppend()foraddingoneOnelementAttheend.2)useextendTheEnd.2)useextendexendExendEnd(

TocreateaPythonlist,usesquarebrackets[]andseparateitemswithcommas.1)Listsaredynamicandcanholdmixeddatatypes.2)Useappend(),remove(),andslicingformanipulation.3)Listcomprehensionsareefficientforcreatinglists.4)Becautiouswithlistreferences;usecopy()orsl

金融、科研、医疗和AI等领域中,高效存储和处理数值数据至关重要。1)在金融中,使用内存映射文件和NumPy库可显著提升数据处理速度。2)科研领域,HDF5文件优化数据存储和检索。3)医疗中,数据库优化技术如索引和分区提高数据查询性能。4)AI中,数据分片和分布式训练加速模型训练。通过选择适当的工具和技术,并权衡存储与处理速度之间的trade-off,可以显著提升系统性能和可扩展性。

pythonarraysarecreatedusiseThearrayModule,notbuilt-Inlikelists.1)importThearrayModule.2)指定tefifythetypecode,例如,'i'forineizewithvalues.arreaysofferbettermemoremorefferbettermemoryfforhomogeNogeNogeNogeNogeNogeNogeNATATABUTESFELLESSFRESSIFERSTEMIFICETISTHANANLISTS。

除了shebang線,還有多種方法可以指定Python解釋器:1.直接使用命令行中的python命令;2.使用批處理文件或shell腳本;3.使用構建工具如Make或CMake;4.使用任務運行器如Invoke。每個方法都有其優缺點,選擇適合項目需求的方法很重要。

ForhandlinglargedatasetsinPython,useNumPyarraysforbetterperformance.1)NumPyarraysarememory-efficientandfasterfornumericaloperations.2)Avoidunnecessarytypeconversions.3)Leveragevectorizationforreducedtimecomplexity.4)Managememoryusagewithefficientdata

Inpython,ListSusedynamicMemoryAllocationWithOver-Asalose,而alenumpyArraySallaySallocateFixedMemory.1)listssallocatemoremoremoremorythanneededinentientary上,respizeTized.2)numpyarsallaysallaysallocateAllocateAllocateAlcocateExactMemoryForements,OfferingPrediCtableSageButlessemageButlesseflextlessibility。

Inpython,YouCansspecthedatatAtatatPeyFelemereModeRernSpant.1)Usenpynernrump.1)Usenpynyp.dloatp.dloatp.ploatm64,formor professisconsiscontrolatatypes。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

SublimeText3 Linux新版
SublimeText3 Linux最新版

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

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

Dreamweaver Mac版
視覺化網頁開發工具