#c# #amazon-web-services #.net-core #aws-sdk-net
Вопрос:
Я видел несколько решений для AWS CLI, но я не уверен, как перевести эти запросы в aws .net sdk.
Дано: Aws .net sdk; экземпляры AWS с определенным ключом тега (например, EXCLUDE_ME)
Проблема: необходимо создать экземпляр Amazon.EC2.Model.Фильтр, который будет отфильтровывать виртуальные машины с определенным ключом тега.
Спасибо.
Ответ №1:
Существует способ фильтрации по значению, чтобы включать, но не исключать экземпляры в списке, возвращаемом DescribeInstances. Я создал небольшой пример, который делает два вызова для описания обстоятельств. В примере используется пагинатор для асинхронного извлечения результатов:
class DescribeInstances
{
static async Task Main()
{
// If the region of the EC2 instances is different from that
// of the default user, you need to specify the rgion when
// you create the client object.
var eC2Client = new AmazonEC2Client(RegionEndpoint.USEast1);
await GetInstanceDescriptions(eC2Client);
await GetInstanceDescriptionsFiltered(eC2Client, "IncludeInList", "Yes");
}
static async Task GetInstanceDescriptions(AmazonEC2Client client)
{
var request = new DescribeInstancesRequest();
Console.WriteLine("Showing all instances:");
var paginator = client.Paginators.DescribeInstances(request);
await foreach (var response in paginator.Responses)
{
foreach (var reservation in response.Reservations)
{
foreach (var instance in reservation.Instances)
{
Console.Write($"Instance ID: {instance.InstanceId}");
Console.WriteLine($"tCurrent State: {instance.State.Name}");
}
}
}
}
static async Task GetInstanceDescriptionsFiltered(AmazonEC2Client client, string tagName, string tagValue)
{
// This is the tag we want to use to filter
// the results of our list of instances.
var filters = new List<Filter>
{
new Filter
{
Name = $"tag:{tagName}",
Values = new List<string>
{
tagValue,
},
},
};
var request = new DescribeInstancesRequest
{
Filters = filters,
};
Console.WriteLine("nShowing instances with tag: "IncludeInList" set to "Yes".");
var paginator = client.Paginators.DescribeInstances(request);
await foreach (var response in paginator.Responses)
{
foreach (var reservation in response.Reservations)
{
foreach (var instance in reservation.Instances)
{
Console.Write($"Instance ID: {instance.InstanceId} ");
Console.WriteLine($"tCurrent State: {instance.State.Name}");
}
}
}
}
}
Если вы хотите использовать тег для исключения, вам нужно получить весь список, а затем, просматривая результаты, проверить значение тега и пропустить те, которые соответствуют вашим критериям.
Если вы хотите узнать, какие значения можно использовать со свойством Filters, см. Ссылку на API здесь: DescribeInstancesRequest для получения информации о возможных значениях свойства filter.
Дополнительные сведения об использовании пагинаторов см. в этой статье: Введение в использование пагинаторов в AWS SDK для .ЧИСТАЯ версия v3.5