Man*_*ake 8 python docker aws-lambda
我是 lambda 新手,其中尝试将 lambda 与 docker 图像一起使用。我需要使用我自己的 docker 镜像作为基础镜像,而不是 aws 提供的 lambda 镜像。下面是我的 docker 文件,基本映像是python:3.9.6。但是,当我尝试执行 lambda 函数时,出现以下错误。
我指的是下面的链接来执行下面的实现。AWS 文档链接
# Define function directory
ARG FUNCTION_DIR="/function/"
FROM python:3.9.6 as build-image
# Install aws-lambda-cpp build dependencies
RUN apt-get update && \
apt-get install -y \
g++ \
make \
cmake \
unzip \
libcurl4-openssl-dev
# Include global arg in this stage of the build
ARG FUNCTION_DIR
# Create function directory
RUN mkdir -p ${FUNCTION_DIR}
# Copy function code
COPY app/* ${FUNCTION_DIR}
# Install the runtime interface client
RUN pip install \
--target ${FUNCTION_DIR} \
awslambdaric
# Multi-stage build: grab a fresh copy of the base image
FROM python:3.9.6
# Include global arg in this stage of the build
ARG FUNCTION_DIR
# Set working directory to function root directory
WORKDIR ${FUNCTION_DIR}
# Copy in the build image dependencies
COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR}
ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
CMD [ "lambda_function.lambda_handler" ]
Run Code Online (Sandbox Code Playgroud)
错误
raceback (most recent call last):
File "/usr/local/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/local/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/function/awslambdaric/__main__.py", line 20, in <module>
main(sys.argv)
File "/function/awslambdaric/__main__.py", line 14, in main
lambda_runtime_api_addr = os.environ["AWS_LAMBDA_RUNTIME_API"]
File "/usr/local/lib/python3.10/os.py", line 679, in __getitem__
raise KeyError(key) from None
KeyError: 'AWS_LAMBDA_RUNTIME_API'
Run Code Online (Sandbox Code Playgroud)
有人之前遇到过这个问题吗?我们该如何解决呢?
如果我是正确的,您正在构建一个自定义的 docker 镜像。
如果您想在本地进行测试,则需要使用运行时接口仿真器 (RIE)。
我遇到了类似的问题并通过测试图像AWS文档解决了它
您需要在构建中添加 RIE:
RUN mkdir -p ~/.aws-lambda-rie && curl -Lo ~/.aws-lambda-rie/aws-lambda-rie \
https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie \
&& chmod +x ~/.aws-lambda-rie/aws-lambda-rie
Run Code Online (Sandbox Code Playgroud)
并更改入口点:
ENTRYPOINT [ "~/.aws-lambda-rie/aws-lambda-rie","/usr/local/bin/python", "-m", "awslambdaric" ]
Run Code Online (Sandbox Code Playgroud)
请注意,此实例无法在 lambda 中工作,而只能在文档中建议的模拟中工作。
docker 镜像构建完成后,您可以启动它:
RUN mkdir -p ~/.aws-lambda-rie && curl -Lo ~/.aws-lambda-rie/aws-lambda-rie \
https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie \
&& chmod +x ~/.aws-lambda-rie/aws-lambda-rie
Run Code Online (Sandbox Code Playgroud)
然后您可以尝试发送测试请求:
ENTRYPOINT [ "~/.aws-lambda-rie/aws-lambda-rie","/usr/local/bin/python", "-m", "awslambdaric" ]
Run Code Online (Sandbox Code Playgroud)
小智 2
如果您真的在 AWS 文档中寻找,他们建议使用它作为创建自定义 docker 映像的框架:https ://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/
您必须安装一个附加文件https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie,然后设置一个脚本entry.sh并且它可以工作
| 归档时间: |
|
| 查看次数: |
8388 次 |
| 最近记录: |