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

如何在Golang多模块项目中从SAM模板目录外执行invoke?

解决Golang多模块项目SAM local invoke找不到bootstrap的问题

1. 问题根源

当你用sam build -t tests/helloworld/template.yaml构建时,产物默认生成在当前工作目录的.sam/build下,但执行sam local invoke时,SAM会默认以模板所在的tests/helloworld/作为工作目录,导致无法找到上层目录的构建产物,进而缺失/var/task/bootstrap文件(Go Lambda运行时的入口文件)。

2. 可行解决方案

方案一:绑定构建目录到模板所在路径

执行build时,通过--build-dir参数指定构建产物输出到模板目录下,让invoke时能正确匹配路径:

sam build -t tests/helloworld/template.yaml --build-dir tests/helloworld/.sam/build

之后直接执行invoke:

sam local invoke -t tests/helloworld/template.yaml

方案二:直接使用build生成的模板文件

build完成后,.sam/build/目录下会生成一个包含正确代码路径的模板文件,直接用它执行invoke:

sam local invoke -t .sam/build/template.yaml

注:此方法需确保已执行过sam build -t tests/helloworld/template.yaml。

方案三:检查并修正SAM模板配置

确保模板中Go函数的配置符合要求:

  • CodeUri需填写相对于模板文件的应用模块路径(比如你的应用在根目录helloworld/,模板在tests/helloworld/,则CodeUri设为../../helloworld/)
  • Runtime设为provided.al2,Handler设为bootstrap
  • Metadata里的BuildMethod指定为go1.x

示例模板片段:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ../../helloworld/
      Handler: bootstrap
      Runtime: provided.al2
    Metadata:
      BuildMethod: go1.x

方案四:验证bootstrap文件生成

build完成后,手动检查.sam/build/[你的函数名]/目录下是否存在bootstrap文件。如果没有,进入应用模块目录单独执行Go构建命令测试:

cd helloworld
go build -o bootstrap main.go

确认能生成bootstrap后,再排查SAM构建配置是否有误。

内容的提问来源于stack exchange,提问作者Kuldeep Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:50:18