在 aws-sdk-go 中使用正则表达式过滤 AWS 资源

Filter AWS resources using regex in aws-sdk-go

所以我有一些不同类型的 aws 资源标记为 xxx/yyy/<generated_id>。我需要使用 go-sdk 获取它们。

这是子网的示例代码,其他所有资源的过滤器看起来都一样。

这行不通。

var resp *ec2.DescribeSubnetsOutput
resp, err = d.ec2Client().DescribeSubnets(&ec2.DescribeSubnetsInput{
    Filters: []*ec2.Filter{
        {
            Name:   aws.String("vpc-id"),
            Values: []*string{&d.VpcId},
        },
        {
            Name:   aws.String(fmt.Sprintf(`tag:"xxx/yyy.[*]"`),
            Values: []*string{aws.String("owned")},
        },
    },
})

这样做: aws ec2 describe-subnets --filters `Name=tag:"xxx/yyy.[*]",Values=owned`

我显然做错了什么,有人可以指出什么吗?

API 文档中没有任何内容表明 DescribeSubnets 接受过滤器名称中的正则表达式:https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html

如果它在 CLI 中工作,那很可能是 CLI 在 SDK 提供的功能之上做的事情。 Go SDK 与任何其他 AWS SDK 一样;它以特定于语言的方式公开 AWS API。 AWS CLI 在 API 之上添加了便利功能,使其在命令行中更有用,但这并不意味着这些功能由 API 或任何已发布的 SDK 公开。

我最近遇到了这个问题,我的问题是我使用的 sdk 版本;

Filters: [ ]*ec2.Filter{

适用于 v1 sdk mod 并且在我导入 github.com/aws/aws-sdk-go-v2/aws[ 时它不起作用=24=],而

Filters: [ ]types.Filter{

适用于 v2,这个适用于我的情况。

https://aws.amazon.com/blogs/developer/aws-sdk-for-go-version-2-general-availability/