基于AWS Python Docker镜像的GitLab Pipeline部署Lambda报错排查
AWS Lambda Python镜像部署出现Runtime.ExitError问题
我按照AWS官方文档使用推荐的AWS Python基础镜像构建Lambda镜像,本地POC验证镜像可正常运行,但部署为Lambda函数后调用时抛出错误。使用GitLab Pipeline做CI/CD,Terraform创建Lambda资源。
Dockerfile代码
FROM public.ecr.aws/lambda/python:3.8 # 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}; \ bash -c 'mkdir -p ${LAMBDA_TASK_ROOT}/{services,api} && mkdir -p ${LAMBDA_TASK_ROOT}/services/resources'; \ yum update -y ; \ yum install git -y # Copy function code COPY src/api/lambda_handler.py ${LAMBDA_TASK_ROOT} COPY src/api/constants.py src/api/controller.py src/api/handler.py ${LAMBDA_TASK_ROOT}/api/ COPY src/services/*.py ${LAMBDA_TASK_ROOT}/services/ COPY src/services/resources/dag.py ${LAMBDA_TASK_ROOT}/services/resources/ # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_handler.handler" ]
错误信息
通过API Gateway调用Lambda时,返回错误:
Endpoint response body before transformations: {"errorType":"Runtime.ExitError","errorMessage":"RequestId: a8ebb6f3-sa Error: Runtime exited with error: exit status 1"}
Lambda日志截图:
已尝试操作
- 在Dockerfile的RUN命令中添加
python3.8 -m pip --no-cache-dir install awslambdaric;,但无效果
GitLab Pipeline配置
docker_stage: image: docker:23.0.6 stage: docker_stage services: - docker:23.0.6-dind script: - cd provisioner - apk add python3 - python3 -m ensurepip --upgrade - pip3 install --upgrade pip - pip3 install awscli - docker build -t dbtsample . - docker tag dbtsample:latest <account-id>.dkr.ecr.eu-west-1.amazonaws.com/dbtsample:latest - aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin <account-id>.dkr.ecr.eu-west-1.amazonaws.com - docker push <account-id>.dkr.ecr.eu-west-1.amazonaws.com/dbtsample:latest
Terraform Lambda配置
resource "aws_lambda_function" "api_lambda" { function_name = local.lambda_name timeout = 300 image_uri = "${local.account_id}.dkr.ecr.eu-west-1.amazonaws.com/dbtsample:latest" package_type = "Image" architectures = ["x86_64"] memory_size = 1024 role = aws_iam_role.api_lambda_role.arn vpc_config { security_group_ids = [aws_security_group.security_group_for_lambda.id] subnet_ids = var.subnet_ids } environment { variables = { gitlab_username = var.gitlab_username gitlab_access_token = var.gitlab_access_token } } }
补充说明
- GitLab阶段使用alpine linux镜像,安装的Python版本为3.10,仅用于部署awscli,项目代码基于Python3.8构建,认为此无影响
- 根据建议查看已安装包列表:

请问我还遗漏了什么?
内容的提问来源于stack exchange,提问作者RushHour
相关产品推荐
相关产品推荐

