[英]Cannot install a library in lambda layer and use it in lambda layer custom script
我正在使用 CDK python 部署一个 lambda function。
这是我的 lambda 堆栈:
import os
from aws_cdk import (
aws_stepfunctions as _aws_stepfunctions,
aws_stepfunctions_tasks as _aws_stepfunctions_tasks,
aws_lambda,
App, Duration, Stack,
aws_ec2 as ec2,
aws_sns as sns,
aws_sns_subscriptions as sns_subs,
aws_iam as iam,
)
class LambdaStack(Stack):
def __init__(self, app: App,
id: str,
upload_image_bucket,
**kwargs) -> None:
super().__init__(app, id, **kwargs)
schema_response_layer = aws_lambda.LayerVersion(self, 'lambda-layer',
code = aws_lambda.AssetCode('lambdas/lambda_layers/schema_response_layer/'),
compatible_runtimes = [aws_lambda.Runtime.PYTHON_3_9],
layer_version_name="schema_response_layer"
)
policy_textract = iam.PolicyStatement( # Restrict to listing and describing tables
actions=[ "textract:AnalyzeDocument",
"textract:DetectDocumentText",
"textract:GetDocumentAnalysis",
"textract:GetDocumentTextDetection",
"textract:AnalyzeExpense"],
resources=["*"]
)
store_image = aws_lambda.Function(
self, 'store_imagey',
function_name="storage_image_test_1",
runtime=aws_lambda.Runtime.PYTHON_3_9,
code=aws_lambda.Code.from_asset('lambdas/lambda_functions/store_image'),
handler='store_image.store_image_handler',
environment={
'BUCKET_NAME': upload_image_bucket.bucket_name,
},
initial_policy=[policy_textract],
layers=[schema_response_layer]
)
upload_image_bucket.grant_read_write(store_image)
self.store_image_ld = store_image
如您所见,我正在创建一个 lambda 层,我想在我的 store_image function 中使用它。
我可以使用此导入毫无问题地导入此 lambda 层:
from response_schema import Response
这是我的层 python 代码:
from pydantic import BaseModel, Field, validator
class Headers(BaseModel):
content_type: str = "application/json"
access_control: str = "*"
allow = "GET, OPTIONS, POST"
access_control_allow_methods: str = "*"
access_control_allow_headers: str = "*"
class Response(BaseModel):
status_code: str = "200"
body: str
headers: Headers = Headers()
我收到以下错误:
Runtime.ImportModuleError: Unable to import module 'store_image': No module named 'pydantic'
我不知道如何在我的 lambda 层中安装 pydantic 库并在 lambda 层代码中使用该库。
lambda层结构文件夹为:
在requirements.txt
文件中我有:
pydantic==1.10.4
但似乎没有在我的 lambda 层中安装 pydantic 库。 我尝试使用以下方法将库安装在 lambda 图层文件夹中:
pip install -t . pydantic==1.10.4
但是也不起作用。
如何在我的 lambda 层中安装库并在我的 lambda 层自定义脚本中使用它?
如果要从 requirements.txt 文件安装 Python 包,可以使用aws_cdk.aws_lambda_python_alpha.PythonFunction构造。 在这种情况下,您需要将 LayerVersion 构造替换为PythonLayerVersion构造。
如果要使用 Function 和 LayerVersion 构造,则需要将库下载到项目中。 您可以将本文作为参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.