使用c#获取ec2-instance标签

本文关键字:标签 ec2-instance 获取 使用 | 更新日期: 2023-09-27 18:12:08

我不是一个开发人员,所以也许答案是有一个不同的解决方案,但我不能真正从python或其他东西翻译它。

我试图使用AWS . net SDK找到一个实例,然后获得实例的标签。我已经能够确定一个实例是否启动并运行了。我还看到了如何创建和删除标记(不在下面的代码示例中)。但是我没有看到一种简单的方法来检查一个标签是否存在,如果它存在,则获取标签的值。

抱歉,如果我错过了显而易见的,但这对我来说都是新的。下面是我用来检查实例是否正在运行的代码示例。

            instanceID = "i-myInstanceID";
            do {
                var myrequest = new DescribeInstanceStatusRequest();
                DescribeInstanceStatusResponse myresponse = ec2.DescribeInstanceStatus(myrequest);
                int isCount = myresponse.DescribeInstanceStatusResult.InstanceStatuses.Count;
                for (int isc=0; isc < isCount; isc++) {
                    InstanceStatus instanceStatus = myresponse.DescribeInstanceStatusResult.InstanceStatuses[isc];
                    if (instanceStatus.InstanceId.Contains(instanceID)) {
                        Console.WriteLine("It looks like instance "+instanceID+" is running.");
                        idIdx = isc;
                        foundID = true;
                        break;
                    }
                }
                if ((foundID==false) && (secondCounter==1)) {
                    Console.Write("Looking for instance "+instanceID);
                } else {
                    Console.Write(".");
                }
                Thread.Sleep(1000);
                secondCounter++;
                if (secondCounter > 5) {
                    break;
                }
            } while (foundID == false) ;

使用c#获取ec2-instance标签

首先发送一个descripbeinstancesrequest来获取实例列表:

    public DescribeInstancesResult GetInstances(Ec2Key ec2Key)
    {
        _logger.Debug("GetInstances Start.");
        AmazonEC2 ec2 = CreateAmazonEc2Client(ec2Key);
        var ec2Request = new DescribeInstancesRequest();
        DescribeInstancesResponse describeInstancesResponse = ec2.DescribeInstances(ec2Request);
        DescribeInstancesResult result = describeInstancesResponse.DescribeInstancesResult;
        _logger.Debug("GetInstances End.");
        return result;
    }

然后循环遍历实例,直到找到所需的实例,然后使用Tag。GetTagValueByKey方法:

        // This just calls the above code
        DescribeInstancesResult ec2Instances = _ec2ResourceAccess.GetInstances(ec2Key);
        var returnInstances = new List<Ec2UtilityInstance>();
        foreach (var reservation in ec2Instances.Reservation)
        {
            foreach (var runningInstance in reservation.RunningInstance)
            {
                var returnInstance = new Ec2UtilityInstance();
                returnInstance.InstanceId = runningInstance.InstanceId;
                returnInstance.InstanceName = runningInstance.Tag.GetTagValueByKey("Name");
                returnInstance.Status = (Ec2UtilityInstanceStatus)Enum.Parse(typeof(Ec2UtilityInstanceStatus), runningInstance.InstanceState.Name, true);
                returnInstance.DefaultIp = runningInstance.Tag.GetTagValueByKey("DefaultIp");
                returnInstance.InstanceType = runningInstance.InstanceType;
                returnInstance.ImageId = runningInstance.ImageId;
                returnInstances.Add(returnInstance);   
            }
        }

这是完整来源的链接:

https://github.com/escherrer/EC2Utilities

常见'经理

常见' ResourceAccess