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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:35:26