【问题标题】:Library error on docker container (AWS Lambda)docker 容器 (AWS Lambda) 上的库错误
【发布时间】:2021-11-10 13:53:30
【问题描述】:

我希望使用加载在 AWS ECR 上的 Docker 容器在 AWS Lambda 上执行 python 脚本。 我已经设法从他们推荐用于 python 脚本的亚马逊图像开始创建一个 docker 容器。这是 Dockerfile:


# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT}
COPY config.py ${LAMBDA_TASK_ROOT}
COPY abort_occurrance.txt ${LAMBDA_TASK_ROOT}
COPY actions_logging.txt ${LAMBDA_TASK_ROOT}
COPY execution_log.txt ${LAMBDA_TASK_ROOT}
COPY warning_job_occurrance.txt ${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}"

CMD ["app.py"]
ENTRYPOINT ["python3"] 

如此处所示,app.py 是我的脚本,必须在容器启动时运行。 创建映像后,我可以轻松地在本地机器上启动我的容器,但是当我将它加载到 AWS ECR 并将其链接到 AWS Lambda 时,它就无法工作了。 这是 CloudWatch 上返回的错误:

Traceback (most recent call last):
File "app.py", line 2, in <module>
from exchangelib import Credentials, Account
File "/var/task/exchangelib/__init__.py", line 3, in <module>
from .account import Account, Identity
File "/var/task/exchangelib/account.py", line 12, in <module>
from .folders import Folder, AdminAuditLogs, ArchiveDeletedItems, ArchiveInbox, ArchiveMsgFolderRoot, \
File "/var/task/exchangelib/folders/__init__.py", line 16, in <module>
from .roots import Root, ArchiveRoot, PublicFoldersRoot, RootOfHierarchy
File "/var/task/exchangelib/folders/roots.py", line 17, in <module>
class RootOfHierarchy(BaseFolder, metaclass=EWSMeta):
File "/var/task/exchangelib/folders/roots.py", line 26, in RootOfHierarchy
_subfolders_lock = Lock()
File "/var/lang/lib/python3.8/multiprocessing/context.py", line 68, in Lock
return Lock(ctx=self.get_context())
File "/var/lang/lib/python3.8/multiprocessing/synchronize.py", line 162, in __init__
SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx)
File "/var/lang/lib/python3.8/multiprocessing/synchronize.py", line 57, in __init__
sl = self._semlock = _multiprocessing.SemLock(
OSError: [Errno 38] Function not implemented
START RequestId: f8056c6e-9ca4-4aba-a1aa-191dca52ea35 Version: $LATEST
END RequestId: f8056c6e-9ca4-4aba-a1aa-191dca52ea35
REPORT RequestId: f8056c6e-9ca4-4aba-a1aa-191dca52ea35  Duration: 3003.57 ms    Billed Duration: 3000 ms    Memory Size: 128 MB Max Memory Used: 22 MB  
2021-09-15T12:52:25.585Z f8056c6e-9ca4-4aba-a1aa-191dca52ea35 Task timed out after 3.00 seconds

一个容器怎么可能在本地 docker 上工作,但是当我在 lambda 上测试它时它不起作用?

谢谢

【问题讨论】:

    标签: python amazon-web-services docker aws-lambda exchangelib


    【解决方案1】:

    Lambda 不支持所有运行时的并行处理。这可能是它在本地工作但在 lambda 中不起作用的原因。

    https://aws.amazon.com/blogs/compute/parallel-processing-in-python-with-aws-lambda/

    【讨论】:

    • 您的提示使我找到了解决方案。要在 AWS Lambda 上使用 exchangelib,必须使用 3.2.0 版本,而不是可用的最新版本。
    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 2021-11-01
    • 2018-01-19
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多