我们使用生活在Lambda函数中的Python3框架创建了一个Lambda。整个API和实用程序函数都位于一个API中。我知道更好的做法是把它分解成几个较小的Lambda函数,更多的是按照每条路线都属于它自己的功能,但这就是现在的情况。
我们希望重新设计这个API,这样它就不会全部部署在单一的Lambda上,以及其他的更改上,但是我们需要做一些基准测试,以查看在进行更改时性能上的哪些改进或回归。
为了方便这种基准测试,我添加了一些OpenTelemetry包,以添加我们可以在AWS中使用的工具。问题是,将这些包添加到一个层中,会使其超过250 it的大小限制。
我已经尝试通过使用CFLAGS和一些pip选项来减少包的大小,并且它可以减少足够的大小,但是当部署时它就不能工作了。如果在CloudWatch中出现以下错误,它将失败
[ERROR] Runtime.ImportModuleError: Unable to import module 'app': libc.musl-x86_64.so.1: cannot open shared object file: No such file or directory
我遵循本教程用于缩小包的大小,并使用以下命令在CI/CD管道CFLAGS="-g0 -Wl,--strip-all -I/usr/include:/usr/local/include -L/usr/lib:/usr/local/lib" pip3 install -r requirements.txt -t layer/python --no-cache-dir --compile --global-option=build_ext --global-option='-j 4'中构建依赖层
我的requirements.txt文件如下所示
internal-team-package-1
internal-team-package-2
boto3 >= 1.14, < 2.0
botocore >= 1.15, < 2.0
fastapi >= 0.60, < 1.0
pydantic >= 1.6, < 2.0
packaging >= 21.0, < 22.0
mangum >= 0.9, < 1.0
python-jose >= 3.2, < 4.0
requests >= 2.22, < 3.0
ulid-py >= 1.1, < 2.0
jsonmerge == 1.8
opentelemetry-sdk-extension-aws~=2.0
opentelemetry-propagator-aws-xray~=1.0
opentelemetry-exporter-otlp~=1.5
opentelemetry-instrumentation-fastapi==0.30b0
opentelemetry-instrumentation-botocore==0.30b0
opentelemetry-api
opentelemetry-sdk这两个内部包相当小,它们没有不存在于此需求文件中的依赖项。
这仅仅是从命令中删除这些标志之一的问题吗?我试过移除一些旗子,但我真的不明白,读到它们也没有帮助,所以我几乎是随意地降下旗子,也没有看到任何修复方法。
为了获得跟踪,我可能只是将API封装起来,因为这是我考虑对API进行改进的一条路线,但我不希望我的工作范围太大,并且希望在添加工具之后进行容器化。
更多信息:
发布于 2022-04-26 21:59:42
为什么不为Python https://aws-otel.github.io/docs/getting-started/lambda/lambda-python (压缩大小~14‘t)使用AWS托管OTEL层?
是的,它只适用于Python3.8和amd/arm结构,也适用于较早的库版本。但是它是AWS管理和支持层。在最坏的情况下,您可以基于AWS源代码- https://github.com/aws-observability/aws-otel-lambda/tree/main/python构建自己的版本。
无论如何,当您有这么多依赖项时,您仍然可以使用多个层,而不仅仅是单个层。
https://stackoverflow.com/questions/71979311
复制相似问题