您的位置 首页 编程知识

Dockerized lambda 函数中的相对 Python 导入

相对 导入对于 lambda 函数来说可能很棘手。我三年前写过一篇关于此的博客。但最近,我在 ized lam…

Dockerized lambda 函数中的相对 Python 导入

相对 导入对于 lambda 函数来说可能很棘手。我三年前写过一篇关于此的博客。但最近,我在 ized lambda 函数方面遇到了同样的问题。所以,我想是时候创建一个新博客了!

您可以按照步骤操作或直接在 hub 上查看结果。

项目设置

确保您安装了 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"}' 
登录后复制

结论

相对导入可能很棘手!您需要将代码放入包中。这允许您在自己的包中进行相对导入。这将使代码更加清晰,因为您可以将职责拆分到多个文件中,从而更易于管理和维护。

摄影:kque rocha

以上就是Dockerized lambda 函数中的相对 Python 导入的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/4799.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部