AWS Lambda:使用容器映像但仍然找不到程序路径
AWS Lambda: Using container image but still getting program path not found
我已将 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
)。
我已将 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
)。