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

Go工作区下AWS SAM build provided.al2构建及文件拷贝问题

解决Go Workspace多Lambda项目SAM构建后的文件拷贝问题

问题背景

用go.work管理多Go语言Lambda项目,最初在函数目录编写Makefile时本地构建正常,但执行sam build时因找不到外部user模块报错。将go.work、template.yaml和Makefile移到项目根目录后构建成功,但需要确保构建产物(bootstrap)正确拷贝到SAM的构建目录。

解决方案

1. 调整根目录Makefile的构建逻辑

修改根目录的Makefile,针对每个Lambda函数,先进入对应函数目录完成构建,再将产物复制到SAM提供的$(ARTIFACTS_DIR)目录:

build-UserPutFunction:
    cd lambda/user/user_put && \
    GOOS=linux GOARCH=amd64 go build -o bootstrap && \
    cp bootstrap $(ARTIFACTS_DIR)/
  • 通过cd进入函数目录,保证构建上下文与本地构建一致
  • 直接在go build前设置环境变量(Linux/WSL环境适用,Windows环境可替换为set GOOS=linux && set GOARCH=amd64 && go build...)
  • 利用SAM自动注入的$(ARTIFACTS_DIR)变量,将构建好的bootstrap复制到SAM指定的构建产物目录

2. 确保template.yaml配置正确

保持函数的CodeUri指向函数源码目录,并通过Metadata指定SAM使用根目录的Makefile构建:

UserPutFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: lambda/user/user_put
      Handler: bootstrap
      Runtime: provided.al2
      Metadata:
        BuildMethod: make
  • BuildMethod: make用于告知SAM调用根目录Makefile中对应build-<FunctionName>的构建目标

3. 验证go.work的模块包含

确保根目录的go.work正确包含所有需要的模块(包括Lambda函数外的共享模块):

go 1.21

use (
    ./lambda/user/user_put
    ./internal/user  # 替换为你的外部user模块实际路径
)

构建验证

执行sam build命令,SAM会自动调用根目录Makefile的对应构建目标,将bootstrap拷贝到正确的构建目录,之后即可正常进行部署或测试操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:09:54