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

使用AWS Go SDK向托管前缀列表添加CIDRs时遇重复API错误

问题描述

AWS账户中存在一个全新的空Managed Prefix List,尝试通过Go语言结合AWS Go SDK编写的服务批量加载CIDR列表时,当传入的cidrs []domain.Cidr包含多个元素,触发以下错误:

CIDR (99.79.87.237/32) is a duplicate.

对应的核心代码如下:

func (a AWSPrefixListRepository) AddCidrs(cidrs []domain.Cidr, resource string, currentVersion int64) error {

    svc := ec2.New(a.sess)

    _, err := svc.ModifyManagedPrefixList(&ec2.ModifyManagedPrefixListInput{
        CurrentVersion: &currentVersion,
        PrefixListId:   &resource,
        AddEntries:     a.buildAddEntries(cidrs),
    })

    if err != nil {
        return err
    }

    return nil
}

func (a AWSPrefixListRepository) buildAddEntries(cidrs []domain.Cidr) []*ec2.AddPrefixListEntry {
    var addEntries []*ec2.AddPrefixListEntry

    for _, cidr := range cidrs {
        addEntries = append(addEntries, &ec2.AddPrefixListEntry{
            Cidr:        &cidr.PrefixIpv4,
            Description: &cidr.Description,
        })
    }

    return addEntries
}
问题分析与解决方法

问题根源

AWS的ModifyManagedPrefixList API不允许在AddEntries参数中传入重复的CIDR条目——哪怕目标Prefix List本身是空的,只要请求体里存在重复CIDR,就会触发该报错。大概率是传入的cidrs数组内部包含重复的99.79.87.237/32条目。

解决步骤

在构建AddEntries之前对CIDR列表做去重处理,基于CIDR的IP前缀字段(PrefixIpv4)去重,同一个CIDR无论描述是否相同,都不能重复添加。

修改后的代码示例

调整buildAddEntries函数,添加去重逻辑:

func (a AWSPrefixListRepository) buildAddEntries(cidrs []domain.Cidr) []*ec2.AddPrefixListEntry {
    var addEntries []*ec2.AddPrefixListEntry
    // 用map记录已处理过的CIDR,实现去重
    seenCidrs := make(map[string]struct{})

    for _, cidr := range cidrs {
        // 如果该CIDR已经处理过,跳过
        if _, exists := seenCidrs[cidr.PrefixIpv4]; exists {
            continue
        }
        seenCidrs[cidr.PrefixIpv4] = struct{}{}
        addEntries = append(addEntries, &ec2.AddPrefixListEntry{
            Cidr:        &cidr.PrefixIpv4,
            Description: &cidr.Description,
        })
    }

    return addEntries
}

额外建议

可以在调用AddCidrs方法的业务层提前做去重校验,提前拦截重复数据,减少无效的AWS API调用,同时可以在日志中记录被跳过的重复CIDR,方便排查数据来源问题。

内容的提问来源于stack exchange,提问作者Victor Hugo Montes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:41:57