Python 使用 CDK 将 python 包添加到 aws 层不起作用

Python Add python package to aws layer using CDK not working

提问人:Stephan N. 提问时间:9/20/2023 更新时间:10/27/2023 访问量:65

问:

我正在尝试使用 aws CDK 将 pandas 添加到我的 aws 层,以便我的 aws 函数可以使用此层。但是,在测试 lambda 函数时,我收到以下错误:

{
  "errorMessage": "module 'pandas' has no attribute 'show_versions'",
  "errorType": "AttributeError",
  "requestId": "55a21990-a693-44df-b80c-03f497c4e7ee",
  "stackTrace": [
    "  File \"/var/task/pandas.py\", line 5, in lambda_handler\n    pd.show_versions()\n"
  ]
}

以下是我的项目结构概述:

- project
  - .venv/**
  - stack
    - pandas_stack.py
  - layers
    - python/lib/python3.11/site-packages
  - lambda
    - pandas_lambda.py

在我的pandas_lambda.py中,我有以下代码:

import json
import pandas as pd

def lambda_handler(event, context):
  pd.show_versions()
  return 1

在我的pandas_stack.py中,我有以下代码:

from constructs import Construct
from aws_cdk import (
    Stack,
    aws_lambda as _lambda
)

class PandasStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        lambdaLayer = _lambda.LayerVersion(self, 'lambda-layer',
            code = _lambda.AssetCode('layers/'),
            compatible_runtimes = [_lambda.Runtime.PYTHON_3_11]
        )   

        lambdaFn = _lambda.Function(
            self, 'lambda-function',
            runtime=_lambda.Runtime.PYTHON_3_11,
            code=_lambda.Code.from_asset('lambda'),
            handler='pandas.lambda_handler',
            function_name='lambda_pandas_handler',
            description='Lambda function deployed using AWS CDK Python',
            layers = [lambdaLayer]
        )

我使用以下命令在文件夹中安装的软件包 pandas:layers/python/lib/python3.11/site-packages.venv/bin/pip3 install pandas -t ./layers/python/lib/python3.11/site-packages

我检查了 AWS 管理控制台,以检查我的层是否已正确添加到 AWS Lambda 函数中。碰巧是这种情况:在此处输入图像描述

我下载了 Lambda 层来检查该层的内容。图层的内容是这样的:在此处输入图像描述

不太确定我在这里错过了什么!有人知道出了什么问题吗? 提前致谢!

亚马逊网络服务 aws-lambda aws-cdk aws-lambda 层 python-3.11

评论

0赞 gshpychka 9/20/2023
您可以尝试使用来查看它具有哪些属性。但是切换到构造是个好主意。dirPythonFunction

答:

0赞 Emile Tenezakis 10/27/2023 #1

我建议采用以下两种方法之一:

  • 如前所述,切换到 ,而不是在文件夹中手动安装 pandas,您只需在放入的文件中列出该要求,CDK 即可完成其余工作。PythonFunctionlayerrequirements.txtproject/lambda
  • 如果你坚持你的方法,我会首先检查是否真的在本地正确安装。我会检查.内容是否符合您的期望?您的 lambda 似乎检测到该软件包,但没有检测到其基本功能之一,这表明它没有正确安装。检查 lambda 依赖项的另一种方法是转到控制台(可能也可以在 CLI 上执行),转到 lambda 的页面,然后在“操作”中将 lambda 的 deps 导出到本地的 zip 文件中。然后,您可以检查模块。pandaslayers/python/lib/python3.11/site-packagespandasshow_versionspandas