Localstack环境下SQS无法触发Lambda问题排查求助
问题原因
你遇到的invalid reference formatDocker报错核心是创建Lambda函数时未指定自定义镜像的包类型,LocalStack默认按Zip包类型尝试拉取通用Lambda运行时镜像,出现了镜像引用格式错误。
具体问题点:
- 创建Lambda命令缺少包类型参数:你使用自定义容器镜像部署Lambda,需要在
aws lambda create-function命令中添加--package-type Image参数,否则AWS CLI(包括LocalStack适配的CLI)会默认认为你是上传Zip格式的代码包,会去匹配对应runtime的公共镜像,而非使用你指定的ImageUri。 - 日志中
Running container with image: lambci/lambda:的空标签记录也验证了这个问题,LocalStack因为没有获取到正确的镜像配置,生成了非法的镜像引用地址。
额外预检查
执行修复前确认以下配置正确:
- 你已经提前在本地构建了
python-lambda-test:latest镜像,LocalStack需要访问本地的这个镜像才能创建Lambda容器 - 你当前docker-compose里的
LAMBDA_REMOTE_DOCKER=false配置是正确的,该配置保证LocalStack会使用本地Docker镜像而非远程拉取
修复步骤
- 先删除你之前创建的错误Lambda函数:
aws --endpoint http://localhost:4566 lambda delete-function --function-name python-lambda-test
- 重新执行带正确参数的Lambda创建命令:
aws --endpoint http://localhost:4566 lambda create-function --timeout 120 --function-name python-lambda-test --package-type Image --code ImageUri=python-lambda-test:latest --role arn:aws:iam::000000000:role/lambda-ex
注意:使用自定义容器镜像部署Lambda时,
--handler参数无需指定,因为镜像的CMD已经配置了入口,指定反而可能出现冲突。
- 其余SQS队列创建、事件源映射、发送测试消息的命令无需修改,重新执行测试即可。
内容的提问来源于stack exchange,提问作者Renato Ramos Nascimento
相关产品推荐
相关产品推荐

