Фильтруйте ресурсы 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.