AWS SDK (C#) — как создать запрос на описание экземпляров, который отфильтровывает виртуальные машины с помощью определенного тега.

#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