AWS Lambda:使用容器映像,但仍然没有找到程序路径



我已经配置了AWS Lambda函数来使用容器映像。我已经建立了图像并在ECR中上传了它,并使用此图像来运行lambda函数。我仍然面临错误:

[ERROR] PortScannerError: 'nmap program was not found in path. PATH is : /var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin'
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/app.py", line 36, in <module>
    nmScan = nmap.PortScanner()
  File "/var/task/nmap/nmap.py", line 132, in __init__
    raise PortScannerError(

当我从容器手动运行脚本时,它运行良好。当lambda执行此操作时,我得到上面的错误。

使用以下示例Dockerfile结构创建Dockerfile:

FROM public.ecr.aws/lambda/python:3.8
# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT}
# Install the function's dependencies using file requirements.txt
# from your project folder.
COPY requirements.txt  .
RUN  pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
RUN  yum install -y nmap
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.handler" ] ```
Do I need to specify the ENTRYPOINT?

我终于成功了。

在Lambda函数中,我们可以覆盖ENTRYPOINT、CMD和WORKDIR的值。

因此,我通过传递ENTRYPOINT, CMD和WORKDIR(AWS Lambda默认为/var/task)来进行覆盖。

最新更新