使用CDK以容器方式部署Amazon Lambda失败问题求助
Lambda容器部署预配置并发失败(关联OpenTelemetry环境变量)
问题详情
用AWS CDK部署Docker容器到Lambda时,只要Dockerfile中保留ENV OPENTELEMETRY_COLLECTOR_CONFIG_FILE=/opt/opentelemetry-collector.yaml这个环境变量,执行cdk deploy "*Dev"就会触发预配置并发失败的错误:
2:35:17 PM | UPDATE_FAILED | AWS::Lambda::Alias | SOptimL...ambdaAlias633C Resource handler returned message: "Provisioned Concurrency configuration failed to be applied. Reason: FAILED" (RequestToken: 14efcc75-7xxxxx-xxxx2-e7a1dbf53246, HandlerErrorCode: NotStabilized)
移除该环境变量后,部署完全正常。Dockerfile完整内容如下:
FROM public.ecr.aws/lambda/python:${PYTHON_VERSION} ENV OPENTELEMETRY_COLLECTOR_CONFIG_FILE=/opt/opentelemetry-collector.yaml RUN mkdir -m 755 -p /opt/extensions COPY --from=lambda-layer-builder /tmp/layer /opt/ COPY ./opentelemetry-collector.yaml /opt/opentelemetry-collector.yaml WORKDIR ${LAMBDA_TASK_ROOT} COPY --from=builder ${LAMBDA_TASK_ROOT} . CMD ["api.handler"]
排查方向与解决办法
1. 检查OpenTelemetry扩展初始化超时
预配置并发会提前启动并初始化Lambda实例,当设置该环境变量后,OTel扩展会加载配置文件,如果初始化耗时超过Lambda预配置的超时阈值,就会导致失败:
- 简化
opentelemetry-collector.yaml配置,暂时去掉非必要的处理器、导出器,测试是否能正常部署; - 确认/opt目录下的OTel扩展二进制文件有执行权限(Dockerfile里已经设置了755权限,可再检查layer内文件权限);
- 在CDK的Lambda配置中,调高预配置并发的初始化超时时间(上限10分钟)。
2. 验证配置文件的正确性
可能存在配置文件路径错误或格式问题,导致扩展加载失败:
- 用
yamllint工具检查YAML格式是否合法; - 本地模拟Lambda运行环境(比如拉取对应镜像手动运行),检查
/opt/opentelemetry-collector.yaml是否存在且能被读取,OTel扩展是否能正常启动。
3. 调整环境变量设置方式
尝试把环境变量从Dockerfile移到CDK的Lambda配置中,不在镜像内置环境变量:
// 示例CDK代码(TypeScript) const lambdaFn = new lambda.DockerImageFunction(this, 'MyLambda', { code: lambda.DockerImageCode.fromImageAsset(path.join(__dirname, 'docker')), environment: { OPENTELEMETRY_COLLECTOR_CONFIG_FILE: '/opt/opentelemetry-collector.yaml' }, provisionedConcurrency: 5 // 你的预配置并发数 });
4. 更新OTel扩展版本
部分旧版本的OTel Lambda扩展和预配置并发存在兼容性问题,更新到最新稳定版本再测试。
内容的提问来源于stack exchange,提问作者Saad
相关产品推荐
相关产品推荐

