相对 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
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
视觉化网页开发工具

Dreamweaver Mac版
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器