Golang调用AWS Lambda时报lambda包未声明InvokeInput、New错误如何解决
问题原因
你当前导入的github.com/aws/aws-lambda-go/lambda是AWS Lambda Go运行时库,仅用于编写Lambda函数的入口处理逻辑,不提供调用其他Lambda函数的相关API。你用到的New、InvokeInput属于AWS SDK for Go中的Lambda服务客户端组件,对应包未导入导致报错。
解决步骤
- 第一步:修改main.go的导入声明,新增AWS SDK的Lambda服务包,为避免和已有运行时Lambda包重名,可设置别名:
import ( "fmt" "os" "pkg/log" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" // 新增Lambda服务客户端包,设置别名lambdasvc避免冲突 lambdasvc "github.com/aws/aws-sdk-go/service/lambda" )
- 第二步:修改你调用Lambda的代码,将原来调用runtime Lambda包的部分替换为别名调用:
sess := session.Must( session.NewSessionWithOptions( session.Options{ SharedConfigState: session.SharedConfigEnable, }, ), ) // 用新增的lambdasvc别名创建客户端 svc := lambdasvc.New(sess, &aws.Config{Region: aws.String("ap-east-1")}) // InvokeInput也改为从lambdasvc别名引用 result, err := svc.Invoke(&lambdasvc.InvokeInput{ FunctionName: aws.String(os.Getenv("testLambdaFunc")), Payload: []byte(req.Body), })
- 第三步:在项目根目录执行命令拉取对应依赖:
go mod tidy
执行完成后编译运行即可解决报错。
内容的提问来源于stack exchange,提问作者steve lee
相关产品推荐
相关产品推荐

