Фильтруйте ресурсы AWS с помощью регулярных выражений в 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`

Я явно что-то делаю не так, может кто-то укажет что?

2 ответа

Недавно я столкнулся с этой проблемой, моя проблема заключалась в версии SDK, которую я использовал;

Фильтры: [] * ec2.Filter{

предназначен для мода sdk v1, и он не работал, поскольку я импортировал github.com/aws/aws-sdk-go-v2/aws , а

Фильтры: [] types.Filter{

предназначен для v2, и этот сработал в моем случае.

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

В документации API нет ничего, что могло бы DescribeSubnets принимает регулярное выражение в именах фильтров: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html

Если он работает в CLI, то, скорее всего, CLI делает то, что предлагает SDK. Go SDK похож на любой другой AWS SDK; он предоставляет API AWS в зависимости от языка. CLI AWS добавляет удобные функции поверх API, чтобы сделать его более полезным в командной строке, но это не означает, что эти функции предоставляются API или любым опубликованным SDK.

Другие вопросы по тегам