gpt4 book ai didi

python - 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

转载 作者:行者123 更新时间:2023-12-01 00:22:33 25 4
gpt4 key购买 nike

我在 Cloud9 中使用 Python AWS CDK,并且部署一个简单的 Lambda 函数,该函数应该发送 API 请求到 Atlassian 的 API 当对象上传到 S3 存储桶(也由 CDK 创建)时。这是我的 CDK Stack 代码:

from aws_cdk import core
from aws_cdk import aws_s3
from aws_cdk import aws_lambda
from aws_cdk.aws_lambda_event_sources import S3EventSource


class JiraPythonStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)

# The code that defines your stack goes here
jira_bucket = aws_s3.Bucket(self,
"JiraBucket",
encryption=aws_s3.BucketEncryption.KMS)

event_lambda = aws_lambda.Function(
self,
"JiraFileLambda",
code=aws_lambda.Code.asset("lambda"),
handler='JiraFileLambda.handler',
runtime=aws_lambda.Runtime.PYTHON_3_6,
function_name="JiraPythonFromCDK")

event_lambda.add_event_source(
S3EventSource(jira_bucket,
events=[aws_s3.EventType.OBJECT_CREATED]))

lambda 函数代码使用我导入的 requests 模块。但是,当我检查 CloudWatch Logs 并测试 lambda 函数时 - 我得到:

无法导入模块“JiraFileLambda”:没有名为“requests”的模块

我的问题是:如何通过 Python CDK 安装 requests 模块?

I've already looked around online and found this 。但它似乎直接修改了 lambda 函数,这会导致堆栈漂移(有人告诉我这对于 IaaS 来说是不好的)。我也查看了 AWS CDK 文档,但没有找到任何提及外部模块/库的内容(我现在正在对其进行彻底检查)有人知道我如何解决这个问题吗?

编辑: It would appear I'm not the only one looking for this .

Here's another GitHub issue that's been raised.

最佳答案

甚至没有必要使用 CDK 中的实验性 PythonLambda 功能 - CDK 内置支持将依赖项构建到简单的 Lambda 包(而不是 docker 镜像)中。它使用 docker 进行构建,但最终结果仍然是一个简单的文件压缩包。文档显示如下:https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-readme.html#bundling-asset-code ;要点是:

new Function(this, 'Function', {
code: Code.fromAsset(path.join(__dirname, 'my-python-handler'), {
bundling: {
image: Runtime.PYTHON_3_9.bundlingImage,
command: [
'bash', '-c',
'pip install -r requirements.txt -t /asset-output && cp -au . /asset-output'
],
},
}),
runtime: Runtime.PYTHON_3_9,
handler: 'index.handler',
});

我在我的 CDK 部署中使用了这个确切的配置,并且效果很好。

对于 Python 来说,这很简单

aws_lambda.Function(
self,
"Function",
runtime=aws_lambda.Runtime.PYTHON_3_9,
handler="index.handler",
code=aws_lambda.Code.from_asset(
"function_source_dir",
bundling=core.BundlingOptions(
image=aws_lambda.Runtime.PYTHON_3_9.bundling_image,
command=[
"bash", "-c",
"pip install --no-cache -r requirements.txt -t /asset-output && cp -au . /asset-output"
],
),
),
)

关于python - 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58855739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com