예제 #1
0
        static void Main1(string[] args)
        {
            try
            {
                // 必要步骤:
                // 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
                // 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
                // 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
                // 以免泄露密钥对危及你的财产安全。
                Credential cred = new Credential {
                    SecretId  = Environment.GetEnvironmentVariable("TENCENTCLOUD_SECRET_ID"),
                    SecretKey = Environment.GetEnvironmentVariable("TENCENTCLOUD_SECRET_KEY")
                };

                // 实例化一个client选项,可选的,没有特殊需求可以跳过
                ClientProfile clientProfile = new ClientProfile();
                // 指定签名算法(默认为HmacSHA256)
                clientProfile.SignMethod = ClientProfile.SIGN_SHA256;
                // 非必要步骤
                // 实例化一个客户端配置对象,可以指定超时时间等配置
                HttpProfile httpProfile = new HttpProfile();
                // SDK默认使用POST方法。
                // 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求。
                httpProfile.ReqMethod = "GET";
                // SDK有默认的超时时间,非必要请不要进行调整。
                // 如有需要请在代码中查阅以获取最新的默认值。
                httpProfile.Timeout = 10; // 请求连接超时时间,单位为秒(默认60秒)
                // SDK会自动指定域名。通常是不需要特地指定域名的,但是如果你访问的是金融区的服务,
                // 则必须手动指定域名,例如云服务器的上海金融区域名: cvm.ap-shanghai-fsi.tencentcloudapi.com
                httpProfile.Endpoint = "cvm.tencentcloudapi.com";
                // 代理服务器,当你的环境下有代理服务器时设定
                httpProfile.WebProxy = Environment.GetEnvironmentVariable("HTTPS_PROXY");

                clientProfile.HttpProfile = httpProfile;

                // 实例化要请求产品(以cvm为例)的client对象
                // 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,或者引用预设的常量,clientProfile是可选的
                CvmClient client = new CvmClient(cred, "ap-guangzhou", clientProfile);

                // 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
                // 你可以直接查询SDK源码确定DescribeInstancesRequest有哪些属性可以设置,
                // 属性可能是基本类型,也可能引用了另一个数据结构。
                // 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明。
                DescribeInstancesRequest req = new DescribeInstancesRequest();

                // 基本类型的设置。
                // 此接口允许设置返回的实例数量。此处指定为只返回一个。
                // SDK采用的是指针风格指定参数,即使对于基本类型你也需要用指针来对参数赋值。
                // SDK提供对基本类型的指针引用封装函数
                req.Limit = 1;
                // 数组类型的设置。
                // 此接口允许指定实例 ID 进行过滤,但是由于和接下来要演示的 Filter 参数冲突,先注释掉。
                // req.InstanceIds = new string[] { "ins-r8hr2upy" };

                // 复杂对象的设置。
                // 在这个接口中,Filters是数组,数组的元素是复杂对象Filter,Filter的成员Values是string数组。
                // 填充请求参数,这里request对象的成员变量即对应接口的入参
                // 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
                Filter zoneFilter = new Filter(); // 创建Filter对象, 以zone的维度来查询cvm实例
                zoneFilter.Name   = "zone";
                zoneFilter.Values = new string[] { "ap-guangzhou-1", "ap-guangzhou-2" };
                Filter nameFilter = new Filter();
                nameFilter.Name   = "instance-name";
                nameFilter.Values = new string[] { "中文测试" };
                req.Filters       = new Filter[] { zoneFilter, nameFilter }; // Filters 是成员为Filter对象的列表

                //// 这里还支持以标准json格式的string来赋值请求参数的方式。下面的代码跟上面的参数赋值是等效的
                //string strParams = "{\"Filters\":[{\"Name\":\"zone\",\"Values\":[\"ap-guangzhou-1\",\"ap-guangzhou-2\"]}]}";
                //req = DescribeInstancesRequest.FromJsonString<DescribeInstancesRequest>(strParams);

                // 通过client对象调用DescribeInstances方法发起请求。注意请求方法名与请求对象是对应的
                // 返回的resp是一个DescribeInstancesResponse类的实例,与请求对象对应
                DescribeInstancesResponse resp = client.DescribeInstancesSync(req);

                // 输出json格式的字符串回包
                Console.WriteLine(AbstractModel.ToJsonString(resp));

                // 也可以取出单个值。
                // 你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
                Console.WriteLine(resp.TotalCount);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            Console.Read();
        }
예제 #2
0
 public DescribeInstancesResponse DescribeInstances(DescribeInstancesRequest request)
 {
     return(Channel.DescribeInstances(request));
 }
예제 #3
0
        public bool delete_vpc_all(string region_txt)
        {
            try
            {
                var client = get_client();
                write_log(region + " の VPC を確認しています。");
                var query_req = new DescribeVpcsRequest();
                query_req.Filters.Add(new Filter()
                {
                    Name = "tag-value", Values = new List <string>()
                    {
                        Helper.build_name(setting_, "vpc")
                    }
                });
                var query_res = client.DescribeVpcs(query_req);
                if (query_res.Vpcs.Count == 0)
                {
                    write_log(region + " の VPC が存在しませんでした。");
                    return(true);
                }
                vpc_id = query_res.Vpcs[0].VpcId;

                var query_instance_req = new DescribeInstancesRequest();
                var query_instance_res = client.DescribeInstances(query_instance_req);

                bool flg = true;
                foreach (var row in query_instance_res.Reservations)
                {
                    foreach (var row2 in row.Instances)
                    {
                        if (row2.State != null && row2.State.Code != 48 &&
                            row2.VpcId != null && row2.VpcId.Equals(vpc_id))
                        {
                            flg = false;
                            break;
                        }
                    }
                    if (flg == false)
                    {
                        break;
                    }
                }
                if (flg == false)
                {
                    write_log(region + " にはインスタンスが存在する為、VPC を削除できません。");
                    return(false);
                }

                write_log(region + " のセキュリティグループを確認しています。");

                var query_sg_req = new DescribeSecurityGroupsRequest();
                query_sg_req.Filters.Add(new Filter()
                {
                    Name = "tag-value", Values = new List <string>()
                    {
                        Helper.build_name(setting_, "sg")
                    }
                });
                var query_sg_res = client.DescribeSecurityGroups(query_sg_req);
                foreach (var row in query_sg_res.SecurityGroups)
                {
                    write_log("セキュリティグループ " + row.GroupId + " を削除しています。");
                    var delete_sg_req = new DeleteSecurityGroupRequest();
                    delete_sg_req.GroupId = row.GroupId;
                    client.DeleteSecurityGroup(delete_sg_req);
                }

                using (FileStream fs = new FileStream(region_txt, FileMode.Open, FileAccess.Read))
                {
                    IList <string> list = new List <string>(subnet_ids.Keys);
                    foreach (string tag in list)
                    {
                        if (Helper.check_az(fs, region, tag, 0) == false)
                        {
                            continue;
                        }
                        write_log(region + tag + " のサブネットを確認しています。");
                        var query_sub_req = new DescribeSubnetsRequest();
                        query_sub_req.Filters.Add(new Filter()
                        {
                            Name = "tag-value", Values = new List <string>()
                            {
                                Helper.build_name(setting_, "subnet_" + tag)
                            }
                        });
                        var query_sub_res = client.DescribeSubnets(query_sub_req);
                        foreach (var row in query_sub_res.Subnets)
                        {
                            write_log("サブネット " + row.SubnetId + " を削除しています。");
                            var delete_sub_req = new DeleteSubnetRequest();
                            delete_sub_req.SubnetId = row.SubnetId;
                            client.DeleteSubnet(delete_sub_req);
                        }
                    }
                }

                write_log(region + " のインターネットゲートウェイを確認しています。");

                var query_igw_req = new DescribeInternetGatewaysRequest();
                query_igw_req.Filters.Add(new Filter()
                {
                    Name = "tag-value", Values = new List <string>()
                    {
                        Helper.build_name(setting_, "igw")
                    }
                });
                var query_igw_res = client.DescribeInternetGateways(query_igw_req);
                foreach (var row in query_igw_res.InternetGateways)
                {
                    var detach_igw_req = new DetachInternetGatewayRequest();
                    detach_igw_req.InternetGatewayId = row.InternetGatewayId;
                    detach_igw_req.VpcId             = vpc_id;
                    client.DetachInternetGateway(detach_igw_req);

                    var delete_igw_req = new DeleteInternetGatewayRequest();
                    delete_igw_req.InternetGatewayId = row.InternetGatewayId;
                    client.DeleteInternetGateway(delete_igw_req);
                }

                write_log("VPC " + vpc_id + " を削除しています。");

                var delete_vpc_req = new DeleteVpcRequest();
                delete_vpc_req.VpcId = vpc_id;
                client.DeleteVpc(delete_vpc_req);
            }
            catch (Exception ex)
            {
                write_log("ERROR: " + ex.ToString());
                return(false);
            }
            return(true);
        }
예제 #4
0
        public async Task <IEnumerable <Ec2InstanceImage> > GetDeprecatedInstanceIds(Amazon.RegionEndpoint currentRegion)
        {
            Amazon.EC2.AmazonEC2Client ec2Client = new Amazon.EC2.AmazonEC2Client(AwsSdkVending.AccessKeyId, AwsSdkVending.SecretKey, currentRegion);


            string NextToken = null;

            List <Ec2InstanceImage> lstInstances = new List <Ec2InstanceImage>();

            List <string> lstImageIds = new List <string>();

            List <Image> lstAffectedImages = new List <Image>();

            do
            {
                var describeRequest = new DescribeInstancesRequest();
                describeRequest.Filters = new List <Filter>();
                describeRequest.Filters.Add(new Filter("platform", new List <string> {
                    "windows"
                }));
                describeRequest.Filters.Add(new Filter("instance-state-name", new List <string> {
                    "pending", "running", "shutting-down", "stopping", "stopped"
                }));
                describeRequest.NextToken = NextToken;

                var describeInstancesResult = await ec2Client.DescribeInstancesAsync(describeRequest);

                NextToken = describeRequest.NextToken;


                foreach (var instance in describeInstancesResult.Reservations.SelectMany(r => r.Instances))
                {
                    if (!lstImageIds.Contains(instance.ImageId))
                    {
                        lstImageIds.Add(instance.ImageId);
                    }
                }
            } while (NextToken != null);

            if (lstImageIds.Count > 0)
            {
                var describeImagesRequest = new DescribeImagesRequest {
                    ImageIds = lstImageIds
                };
                describeImagesRequest.Filters = new List <Filter>();
                describeImagesRequest.Filters.Add(new Filter {
                    Name = "is-public", Values = new List <string> {
                        "true"
                    }
                });
                var describeImagesResult = await ec2Client.DescribeImagesAsync(describeImagesRequest);

                foreach (var currentImage in describeImagesResult.Images)
                {
                    if (string.IsNullOrEmpty(currentImage.Description))
                    {
                        continue;
                    }

                    if (DeprecatedDescriptions.Any(d => Regex.IsMatch(currentImage.Description, d, RegexOptions.IgnoreCase)))
                    {
                        lstAffectedImages.Add(currentImage);
                        Console.WriteLine($"{currentImage.ImageId} - {currentImage.Description} is facing deprecation");
                    }
                }


                Console.WriteLine($"{lstAffectedImages.Count} images are marked for deprecation in {currentRegion.DisplayName}");
            }

            if (lstAffectedImages.Count > 0)
            {
                foreach (var image in lstAffectedImages)
                {
                    do
                    {
                        var describeInstancesRequest = new DescribeInstancesRequest();

                        describeInstancesRequest.Filters = new List <Filter>();
                        describeInstancesRequest.Filters.Add(new Filter("image-id", new List <string> {
                            image.ImageId
                        }));
                        describeInstancesRequest.Filters.Add(new Filter("instance-state-name", new List <string> {
                            "pending", "running", "shutting-down", "stopping", "stopped"
                        }));
                        describeInstancesRequest.NextToken = NextToken;

                        var describeInstancesResult = await ec2Client.DescribeInstancesAsync(describeInstancesRequest);

                        NextToken = describeInstancesRequest.NextToken;


                        foreach (var instance in describeInstancesResult.Reservations.SelectMany(r => r.Instances))
                        {
                            lstInstances.Add(new Ec2InstanceImage
                            {
                                Region           = currentRegion.DisplayName,
                                ImageDescription = image.Description,
                                ImageId          = image.ImageId,
                                ImageName        = image.Name,
                                InstanceId       = instance.InstanceId
                            });

                            Console.WriteLine($"Instance {instance.InstanceId} in {currentRegion.DisplayName} ({image.Name}) is marked for deprecation and needs to be snapshotted.");
                        }
                    } while (NextToken != null);
                }
            }

            return(lstInstances);
        }
예제 #5
0
        //[Obsolete]
        public async Task <string> CreateEC2InstanceAsync(int serverType = 0)
        {
            string secGroupName = "myec2";
            string instanceID   = "";

            if (serverType == (int)AWSConstants.server_types.EC2)
            {
                //Step 1:- check for the security Groups
                var isSGExists = await IsSecurityGroupsExistsAsync(secGroupName);

                //Step 2:- Create Security Groups
                if (!isSGExists)
                {
                    SecurityGroup securityGroup = CreateSecurityGroupAsync(secGroupName).Result;
                    string        ipRange       = "0.0.0.0/0";
                    List <string> ranges        = new List <string>
                    {
                        ipRange
                    };

                    //Step 3:- Attach the IP Permissions
                    IpPermission ipPermission = new IpPermission()
                    {
                        IpProtocol = "All traffic",
                        FromPort   = 0,
                        ToPort     = 65535,
                        IpRanges   = ranges
                    };
                    var ingressRequest = new AuthorizeSecurityGroupIngressRequest();
                    ingressRequest.GroupId = securityGroup.GroupId;
                    ingressRequest.IpPermissions.Add(ipPermission);

                    var ingressResponse = amazonEC2Client.AuthorizeSecurityGroupIngressAsync(ingressRequest);

                    //Step 4:- Create Key Pairs (.pem file)
                    string keyPairName = CreateKeyPair();

                    //Step 5:- Create Launch Request Object
                    string amiID = "ami-0b6158cfa2ae7b493";

                    List <string> groups = new List <string>()
                    {
                        securityGroup.GroupId
                    };
                    var launchRequest = new RunInstancesRequest()
                    {
                        ImageId          = amiID,
                        InstanceType     = "t2.micro",
                        MinCount         = 1,
                        MaxCount         = 1,
                        KeyName          = keyPairName,
                        SecurityGroupIds = groups
                    };

                    var launchResponse = await amazonEC2Client.RunInstancesAsync(launchRequest);

                    var instances   = launchResponse.Reservation.Instances;
                    var instanceIds = new List <string>();
                    foreach (Instance item in instances)
                    {
                        instanceIds.Add(item.InstanceId);
                        Console.WriteLine();
                        Console.WriteLine("New instance: " + item.InstanceId);
                        Console.WriteLine("Instance state: " + item.State.Name);
                    }

                    //Step 6:- Describe Instances to know the status of the instances
                    var instanceRequest = new DescribeInstancesRequest
                    {
                        InstanceIds = new List <string>
                        {
                            instanceIds[0]
                        }
                    };

                    while (true)
                    {
                        var response = await amazonEC2Client.DescribeInstancesAsync(instanceRequest);

                        if (response.Reservations[0].Instances[0].State.Name == InstanceStateName.Running)
                        {
                            instanceID = response.Reservations[0].Instances[0].PublicDnsName + "With the status of " + InstanceStateName.Running;
                            break;
                        }
                    }
                }
            }
            return(instanceID);
        }
예제 #6
0
 /// <summary>
 ///  查询kafka实例列表
 /// </summary>
 /// <param name="request">请求参数信息</param>
 /// <returns>请求结果信息</returns>
 public async Task <DescribeInstancesResponse> DescribeInstances(DescribeInstancesRequest request)
 {
     return(await new DescribeInstancesExecutor().Client(this).Execute <DescribeInstancesResponse, DescribeInstancesResult, DescribeInstancesRequest>(request).ConfigureAwait(false));
 }
예제 #7
0
        public static void Main(string[] args)
        {
            string          profile = string.Empty, filterx = string.Empty, key = string.Empty, sec = string.Empty;
            AmazonEC2Client client = null;
            List <chost>    hosts  = new List <chost>();

            Console.BackgroundColor = ConsoleColor.Blue;
            Console.ForegroundColor = ConsoleColor.White;

            if (args.Length > 0)
            {
                profile = args[0];
                if (args.Length > 1)
                {
                    filterx = args[1];
                }
                else
                {
                    filterx = "*";
                }
            }


            if (GetProfile(profile) != null)
            {
                key = GetProfile(profile)[0];
                sec = GetProfile(profile)[1];
            }
            else
            {
                Console.WriteLine("Invalid, or no existent AWS Profile -->" + profile);
                Environment.Exit(1);
            }

            try
            {
                client = new AmazonEC2Client(key, sec);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Invalid Key/Secret " + ex.Message);
                Environment.Exit(1);
            }


            var request = new DescribeInstancesRequest()
            {
                Filter = new List <Filter>()
                {
                    new Filter()
                    {
                        Name  = "tag-value",
                        Value = new List <String>
                        {
                            "*"
                        }
                    }
                }
            };
            var             response = client.DescribeInstances(request);
            int             c = 0;
            string          id = string.Empty, name = string.Empty, type = string.Empty, state = string.Empty, privip = string.Empty, keyname = string.Empty;
            List <string[]> resultsX = new List <string[]>();

            resultsX.Add(new string[] { "Count", "ID", "Private IP", "State", "Type", "Name", "Key" });
            foreach (var ec2instace in response.DescribeInstancesResult.Reservation)
            {
                try
                {
                    if (filterx != "*")
                    {
                        if (ec2instace.RunningInstance[0].Tag.Find((obj) => obj.Key.Contains("Name")).Value.Contains(filterx))
                        {
                            c++;
                            id      = ec2instace.RunningInstance[0].InstanceId;
                            name    = ec2instace.RunningInstance[0].Tag.Find((obj) => obj.Key.Contains("Name")).Value;
                            type    = ec2instace.RunningInstance[0].InstanceType;
                            state   = ec2instace.RunningInstance[0].InstanceState.Name;
                            privip  = ec2instace.RunningInstance[0].PrivateIpAddress;
                            keyname = ec2instace.RunningInstance[0].KeyName;
                            resultsX.Add(new string[] { c.ToString(), id, privip, state, type, name, keyname });
                        }
                    }
                    else
                    {
                        c++;
                        id      = ec2instace.RunningInstance[0].InstanceId;
                        name    = ec2instace.RunningInstance[0].Tag.Find((obj) => obj.Key.Contains("Name")).Value;
                        type    = ec2instace.RunningInstance[0].InstanceType;
                        state   = ec2instace.RunningInstance[0].InstanceState.Name;
                        privip  = ec2instace.RunningInstance[0].PrivateIpAddress;
                        keyname = ec2instace.RunningInstance[0].KeyName;
                        resultsX.Add(new string[] { c.ToString(), id, privip, state, type, name, keyname });
                    }
                }
                catch
                {
                    Console.WriteLine("filter not valid");
                }
            }
            #region Main Body

            Console.WriteLine(ArrayPrinter.GetDataInTableFormat(resultsX));
            ArrayList hosts_list = AddHosts(resultsX);
            ArrayList final      = new ArrayList();
            string    selection;

            Console.WriteLine("Enter Instance/s Number To Access it :");
            Console.BackgroundColor = ConsoleColor.White;
            Console.ForegroundColor = ConsoleColor.Black;
            Console.Write("#-> ");
            selection = Console.ReadLine();
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.White;
            final.AddRange(selection.Split(','));
            string iph, pemh, nameh;
            for (int i = 0; i < final.Count; i++)
            {
                iph   = GETHOST(final[i].ToString(), hosts_list).ip;
                pemh  = GETHOST(final[i].ToString(), hosts_list).pem;
                nameh = GETHOST(final[i].ToString(), hosts_list).hostname;

                if (i == 0)
                {
                    hsplit();
                    ssh(pemh, iph, nameh);

                    if (final.Count > 1)
                    {
                        vsplit();
                    }                                                    //DONE
                }
                if (i == 1)
                {
                    ssh(pemh, iph, nameh);
                    if (final.Count > 2)
                    {
                        MoveR(); CloseSession();
                    }                                                                   //DONE
                }
                if (i == 2)
                {
                    hsplit();
                    ssh(pemh, iph, nameh);

                    if (final.Count > 3)
                    {
                        MoveR();
                    }                                                    //DONE
                }
                if (i == 3)
                {
                    hsplit();
                    ssh(pemh, iph, nameh);
                    if (final.Count > 4)
                    {
                        hsplit();
                    }                                                      //DONE
                }
                if (i == 4)
                {
                    MoveR();
                    ssh(pemh, iph, nameh);                    //DONE
                    if (final.Count > 5)
                    {
                        MoveR(); hsplit();
                    }                                                               //DONE
                }
                if (i == 5)
                {
                    ssh(pemh, iph, nameh);
                }
            }

            #endregion
        }
예제 #8
0
        internal static async Task <List <Ec2Instance> > ListEc2InstancesAsync(IConfiguration Configuration, string User)
        {
            var ecInstancesToManage = new List <Ec2Instance>();
            var accounts            = LoadAwsAccounts(Configuration);

            foreach (var accountKey in accounts)
            {
                try
                {
                    var accountRegion = RegionEndpoint.GetBySystemName(accountKey.Region);
                    var stsClient     = new AmazonSecurityTokenServiceClient();
                    var sessionName   = string.Format(ResourceStrings.ListAction, User, accountKey.AccountName, DateTime.Now.Ticks.ToString());
                    sessionName = sessionName.Length > 63 ? sessionName.Substring(0, 63) : sessionName;
                    var assumeRoleRequest = new AssumeRoleRequest
                    {
                        RoleArn         = accountKey.RoleArn,
                        RoleSessionName = sessionName,
                        DurationSeconds = 900
                    };
                    var stsResponse = await stsClient.AssumeRoleAsync(assumeRoleRequest);

                    var describeRequest  = new DescribeInstancesRequest();
                    var ec2Client        = new AmazonEC2Client(stsResponse.Credentials, accountRegion);
                    var describeResponse = await ec2Client.DescribeInstancesAsync(describeRequest);

                    ec2Client.Dispose();
                    stsClient.Dispose();
                    foreach (var reservation in describeResponse.Reservations)
                    {
                        foreach (var instance in reservation.Instances)
                        {
                            if (instance.Tags.Where(t => t.Key == accountKey.TagToSearch).FirstOrDefault() != null)
                            {
                                if (Regex.Match(instance.Tags.SingleOrDefault(t => t.Key == accountKey.TagToSearch)?.Value, accountKey.SearchString).Success)
                                {
                                    var name  = instance.Tags.SingleOrDefault(t => t.Key == accountKey.NameTag)?.Value;
                                    var state = string.Empty;
                                    if (instance.State.Name == InstanceStateName.Running)
                                    {
                                        stsClient   = new AmazonSecurityTokenServiceClient();
                                        stsResponse = await stsClient.AssumeRoleAsync(assumeRoleRequest);

                                        ec2Client = new AmazonEC2Client(stsResponse.Credentials, accountRegion);
                                        var statusResponse = await ec2Client.DescribeInstanceStatusAsync(new DescribeInstanceStatusRequest { InstanceIds = { instance.InstanceId } });

                                        ec2Client.Dispose();
                                        stsClient.Dispose();
                                        if (string.Equals(statusResponse.InstanceStatuses[0].Status.Status.Value, "impaired", StringComparison.InvariantCultureIgnoreCase) || string.Equals(statusResponse.InstanceStatuses[0].SystemStatus.Status.Value, "impaired", StringComparison.InvariantCultureIgnoreCase))
                                        {
                                            state = "impaired";
                                        }
                                        else if (string.Equals(statusResponse.InstanceStatuses[0].Status.Status.Value, "initializing", StringComparison.InvariantCultureIgnoreCase) || string.Equals(statusResponse.InstanceStatuses[0].SystemStatus.Status.Value, "initializing", StringComparison.InvariantCultureIgnoreCase))
                                        {
                                            state = "initializing";
                                        }
                                        else
                                        {
                                            state = instance.State.Name.Value;
                                        }
                                    }
                                    else
                                    {
                                        state = instance.State.Name.Value;
                                    }
                                    var ec2InstanceToManage = new Ec2Instance(name, instance.PrivateIpAddress, instance.InstanceId, state, accountKey.AccountName);
                                    ecInstancesToManage.Add(ec2InstanceToManage);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format(ErrorStrings.ErrorLoadingAccount, accountKey.AccountName, ex.Message), ex);
                }
            }
            return(ecInstancesToManage.OrderBy(x => x.Name).ToList());
        }
예제 #9
0
        public void launch()
        {
            //instance started.
            if (string.IsNullOrEmpty(_instanceId) == false)
            {
                return;
            }

            try
            {
                RunInstancesRequest request = new RunInstancesRequest();

                request.ImageId  = _amiId;
                request.MinCount = 1;
                request.MaxCount = 1;

                if (_defaultSecurityGroup == false)
                {
                    request.SecurityGroup.Add(_securityGroups);
                }
                else
                {
                    if (securitryGroupExistOnServer() == false)
                    {
                        createSecurityGroup();
                    }
                    request.SecurityGroup.Add(_securityGroups);
                }

                string keyPath = CAwsConfig.Instance.getKeyFilePath(_keyPairName);
                if (string.IsNullOrEmpty(keyPath) == true ||
                    File.Exists(keyPath) == false)
                {
                    if (keyExistOnServer() == false)
                    {
                        createKayPair();
                    }
                }
                request.KeyName = _keyPairName;

                RunInstancesResponse response = _service.RunInstances(request);
                if (response.IsSetRunInstancesResult())
                {
                    RunInstancesResult runInstancesResult = response.RunInstancesResult;
                    if (runInstancesResult.IsSetReservation())
                    {
                        if (runInstancesResult.Reservation.RunningInstance[0].IsSetInstanceId())
                        {
                            _instanceId = runInstancesResult.Reservation.RunningInstance[0].InstanceId;
                        }
                        if (runInstancesResult.Reservation.RunningInstance[0].IsSetPublicDnsName())
                        {
                            _publicDns = runInstancesResult.Reservation.RunningInstance[0].PublicDnsName;
                        }
                    }
                }

                if (string.IsNullOrEmpty(_instanceId) == true)
                {
                    throw new Exception("No instance id is returned.");
                }

                //return after the instance started up
                bool pending = true;
                while (pending == true)
                {
                    System.Threading.Thread.Sleep(5 * 1000);

                    DescribeInstancesRequest describeRequest = new DescribeInstancesRequest();
                    describeRequest.InstanceId.Add(_instanceId);
                    DescribeInstancesResponse describeResponse = _service.DescribeInstances(describeRequest);
                    DescribeInstancesResult   describeResult   = describeResponse.DescribeInstancesResult;

                    if (describeResult.Reservation.Count != 1)
                    {
                        throw new Exception("more than one instance with the same id");
                    }
                    if (describeResult.Reservation[0].RunningInstance.Count != 1)
                    {
                        throw new Exception("more than one running instance has the same id");
                    }

                    pending = describeResult.Reservation[0].RunningInstance[0].InstanceState.Name != "running";
                }
            }
            catch (AmazonEC2Exception ex)
            {
                throw new Exception("Caught Exception: " + ex.XML);
            }
        }
예제 #10
0
        public async void createEc2(String generatedUID, StringWriter sr, StringBuilder sb)
        {
            var bucketName = "magicec2" + RESOURCDE_POSTFIX;

            region = RegionEndpoint.USWest2;


            using (sr = new StringWriter(sb))
            {
                sr.WriteLine("===========================================");
                sr.WriteLine("Welcome to the MAGIC CREATE EC2!");
                sr.WriteLine("===========================================");
                string encodedString = "";
                string userdata      = Constants.ud_file_text_content.Replace("<bucket_name>", bucketName).Replace("<bucket_guid>", generatedUID)
                ;
                sr.WriteLine("\n" + userdata);
                string formattedString = userdata;
                sr.WriteLine("\n" + formattedString);
                encodedString = EncodeToBase64(formattedString);
                sr.WriteLine("\n" + encodedString);



                var ec2Client = new AmazonEC2Client(accessKeyId, secretAccessKey, region);
                try
                {
                    // Get latest 2012 Base AMI
                    //  var imageId = ImageUtilities.FindImageAsync(ec2Client, ImageUtilities.U).Result.ImageId;
                    var imageId = "ami-6e1a0117";

                    // Create an IAM role with a profile that the Instance will use to run commands against AWS
                    var instanceProfileArn = CreateInstanceProfile();
                    sr.WriteLine("Created Instance Profile: {0}", instanceProfileArn);

                    // Sleep for a little to make sure the profile is fully propagated.
                    await Task.Delay(TimeSpan.FromMilliseconds(15000));

                    // Create key pair which will be used to demonstrate how get the Windows Administrator password.
                    // var keyPair = ec2Client.CreateKeyPairAsync(new CreateKeyPairRequest { KeyName = bucketName }).Result.KeyPair;

                    // sr.WriteLine("KeyPair Name: {0}", keyPair.KeyName);

                    var runRequest = new RunInstancesRequest
                    {
                        ImageId            = imageId,
                        MinCount           = 1,
                        MaxCount           = 1,
                        KeyName            = "magicec2636459158754457398",
                        IamInstanceProfile = new IamInstanceProfileSpecification {
                            Arn = instanceProfileArn
                        },
                        InstanceType = InstanceType.T2Micro,


                        // Add the region for the S3 bucket and the name of the bucket to create
                        UserData = encodedString
                    };
                    var instanceId = ec2Client.RunInstancesAsync(runRequest).Result.Reservation.Instances[0].InstanceId;
                    sr.WriteLine("Launch Instance {0}", instanceId);


                    // Create the name tag
                    await ec2Client.CreateTagsAsync(new CreateTagsRequest
                    {
                        Resources = new List <string> {
                            instanceId
                        },
                        Tags = new List <Amazon.EC2.Model.Tag> {
                            new Amazon.EC2.Model.Tag {
                                Key = "Name", Value = "Processor"
                            }
                        }
                    });

                    sr.WriteLine("Adding Name Tag to instance");


                    sr.WriteLine("Waiting for EC2 Instance to stop");
                    // The script put in the user data will shutdown the instance when it is complete.  Wait
                    // till the instance has stopped which signals the script is done so the instance can be terminated.
                    Instance instance = null;
                    var      instanceDescribeRequest = new DescribeInstancesRequest {
                        InstanceIds = new List <string> {
                            instanceId
                        }
                    };
                    do
                    {
                        await Task.Delay(TimeSpan.FromMilliseconds(10000));

                        instance = ec2Client.DescribeInstancesAsync(instanceDescribeRequest).Result.Reservations[0].Instances[0];

                        if (instance.State.Name == "stopped")
                        {
                            // Demonstrate how to get the Administrator password using the keypair.
                            var passwordResponse = ec2Client.GetPasswordDataAsync(new GetPasswordDataRequest
                            {
                                InstanceId = instanceId
                            });

                            // Make sure we actually got a password
                            if (passwordResponse.Result.PasswordData != null)
                            {
                                // var password = passwordResponse.Result.GetDecryptedPassword(keyPair.KeyMaterial);
                                //   sr.WriteLine("The Windows Administrator password is: {0}", password);
                            }
                        }
                    } while (instance.State.Name == "pending" || instance.State.Name == "running");

                    /*
                     * // Terminate instance
                     * await ec2Client.TerminateInstancesAsync(new TerminateInstancesRequest
                     * {
                     *  InstanceIds = new List<string>() { instanceId }
                     * });
                     */

                    // Delete key pair created.
                    // await ec2Client.DeleteKeyPairAsync(new DeleteKeyPairRequest { KeyName = keyPair.KeyName });

                    // var s3Client = new AmazonS3Client();
                    var listResponse = s3Client.ListObjectsAsync(new ListObjectsRequest
                    {
                        BucketName = BUCKET_NAME
                    });
                    //AmazonS3Exception: The specified bucket does not exist
                    Debug.WriteLine(listResponse.Result.ToString());
                    if (listResponse.Result.S3Objects.Count > 0)
                    {
                        sr.WriteLine("Found results file {0} in S3 bucket {1}", listResponse.Result.S3Objects[0].Key, bucketName);
                    }

                    // Delete bucket created for sample.
                    //  await AmazonS3Util.DeleteS3BucketWithObjectsAsync(s3Client, BUCKET_NAME);
                    //  sr.WriteLine("Deleted S3 bucket created for sample.");

                    //   DeleteInstanceProfile();
                    //   sr.WriteLine("Delete Instance Profile created for sample.");

                    //   sr.WriteLine("Instance terminated, EXIT");
                }
                catch (AmazonEC2Exception ex)
                {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon EC2.");
                        sr.WriteLine("You can sign up for Amazon EC2 at http://aws.amazon.com/ec2");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Error Type: " + ex.ErrorType);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                    }
                }
            }
            //   return sb.ToString();
        }
예제 #11
0
 /// <summary>
 /// Describe Instances
 /// </summary>
 /// <param name="request">Describe Instances  request</param>
 /// <returns>Describe Instances  Response from the service</returns>
 /// <remarks>
 /// The DescribeInstances operation returns information about instances that you
 /// own.
 /// If you specify one or more instance IDs, Amazon EC2 returns information for
 /// those instances. If you do not specify instance IDs, Amazon EC2 returns
 /// information for all relevant instances. If you specify an invalid instance ID,
 /// a fault is returned. If you specify an instance that you do not own, it will
 /// not be included in the returned results.
 /// Recently terminated instances might appear in the returned results. This
 /// interval is usually less than one hour.
 ///
 /// </remarks>
 public DescribeInstancesResponse DescribeInstances(DescribeInstancesRequest request)
 {
     return(Invoke <DescribeInstancesResponse>("DescribeInstancesResponse.xml"));
 }
        public List <string> GetServers()
        {
            if (ConfigurationManager.AppSettings["AWS_ENV_NAME"] == null)
            {
                throw new ArgumentException("Missing AWS_ENV_NAME app setting");
            }

            if (ConfigurationManager.AppSettings["AWS_REGION"] == null)
            {
                throw new ArgumentException("Missing AWS_REGION app setting");
            }

            var environmentName = ConfigurationManager.AppSettings["AWS_ENV_NAME"];

            RegionEndpoint regionEndpoint = null;

            switch (ConfigurationManager.AppSettings["AWS_REGION"].Trim().ToLower())
            {
            case "us-east-1":
                regionEndpoint = RegionEndpoint.USEast1;
                break;

            case "us-west-1":
                regionEndpoint = RegionEndpoint.USWest1;
                break;

            case "us-west-2":
                regionEndpoint = RegionEndpoint.USWest2;
                break;

            case "eu-west-1":
                regionEndpoint = RegionEndpoint.EUWest1;
                break;

            case "ap-northeast-1":
                regionEndpoint = RegionEndpoint.APNortheast1;
                break;

            case "ap-southeast-1":
                regionEndpoint = RegionEndpoint.APSoutheast1;
                break;

            case "ap-southeast-2":
                regionEndpoint = RegionEndpoint.APSoutheast2;
                break;

            case "sa-east-1":
                regionEndpoint = RegionEndpoint.SAEast1;
                break;

            case "us-gov-west-1":
                regionEndpoint = RegionEndpoint.USGovCloudWest1;
                break;

            case "cn-north-1":
                regionEndpoint = RegionEndpoint.CNNorth1;
                break;
            }

            if (regionEndpoint == null)
            {
                throw new ArgumentException("Incorrect AWS_REGION endpoint");
            }

            // Create client
            var elasticBeanstalkClient = new AmazonElasticBeanstalkClient(regionEndpoint);

            // Get environment resources for environment
            var environmentResourcesRequest = new DescribeEnvironmentResourcesRequest {
                EnvironmentName = environmentName
            };
            var resourceResponse = elasticBeanstalkClient.DescribeEnvironmentResources(environmentResourcesRequest);

            // Create ELB client
            var elasticLoadBalancingClient = new AmazonElasticLoadBalancingClient(regionEndpoint);

            // Get load balancers for all environment's load balancers
            var loadBalancersRequest = new DescribeLoadBalancersRequest();

            foreach (var loadBalancer in resourceResponse.EnvironmentResources.LoadBalancers)
            {
                loadBalancersRequest.LoadBalancerNames.Add(loadBalancer.Name);
            }

            var describeLoadBalancersResponse = elasticLoadBalancingClient.DescribeLoadBalancers(loadBalancersRequest);

            // Create EC2 client
            var ec2Client = new AmazonEC2Client(regionEndpoint);

            // Get instances for all instance ids in all load balancers
            var instancesRequest = new DescribeInstancesRequest();

            // Get all instance ids for all load balancers
            foreach (var instance in describeLoadBalancersResponse.LoadBalancerDescriptions.SelectMany(loadBalancer => loadBalancer.Instances))
            {
                instancesRequest.InstanceIds.Add(instance.InstanceId);
            }

            var instancesResponse = ec2Client.DescribeInstances(instancesRequest);

            // Find all private dns names
            return((from reservation in instancesResponse.Reservations from instance in reservation.Instances select instance.PublicDnsName).ToList());
        }
예제 #13
0
        static string GetServiceOutput()
        {
            var           awsOptions = Configuration.GetAWSOptions();
            var           awsRegion  = awsOptions.Region.SystemName;
            StringBuilder sb         = new StringBuilder(1024);

            using (StringWriter sr = new StringWriter(sb))
            {
                sr.WriteLine("===========================================");
                sr.WriteLine("AWS SDK with DotNet Core 2.x -- Al Dass ([email protected])");
                sr.WriteLine("===========================================");

                // Print the number of Amazon EC2 instances.
                IAmazonEC2 ec2 = awsOptions.CreateServiceClient <IAmazonEC2>();
                DescribeInstancesRequest ec2Request = new DescribeInstancesRequest();

                try
                {
                    DescribeInstancesResponse ec2Response = ec2.DescribeInstancesAsync(ec2Request).Result;
                    int numInstances = 0;
                    numInstances = ec2Response.Reservations.Count;
                    sr.WriteLine($"You have {numInstances} Amazon EC2 instance(s) in the [{awsRegion}] region.");

                    foreach (var r in ec2Response.Reservations)
                    {
                        foreach (var i in r.Instances)
                        {
                            sr.WriteLine("===========================================");
                            sr.WriteLine($"        InstanceId: {i.InstanceId}");
                            sr.WriteLine($"             VpcId: {i.VpcId}");
                            sr.WriteLine($"     Current State: {i.State?.Name?.Value}");
                            sr.WriteLine($" Public DNS / [IP]: {i.PrivateDnsName} / [{i.PrivateIpAddress}]");
                            sr.WriteLine($"Private DNS / [IP]: {i.PublicDnsName} / [{i.PublicIpAddress}]");
                            sr.WriteLine($"              Tags:");
                            foreach (var t in i.Tags)
                            {
                                sr.WriteLine($"             {t.Key} : {t.Value}");
                                sr.WriteLine($"                ===========================================");
                            }

                            //if (i.State?.Name == InstanceStateName.Stopped)
                            //{
                            //    ec2.StartInstancesAsync(new StartInstancesRequest(new List<string> { i.InstanceId }));
                            //    var currState = string.Empty;
                            //    SpinWait.SpinUntil(() => {
                            //        Thread.Sleep(5 * 1000);
                            //        var dscInstRslt = ec2.DescribeInstancesAsync().Result;
                            //        var instCk = dscInstRslt.Reservations.FirstOrDefault(o => o.Instances.Any(o2 => o2.InstanceId == i.InstanceId))?.Instances.FirstOrDefault(o => o.InstanceId == i.InstanceId);
                            //        currState = instCk?.State?.Name;
                            //        //sr.WriteLine($"...start {i.InstanceId} - {currState}");
                            //        return currState != InstanceStateName.Stopped;
                            //    }, 60 * 1000);
                            //}

                            if (i.State?.Name == InstanceStateName.Running)
                            {
                                ec2.StopInstancesAsync(new StopInstancesRequest(new List <string> {
                                    i.InstanceId
                                }));
                                var currState = string.Empty;
                                SpinWait.SpinUntil(() => {
                                    Thread.Sleep(5 * 1000);
                                    var dscInstRslt = ec2.DescribeInstancesAsync().Result;
                                    var instCk      = dscInstRslt.Reservations.FirstOrDefault(o => o.Instances.Any(o2 => o2.InstanceId == i.InstanceId))?.Instances.FirstOrDefault(o => o.InstanceId == i.InstanceId);
                                    currState       = instCk?.State?.Name;
                                    //sr.WriteLine($"...stop {i.InstanceId} - {currState}");
                                    return(currState != InstanceStateName.Running);
                                }, 60 * 1000);
                            }
                        }
                    }
                }

                catch (AmazonEC2Exception ex)
                {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon EC2.");
                        sr.WriteLine("You can sign up for Amazon EC2 at http://aws.amazon.com/ec2");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Error Type: " + ex.ErrorType);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                    }
                }
                sr.WriteLine();

                // Print the number of Amazon SimpleDB domains.
                IAmazonSimpleDB    sdb        = awsOptions.CreateServiceClient <IAmazonSimpleDB>();
                ListDomainsRequest sdbRequest = new ListDomainsRequest();

                try
                {
                    ListDomainsResponse sdbResponse = sdb?.ListDomainsAsync(sdbRequest).Result;

                    sr.WriteLine($"You have {sdbResponse?.DomainNames?.Count} Amazon SimpleDB domain(s) in the [{awsRegion}] region.");
                }
                catch (AmazonSimpleDBException ex)
                {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon SimpleDB.");
                        sr.WriteLine("You can sign up for Amazon SimpleDB at http://aws.amazon.com/simpledb");
                    }
                    else
                    {
                        sr.WriteLine($"Caught Exception: {ex.Message}");
                        sr.WriteLine($"Response Status Code: {ex.StatusCode}");
                        sr.WriteLine($"Error Code: {ex.ErrorCode}");
                        sr.WriteLine($"Error Type: {ex.ErrorType}");
                        sr.WriteLine($"Request ID: {ex.RequestId}");
                    }
                }
                sr.WriteLine();

                // Print the number of Amazon S3 Buckets.
                IAmazonS3 s3Client = awsOptions.CreateServiceClient <IAmazonS3>();

                try
                {
                    ListBucketsResponse response = s3Client.ListBucketsAsync().Result;
                    int numBuckets = 0;
                    if (response.Buckets != null &&
                        response.Buckets.Count > 0)
                    {
                        numBuckets = response.Buckets.Count;
                    }
                    sr.WriteLine($"You have {numBuckets} Amazon S3 bucket(s).");
                }
                catch (AmazonS3Exception ex)
                {
                    if (ex.ErrorCode != null && (ex.ErrorCode.Equals("InvalidAccessKeyId") ||
                                                 ex.ErrorCode.Equals("InvalidSecurity")))
                    {
                        sr.WriteLine("Please check the provided AWS Credentials.");
                        sr.WriteLine("If you haven't signed up for Amazon S3, please visit http://aws.amazon.com/s3");
                    }
                    else
                    {
                        sr.WriteLine($"Caught Exception: {ex.Message}");
                        sr.WriteLine($"Response Status Code: {ex.StatusCode}");
                        sr.WriteLine($"Error Code: {ex.ErrorCode}");
                        sr.WriteLine($"Request ID: {ex.RequestId}");
                    }
                }
                sr.WriteLine("Press any key to continue...");
            }
            return(sb.ToString());
        }
예제 #14
0
파일: Program.cs 프로젝트: evrimulgen/2014
        public static string GetServiceOutput()
        {
            StringBuilder sb = new StringBuilder(1024);

            using (StringWriter sr = new StringWriter(sb))
            {
                NameValueCollection appConfig = ConfigurationManager.AppSettings;

                sr.WriteLine("===========================================");
                sr.WriteLine("<br />");
                sr.WriteLine("Welcome to the AWS .NET SDK!");
                sr.WriteLine("<br />");
                sr.WriteLine("===========================================");
                sr.WriteLine("<br />");

                // Print the number of Amazon EC2 instances.
                AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(
                    appConfig["AWSAccessKey"],
                    appConfig["AWSSecretKey"]
                    );
                DescribeInstancesRequest ec2Request = new DescribeInstancesRequest();

                try
                {
                    DescribeInstancesResponse ec2Response = ec2.DescribeInstances(ec2Request);
                    int numInstances = 0;
                    numInstances = ec2Response.DescribeInstancesResult.Reservation.Count;
                    sr.WriteLine("You have " + numInstances + " Amazon EC2 instance(s) running in the US-East (Northern Virginia) region.");
                    sr.WriteLine("<br />");
                }
                catch (AmazonEC2Exception ex)
                {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon EC2.");
                        sr.WriteLine("<br />");
                        sr.WriteLine("You can sign up for Amazon EC2 at http://aws.amazon.com/ec2");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Error Type: " + ex.ErrorType);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Request ID: " + ex.RequestId);
                        sr.WriteLine("<br />");
                        sr.WriteLine("XML: " + ex.XML);
                    }
                }
                sr.WriteLine("<br />");

                // Print the number of Amazon SimpleDB domains.
                AmazonSimpleDB sdb = AWSClientFactory.CreateAmazonSimpleDBClient(
                    appConfig["AWSAccessKey"],
                    appConfig["AWSSecretKey"]
                    );
                ListDomainsRequest sdbRequest = new ListDomainsRequest();

                try
                {
                    //ListDomainsResponse sdbResponse = sdb.ListDomains(sdbRequest);

                    //if (sdbResponse.IsSetListDomainsResult())
                    //{
                    //    int numDomains = 0;
                    //    numDomains = sdbResponse.ListDomainsResult.DomainName.Count;
                    //    sr.WriteLine("You have " + numDomains + " Amazon SimpleDB domain(s) in the US-East (Northern Virginia) region.");
                    //    sr.WriteLine("<br />");
                    //}
                }
                catch (AmazonSimpleDBException ex)
                {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon SimpleDB.");
                        sr.WriteLine("<br />");
                        sr.WriteLine("You can sign up for Amazon SimpleDB at http://aws.amazon.com/simpledb");
                    }
                    else
                    {
                        sr.WriteLine("<br />");
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Error Type: " + ex.ErrorType);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Request ID: " + ex.RequestId);
                        sr.WriteLine("<br />");
                        sr.WriteLine("XML: " + ex.XML);
                    }
                }
                sr.WriteLine("<br />");

                // Print the number of Amazon S3 Buckets.
                AmazonS3 s3Client = AWSClientFactory.CreateAmazonS3Client(
                    appConfig["AWSAccessKey"],
                    appConfig["AWSSecretKey"]
                    );

                try
                {
                    //ListBucketsResponse response = s3Client.ListBuckets();
                    //int numBuckets = 0;
                    //if (response.Buckets != null &&
                    //    response.Buckets.Count > 0)
                    //{
                    //    numBuckets = response.Buckets.Count;
                    //}
                    //sr.WriteLine("You have " + numBuckets + " Amazon S3 bucket(s) in the US Standard region.");
                    sr.WriteLine("<br />");
                }
                catch (AmazonS3Exception ex)
                {
                    if (ex.ErrorCode != null && (ex.ErrorCode.Equals("InvalidAccessKeyId") ||
                                                 ex.ErrorCode.Equals("InvalidSecurity")))
                    {
                        sr.WriteLine("Please check the provided AWS Credentials.");
                        sr.WriteLine("<br />");
                        sr.WriteLine("If you haven't signed up for Amazon S3, please visit http://aws.amazon.com/s3");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("<br />");
                        sr.WriteLine("Request ID: " + ex.RequestId);
                        sr.WriteLine("<br />");
                        sr.WriteLine("XML: " + ex.XML);
                    }
                }
            }
            return(sb.ToString());
        }
 public void DescribeInstancesAsync(DescribeInstancesRequest request, AmazonServiceCallback <DescribeInstancesRequest, DescribeInstancesResponse> callback, AsyncOptions options = null)
 {
     throw new System.NotImplementedException();
 }
예제 #16
0
 public DescribeInstancesResponse DescribeInstances(DescribeInstancesRequest request)
 {
     return(Util.RetryMethod <DescribeInstancesResponse>(() => DoDescribeInstances(request), RetryCount));
 }
예제 #17
0
        // enumerate VPC security group and create a security group for EC2-VPC
        public void create_lunch_checkstatus_for_istance()
        {
            //Create an Amazon EC2 Client Using the the SDK
            var ec2Client = new AmazonEC2Client();
            // enumerate VPC security group
            string        secGroupName = "my-sample-sg-vpc";
            SecurityGroup mySG         = null;
            string        vpcID        = "vpc-7cdc5904";

            Amazon.EC2.Model.Filter vpcFilter = new Amazon.EC2.Model.Filter
            {
                Name   = "vpc-id",
                Values = new List <string>()
                {
                    vpcID
                }
            };
            var dsgRequest = new DescribeSecurityGroupsRequest();

            dsgRequest.Filters.Add(vpcFilter);
            var dsgResponse            = ec2Client.DescribeSecurityGroups(dsgRequest);
            List <SecurityGroup> mySGs = dsgResponse.SecurityGroups;

            foreach (SecurityGroup item in mySGs)
            {
                Console.WriteLine("Existing security group: " + item.GroupId);
                if (item.GroupName == secGroupName)
                {
                    mySG = item;
                }
            }
            //create a security group for EC2-VPC
            if (mySG == null)
            {
                var newSGRequest = new CreateSecurityGroupRequest()
                {
                    GroupName   = secGroupName,
                    Description = "My sample security group for EC2-VPC",
                    VpcId       = vpcID
                };
                var csgResponse = ec2Client.CreateSecurityGroup(newSGRequest);
                Console.WriteLine();
                Console.WriteLine("New security group: " + csgResponse.GroupId);

                List <string> Groups = new List <string>()
                {
                    csgResponse.GroupId
                };
                var newSgRequest = new DescribeSecurityGroupsRequest()
                {
                    GroupIds = Groups
                };
                var newSgResponse = ec2Client.DescribeSecurityGroups(newSgRequest);
                mySG = newSgResponse.SecurityGroups[0];
            }
            //Create and initialize an IpPermission object.

            //iprange = the IP addresses of your local machine
            string ipRange = "0.0.0.0/0";

            List <string> ranges = new List <string>()
            {
                ipRange
            };

            var ipPermission = new IpPermission()
            {
                IpProtocol = "tcp",
                //The beginning and end of the port range. This example specifies a single port, 3389, which is used to communicate with Windows over RDP.
                //it should be changed if u launch a linux instance (use 22 insted )
                FromPort = 3389,
                ToPort   = 3389,
                IpRanges = ranges
            };
            //Create and initialize an AuthorizeSecurityGroupIngressRequest object.

            var ingressRequest = new AuthorizeSecurityGroupIngressRequest();

            ingressRequest.GroupId = mySG.GroupId;
            ingressRequest.IpPermissions.Add(ipPermission);
            //Pass the request object to the AuthorizeSecurityGroupIngress method, which returns an AuthorizeSecurityGroupIngressResponse object.
            var ingressResponse = ec2Client.AuthorizeSecurityGroupIngress(ingressRequest);

            Console.WriteLine("New RDP rule for: " + ipRange);

            //Create and initialize a network interface.for lunch enstance
            string subnetID = "subnet-048d6c59";

            List <string> groups = new List <string>()
            {
                mySG.GroupId
            };
            var eni = new InstanceNetworkInterfaceSpecification()
            {
                DeviceIndex = 0,
                SubnetId    = subnetID,
                Groups      = groups,
                AssociatePublicIpAddress = true
            };
            List <InstanceNetworkInterfaceSpecification> enis = new List <InstanceNetworkInterfaceSpecification>()
            {
                eni
            };

            string amiID       = "ami-06a0d33fc8d328de0";
            string keyPairName = "my-sample-key";

            var launchRequest = new RunInstancesRequest()
            {
                ImageId           = amiID,
                InstanceType      = "m3.large",
                MinCount          = 1,
                MaxCount          = 1,
                KeyName           = keyPairName,
                NetworkInterfaces = enis
            };

            //launch
            RunInstancesResponse launchResponse = ec2Client.RunInstances(launchRequest);

            List <String> instanceIds = new List <string>();

            foreach (Instance instance in launchResponse.Reservation.Instances)
            {
                Console.WriteLine(instance.InstanceId);
                instanceIds.Add(instance.InstanceId);
            }
            //check the status of the enstance
            var instanceRequest = new DescribeInstancesRequest();

            instanceRequest.InstanceIds = new List <string>();
            instanceRequest.InstanceIds.AddRange(instanceIds);
            var response = ec2Client.DescribeInstances(instanceRequest);

            Console.WriteLine(response.Reservations[0].Instances[0].State.Name);
        }
예제 #18
0
        public static string GetServiceOutput()
        {
            StringBuilder sb = new StringBuilder(1024);

            using (StringWriter sr = new StringWriter(sb)) {
                sr.WriteLine("===========================================");
                sr.WriteLine("Welcome to the AWS .NET SDK!");
                sr.WriteLine("===========================================");

                // Print the number of Amazon EC2 instances.
                IAmazonEC2 ec2 = new AmazonEC2Client();
                DescribeInstancesRequest ec2Request = new DescribeInstancesRequest();

                try {
                    DescribeInstancesResponse ec2Response = ec2.DescribeInstances(ec2Request);
                    int numInstances = 0;
                    numInstances = ec2Response.Reservations.Count;
                    sr.WriteLine(string.Format("You have {0} Amazon EC2 instance(s) running in the {1} region.",
                                               numInstances, ConfigurationManager.AppSettings["AWSRegion"]));
                } catch (AmazonEC2Exception ex) {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon EC2.");
                        sr.WriteLine("You can sign up for Amazon EC2 at http://aws.amazon.com/ec2");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Error Type: " + ex.ErrorType);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                    }
                }
                sr.WriteLine();

                // Print the number of Amazon SimpleDB domains.
                IAmazonSimpleDB    sdb        = new AmazonSimpleDBClient();
                ListDomainsRequest sdbRequest = new ListDomainsRequest();

                try {
                    ListDomainsResponse sdbResponse = sdb.ListDomains(sdbRequest);

                    int numDomains = 0;
                    numDomains = sdbResponse.DomainNames.Count;
                    sr.WriteLine(string.Format("You have {0} Amazon SimpleDB domain(s) in the {1} region.",
                                               numDomains, ConfigurationManager.AppSettings["AWSRegion"]));
                } catch (AmazonSimpleDBException ex) {
                    if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure"))
                    {
                        sr.WriteLine("The account you are using is not signed up for Amazon SimpleDB.");
                        sr.WriteLine("You can sign up for Amazon SimpleDB at http://aws.amazon.com/simpledb");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Error Type: " + ex.ErrorType);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                    }
                }
                sr.WriteLine();

                // Print the number of Amazon S3 Buckets.
                IAmazonS3 s3Client = new AmazonS3Client();

                try {
                    ListBucketsResponse response = s3Client.ListBuckets();
                    int numBuckets = 0;
                    if (response.Buckets != null &&
                        response.Buckets.Count > 0)
                    {
                        numBuckets = response.Buckets.Count;
                    }
                    sr.WriteLine("You have " + numBuckets + " Amazon S3 bucket(s).");
                } catch (AmazonS3Exception ex) {
                    if (ex.ErrorCode != null && (ex.ErrorCode.Equals("InvalidAccessKeyId") ||
                                                 ex.ErrorCode.Equals("InvalidSecurity")))
                    {
                        sr.WriteLine("Please check the provided AWS Credentials.");
                        sr.WriteLine("If you haven't signed up for Amazon S3, please visit http://aws.amazon.com/s3");
                    }
                    else
                    {
                        sr.WriteLine("Caught Exception: " + ex.Message);
                        sr.WriteLine("Response Status Code: " + ex.StatusCode);
                        sr.WriteLine("Error Code: " + ex.ErrorCode);
                        sr.WriteLine("Request ID: " + ex.RequestId);
                    }
                }
                sr.WriteLine("Press any key to continue...");
            }
            return(sb.ToString());
        }
예제 #19
0
        public List <CEc2Instance> describeInstances()
        {
            List <CEc2Instance> myInstances = new List <CEc2Instance>();

            try
            {
                DescribeInstancesRequest  request  = new DescribeInstancesRequest();
                DescribeInstancesResponse response = _service.DescribeInstances(request);
                if (response.IsSetDescribeInstancesResult())
                {
                    DescribeInstancesResult describeInstancesResult = response.DescribeInstancesResult;
                    List <Reservation>      reservationList         = describeInstancesResult.Reservation;


                    foreach (Reservation reservation in reservationList)
                    {
                        List <RunningInstance> runningInstanceList = reservation.RunningInstance;
                        foreach (RunningInstance runningInstance in runningInstanceList)
                        {
                            CEc2Instance inst = new CEc2Instance();

                            if (runningInstance.IsSetInstanceId())
                            {
                                inst.instanceId = runningInstance.InstanceId;
                            }
                            if (runningInstance.IsSetImageId())
                            {
                                inst.imageId = runningInstance.ImageId;
                            }
                            if (runningInstance.IsSetInstanceState())
                            {
                                InstanceState instanceState = runningInstance.InstanceState;
                                if (instanceState.IsSetName())
                                {
                                    inst.status = instanceState.Name;
                                }
                            }
                            if (runningInstance.IsSetPublicDnsName())
                            {
                                inst.publicDns = runningInstance.PublicDnsName;
                            }
                            if (runningInstance.IsSetKeyName())
                            {
                                inst.keyPairName = runningInstance.KeyName;
                            }
                            if (runningInstance.IsSetInstanceType())
                            {
                                inst.type = runningInstance.InstanceType;
                            }
                            if (runningInstance.IsSetLaunchTime())
                            {
                                inst.launchTime = runningInstance.LaunchTime;
                            }
                            if (runningInstance.IsSetPlacement())
                            {
                                if (runningInstance.Placement.IsSetAvailabilityZone())
                                {
                                    inst.zone = runningInstance.Placement.AvailabilityZone;
                                }
                            }
                            if (runningInstance.IsSetPlatform())
                            {
                                inst.platform = runningInstance.Platform;
                            }

                            myInstances.Add(inst);
                        }
                    }
                }
            }
            catch (AmazonEC2Exception ex)
            {
                throw new Exception("Caught Exception: " + ex.XML);
            }
            return(myInstances);
        }
예제 #20
0
 /// <summary>
 ///  查询kafka实例列表
 /// </summary>
 /// <param name="request">请求参数信息</param>
 /// <returns>请求结果信息</returns>
 public DescribeInstancesResponse DescribeInstances(DescribeInstancesRequest request)
 {
     return(new DescribeInstancesExecutor().Client(this).Execute <DescribeInstancesResponse, DescribeInstancesResult, DescribeInstancesRequest>(request));
 }
예제 #21
0
 public DescribeInstancesResponse DescribeInstances(DescribeInstancesRequest request)
 {
     throw new NotImplementedException();
 }
        public List <InstanceDetail> GetVMProperties()
        {
            List <AWSProfile> profile;

            profile = SqlHelper.GetAWSAccounts();
            List <InstanceDetail> profilelist = new List <InstanceDetail>();

            //foreach (var profile_ in profile)
            //{
            //    Amazon.Util.ProfileManager.RegisterProfile(profile_.ProfileName, profile_.Accesskey, profile_.Secretkey);
            //}

            try
            {
                foreach (var profile_ in profile)
                {
                    var regions = Amazon.RegionEndpoint.EnumerableAllRegions;
                    //Amazon.Runtime.AWSCredentials credentials = new Amazon.Runtime.StoredProfileAWSCredentials(profile_.ProfileName);
                    foreach (var r in regions)
                    {
                        string region_;
                        if (r.SystemName != "us-gov-west-1" && r.SystemName != "cn-north-1")
                        {
                            region_ = r.SystemName;
                            var region = RegionEndpoint.GetBySystemName(region_);

                            AmazonEC2Client           ec2            = new AmazonEC2Client(profile_.Accesskey, profile_.Secretkey, region);
                            DescribeInstancesRequest  request        = new DescribeInstancesRequest();
                            DescribeInstancesResponse response       = ec2.DescribeInstances(request);
                            DescribeVolumesRequest    volumeRequest  = new DescribeVolumesRequest();
                            DescribeVolumesResponse   volumeResponse = ec2.DescribeVolumes(volumeRequest);
                            int size = 0;
                            foreach (var volume in volumeResponse.Volumes)
                            {
                                size += volume.Size;
                            }
                            List <Reservation> result = response.Reservations;
                            foreach (var item in result)
                            {
                                List <Instance> results = item.Instances;
                                foreach (var instance in results)
                                {
                                    InstanceDetail p = new InstanceDetail();
                                    p.InstanceId = instance.InstanceId.ToString();
                                    DescribeInstanceStatusRequest req = new DescribeInstanceStatusRequest();
                                    req.InstanceIds.Add(p.InstanceId);
                                    DescribeInstanceStatusResponse resp = ec2.DescribeInstanceStatus(req);
                                    var statuses = resp.InstanceStatuses;
                                    foreach (var status in statuses)
                                    {
                                        p.InstanceState = status.Status.Status;
                                    }

                                    if (p.InstanceState == null)
                                    {
                                        p.InstanceState = "Not Available";
                                    }

                                    p.Region   = r.SystemName;
                                    p.DiskSize = (size / result.Count).ToString() + " GB"; //
                                    if (instance.PublicIpAddress != null)
                                    {
                                        p.IpAddress = instance.PublicIpAddress;
                                    }
                                    else
                                    {
                                        p.IpAddress = "Not Assigned";
                                    }

                                    p.ProfileName   = profile_.ProfileName;
                                    p.InstanceType  = instance.InstanceType;
                                    p.Status        = instance.State.Name.Value;
                                    p.ResourceGroup = "Not Applicable";
                                    if (instance.IamInstanceProfile != null)
                                    {
                                        p.MachineName = instance.IamInstanceProfile.Arn;
                                    }
                                    else
                                    {
                                        p.MachineName = "Not Assigned";
                                    }
                                    p.accountId = profile_.accountId;
                                    var type = instance.InstanceType;
                                    p.Type = "virtualMachines";
                                    var b = instance.Tags.Count;
                                    if (b != 0)
                                    {
                                        p.MachineName = instance.Tags[0].Value;
                                    }
                                    if (instance.Platform != null)
                                    {
                                        p.OSType = instance.Platform;
                                    }
                                    else
                                    {
                                        p.OSType = "Amazon Linux";
                                    }

                                    profilelist.Add(p);
                                }
                            }
                        }
                    }
                }

                return(profilelist);
            }
            catch (Exception e)
            {
                this.log.Error(e);
                return(null);
            }
        }
예제 #23
0
        public List <EC2Instance> GetEC2InstanceList(IAmazonEC2 ec2)
        {
            // List<string> ec2list = new List<string>();
            List <EC2Instance> ec2list;

            ec2list = new List <EC2Instance>();
            List <GroupIdentifier> sg;
            List <string>          sgstrlist;
            List <string>          bdevicelist;

            try
            {
                DescribeInstancesRequest  ec2Request  = new DescribeInstancesRequest();
                DescribeInstancesResponse ec2Response = ec2.DescribeInstances(ec2Request);
                foreach (Reservation reservation in ec2Response.Reservations)
                {
                    foreach (Instance instance in reservation.Instances)
                    {
                        EC2Instance EC2Ins;
                        EC2Ins      = new EC2Instance();
                        sg          = new List <GroupIdentifier>();
                        sgstrlist   = new List <string>();
                        bdevicelist = new List <string>();

                        EC2Ins.setid(instance.InstanceId);
                        EC2Ins.setName(instance.PrivateDnsName);
                        EC2Ins.setPrivateDNSName(instance.PrivateDnsName);
                        EC2Ins.setPrivateIP(instance.PrivateIpAddress);
                        EC2Ins.setPublicIP(instance.PublicIpAddress);
                        EC2Ins.setType(instance.InstanceType);
                        EC2Ins.setPublicDNSName(instance.PublicDnsName);
                        EC2Ins.setTokenName(instance.ClientToken);
                        EC2Ins.setPlatform(instance.Platform);
                        EC2Ins.setState(instance.State.Name.Value);
                        EC2Ins.setPlacment(instance.Placement.AvailabilityZone);
                        // EC2Ins.setTagName(instance.Tags[0].Value);

                        EC2Ins.setKeyName(instance.KeyName);
                        EC2Ins.setVpcId(instance.VpcId);
                        EC2Ins.setSubnetId(instance.SubnetId);
                        EC2Ins.setAmiId(instance.ImageId);

                        foreach (Amazon.EC2.Model.Tag EC2tag in instance.Tags)
                        {
                            if (EC2tag.Key == "Name")
                            {
                                EC2Ins.setTagName(EC2tag.Value);
                            }
                        }

                        // EC2Ins.setBlockDevice()
                        //  instance.BlockDeviceMappings

                        foreach (InstanceBlockDeviceMapping bdevice in instance.BlockDeviceMappings)
                        {
                            //  string bdstr = bdevice.DeviceName  + ":"  + ":" + bdevice.Ebs; bdevice.
                            bdevicelist.Add(bdevice.DeviceName + ":" + ":" + bdevice.Ebs.Status + ":" + bdevice.Ebs.VolumeId);
                        }

                        EC2Ins.setSG(sgstrlist);

                        foreach (GroupIdentifier sgi in instance.SecurityGroups)
                        {
                            sgstrlist.Add(sgi.GroupId);
                            // sgi.GroupId
                        }

                        EC2Ins.setBlockDevice(bdevicelist);

                        Monitoring m;
                        List <InstanceNetworkInterface> ln;
                        ln = new List <InstanceNetworkInterface>();
                        m  = instance.Monitoring;
                        ln = instance.NetworkInterfaces;

                        //instance.NetworkInterfaces
                        //instance.

                        ec2list.Add(EC2Ins);

                        //  ec2list.Add(instance.InstanceId);

                        /*   instance.ImageId;
                         * instance.KeyName;
                         * instance.LaunchTime;
                         * instance.Placement;
                         * instance.Platform;
                         * instance.RootDeviceType;
                         * instance.SecurityGroups;
                         * instance.SriovNetSupport; //enhance network is supported
                         * instance.State;
                         * instance.StateReason;
                         * instance.SubnetId;
                         * instance.Tags;
                         * instance.VirtualizationType;
                         * instance.VpcId
                         * instance.KeyName;
                         * instance.VpcId; */
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n"); // + ex.StackTrace);
            }

            return(ec2list);
        }