You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

serverless离线启用useDocker时Golang Lambda无法被SQS事件触发

问题解决方案

根因说明

该问题是serverless-offline-sqs插件与serverless-offline的useDocker模式存在兼容性问题导致:默认配置下插件触发函数时仅调用本地runtime执行逻辑,没有适配docker运行时的调用路径,同时docker容器默认无法通过localhost访问宿主机上的本地SQS服务。

可行解决方法

  • 配置调整(优先尝试)

    在serverless.yml的custom段新增如下配置,解决网络访问和适配问题:

    custom:
      serverless-offline:
        useDocker: true
        host: 0.0.0.0
      serverless-offline-sqs:
        autoCreate: true
        # 替换为你本地SQS服务的宿主机访问地址,macOS/Windows用host.docker.internal,Linux用172.17.0.1
        endpoint: http://host.docker.internal:9324
        region: us-east-1
        accessKeyId: local
        secretAccessKey: local
    

    注意Golang runtime场景下需将yml内的runtime配置改为go1.x,不要使用nodejs相关runtime。

  • 版本适配

    两套经过验证的兼容版本组合二选一即可:

    1. 低版本稳定组合:
    "dependencies": {
      "serverless-offline": "7.0.0",
      "serverless-offline-sqs": "4.2.0"
    }
    
    1. 高版本修复组合:
    "dependencies": {
      "serverless-offline": "^11.0.0",
      "serverless-offline-sqs": "^7.0.0"
    }
    
  • Golang编译校验

    提前将Golang handler编译为Linux amd64架构的二进制文件,并赋予执行权限,避免docker容器内无法执行:

    GOOS=linux GOARCH=amd64 go build -o [你的handler名称] [代码路径].go
    chmod +x [你的handler名称]
    
  • 临时调试方案

    如果上述方案仍未生效,可以写本地脚本轮询本地SQS队列,收到消息后调用以下命令触发docker模式下的函数执行:

    sls invoke local --useDocker -f [你的函数名] -d '完整的SQS事件JSON'
    

内容的提问来源于stack exchange,提问作者Ivaylo Ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:15:01