Go Lambda代码中PutApprovalResult的Result结构体配置问题求助
问题描述
我写了一段Go语言的Lambda代码,用来在特定阶段批准CodePipeline的手动操作步骤。如果预览阶段执行成功,Lambda会自动批准;失败则需要人工检查手动批准。作为初始版本,先写了始终自动批准的代码,后续再添加复杂逻辑,但配置PutApprovalResult的Result结构体时遇到了问题,查了相关文档也没找到示例,希望能得到帮助。
错误代码示例
func auto_approve(pipeName, stageName, actionName, token string){ cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("eu-central-1")) if err != nil { log.Fatal(err) } client := codepipeline.NewFromConfig(cfg) //approve := { Status: "Approved", Summary: "Approved by lambda" } client.PutApprovalResult(context.TODO(), &codepipeline.PutApprovalResultInput{ ActionName: &actionName, StageName: &stageName, PipelineName: &pipeName, Token: &token, Result: { Status: "Approved", Summary: "Approved by lambda"}, //Here is the problem }) return }
解决方案
问题出在两个核心点:
Result字段要求是*types.ApprovalResult类型,不能直接使用匿名结构体字面量,必须显式创建结构体指针Status不是普通字符串,而是types.ApprovalStatus枚举类型,需要使用AWS SDK预定义的常量值
修正后的完整代码如下:
import ( "context" "log" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/codepipeline" "github.com/aws/aws-sdk-go-v2/service/codepipeline/types" ) func auto_approve(pipeName, stageName, actionName, token string) { cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("eu-central-1")) if err != nil { log.Fatal(err) } client := codepipeline.NewFromConfig(cfg) // 正确初始化ApprovalResult结构体指针 approvalResult := &types.ApprovalResult{ Status: types.ApprovalStatusApproved, // 使用预定义枚举常量 Summary: "Approved by lambda", } _, err = client.PutApprovalResult(context.TODO(), &codepipeline.PutApprovalResultInput{ ActionName: &actionName, StageName: &stageName, PipelineName: &pipeName, Token: &token, Result: approvalResult, // 传入结构体指针 }) if err != nil { log.Fatalf("Failed to put approval result: %v", err) } return }
补充说明:
- 必须导入
types包,ApprovalResult结构体和ApprovalStatus枚举都定义在这个包内 - 调用
PutApprovalResult时建议处理返回的错误,避免遗漏异常场景
内容的提问来源于stack exchange,提问作者rek2
相关产品推荐
相关产品推荐

