コード例 #1
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonNeptuneConfig config = new AmazonNeptuneConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonNeptuneClient client = new AmazonNeptuneClient(creds, config);

            DescribeDBInstancesResponse resp = new DescribeDBInstancesResponse();

            do
            {
                DescribeDBInstancesRequest req = new DescribeDBInstancesRequest
                {
                    Marker = resp.Marker
                    ,
                    MaxRecords = maxItems
                };

                resp = client.DescribeDBInstances(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.DBInstances)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.Marker));
        }
コード例 #2
0
        static void Main(string[] args)
        {
            try
            {
                //create RDS instance
                client = new AmazonRDSClient();
                CreateDBInstanceRequest request = new CreateDBInstanceRequest("packtpubRDS", 5, "db.m1.small", "mysql", "dbadmin", "password");
                client.CreateDBInstance(request);

                // list RDS instances
                DescribeDBInstancesRequest  request2  = new DescribeDBInstancesRequest();
                DescribeDBInstancesResponse response2 = new DescribeDBInstancesResponse();
                response2 = client.DescribeDBInstances(request2);
                foreach (DBInstance entry in response2.DBInstances)
                {
                    Console.WriteLine(entry.DBInstanceIdentifier);
                }

                Console.WriteLine("Waiting for 60 seconds before deleting the RDS instance");
                System.Threading.Thread.Sleep(50000);

                // delete RDS instance
                DeleteDBInstanceRequest delete_request = new DeleteDBInstanceRequest("packtpubRDS");
                delete_request.SkipFinalSnapshot = true;
                client.DeleteDBInstance(delete_request);
            }
            catch (AmazonRDSException exception)
            {
                Console.WriteLine("Error!");
                Console.WriteLine(exception.ErrorCode);
                Console.ReadKey();
            }
        }
コード例 #3
0
 public void Describe(string identifier)
 {
     var request = new DescribeDBInstancesRequest {
         DBInstanceIdentifier = identifier
     };
     DescribeDBInstancesResponse response = Client.DescribeDBInstances(request);
 }
コード例 #4
0
        /// <summary>
        /// <para> Returns information about provisioned RDS instances. This API supports pagination. </para>
        /// </summary>
        ///
        /// <param name="describeDBInstancesRequest">Container for the necessary parameters to execute the DescribeDBInstances service method on
        ///           AmazonRDS.</param>
        ///
        /// <returns>The response from the DescribeDBInstances service method, as returned by AmazonRDS.</returns>
        ///
        /// <exception cref="DBInstanceNotFoundException"/>
        public DescribeDBInstancesResponse DescribeDBInstances(DescribeDBInstancesRequest describeDBInstancesRequest)
        {
            IRequest <DescribeDBInstancesRequest> request  = new DescribeDBInstancesRequestMarshaller().Marshall(describeDBInstancesRequest);
            DescribeDBInstancesResponse           response = Invoke <DescribeDBInstancesRequest, DescribeDBInstancesResponse> (request, this.signer, DescribeDBInstancesResponseUnmarshaller.GetInstance());

            return(response);
        }
コード例 #5
0
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            DescribeDBInstancesResponse response = new DescribeDBInstancesResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.IsStartElement)
                {
                    if (context.TestExpression("DescribeDBInstancesResult", 2))
                    {
                        UnmarshallResult(context, response);
                        continue;
                    }

                    if (context.TestExpression("ResponseMetadata", 2))
                    {
                        response.ResponseMetadata = ResponseMetadataUnmarshaller.Instance.Unmarshall(context);
                    }
                }
            }

            return(response);
        }
コード例 #6
0
 public virtual void failover()
 {
     try
     {
         //fail over rds which is in the same AZ
         // Note: This turns the asynchronous call into a synchronous one
         DescribeDBInstancesResponse describeDBInstancesResult = RDS_CLIENT.DescribeDBInstancesAsync().GetAwaiter().GetResult();
         IList <DBInstance>          dbInstances = describeDBInstancesResult.DBInstances;
         string dbInstancedId = null;
         foreach (DBInstance dbInstance in dbInstances)
         {
             if (string.Equals(dbInstance.DBSubnetGroup.VpcId, vpcId, StringComparison.OrdinalIgnoreCase) &&
                 dbInstance.MultiAZ && dbInstance.StatusInfos.Count == 0)
             {
                 dbInstancedId = dbInstance.DBInstanceIdentifier;
             }
         }
         if (!string.IsNullOrEmpty(dbInstancedId))
         {
             RebootDBInstanceRequest rebootDBInstanceRequest = new RebootDBInstanceRequest();
             rebootDBInstanceRequest.DBInstanceIdentifier = dbInstancedId;
             rebootDBInstanceRequest.ForceFailover        = true;
             Console.WriteLine("Rebooting dbInstanceId " + dbInstancedId);
             // Note: This turns the asynchronous call into a synchronous one
             RDS_CLIENT.RebootDBInstanceAsync(rebootDBInstanceRequest).GetAwaiter().GetResult();
         }
     }
     catch (Exception exception)
     {
         Console.WriteLine("Unkown exception occured " + exception.Message);
     }
 }
コード例 #7
0
        private static void UnmarshallResult(XmlUnmarshallerContext context, DescribeDBInstancesResponse response)
        {
            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            if (context.IsStartOfDocument)
            {
                targetDepth += 2;
            }

            while (context.ReadAtDepth(originalDepth))
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("DBInstances/DBInstance", targetDepth))
                    {
                        var unmarshaller = DBInstanceUnmarshaller.Instance;
                        var item         = unmarshaller.Unmarshall(context);
                        response.DBInstances.Add(item);
                        continue;
                    }
                    if (context.TestExpression("Marker", targetDepth))
                    {
                        var unmarshaller = StringUnmarshaller.Instance;
                        response.Marker = unmarshaller.Unmarshall(context);
                        continue;
                    }
                }
            }

            return;
        }
        public static DescribeDBInstancesResponse Unmarshall(UnmarshallerContext context)
        {
            DescribeDBInstancesResponse describeDBInstancesResponse = new DescribeDBInstancesResponse();

            describeDBInstancesResponse.HttpResponse     = context.HttpResponse;
            describeDBInstancesResponse.RequestId        = context.StringValue("DescribeDBInstances.RequestId");
            describeDBInstancesResponse.PageNumber       = context.IntegerValue("DescribeDBInstances.PageNumber");
            describeDBInstancesResponse.TotalRecordCount = context.IntegerValue("DescribeDBInstances.TotalRecordCount");
            describeDBInstancesResponse.PageRecordCount  = context.IntegerValue("DescribeDBInstances.PageRecordCount");

            List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance> describeDBInstancesResponse_items = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance>();

            for (int i = 0; i < context.Length("DescribeDBInstances.Items.Length"); i++)
            {
                DescribeDBInstancesResponse.DescribeDBInstances_DBInstance dBInstance = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance();
                dBInstance.InsId                 = context.IntegerValue("DescribeDBInstances.Items[" + i + "].InsId");
                dBInstance.DBInstanceId          = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceId");
                dBInstance.DBInstanceDescription = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceDescription");
                dBInstance.PayType               = context.StringValue("DescribeDBInstances.Items[" + i + "].PayType");
                dBInstance.DBInstanceType        = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceType");
                dBInstance.RegionId              = context.StringValue("DescribeDBInstances.Items[" + i + "].RegionId");
                dBInstance.ExpireTime            = context.StringValue("DescribeDBInstances.Items[" + i + "].ExpireTime");
                dBInstance.DBInstanceStatus      = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceStatus");
                dBInstance.Engine                = context.StringValue("DescribeDBInstances.Items[" + i + "].Engine");
                dBInstance.DBInstanceNetType     = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceNetType");
                dBInstance.ConnectionMode        = context.StringValue("DescribeDBInstances.Items[" + i + "].ConnectionMode");
                dBInstance.LockMode              = context.StringValue("DescribeDBInstances.Items[" + i + "].LockMode");
                dBInstance.DBInstanceClass       = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceClass");
                dBInstance.InstanceNetworkType   = context.StringValue("DescribeDBInstances.Items[" + i + "].InstanceNetworkType");
                dBInstance.VpcCloudInstanceId    = context.StringValue("DescribeDBInstances.Items[" + i + "].VpcCloudInstanceId");
                dBInstance.LockReason            = context.StringValue("DescribeDBInstances.Items[" + i + "].LockReason");
                dBInstance.ZoneId                = context.StringValue("DescribeDBInstances.Items[" + i + "].ZoneId");
                dBInstance.MutriORsignle         = context.BooleanValue("DescribeDBInstances.Items[" + i + "].MutriORsignle");
                dBInstance.CreateTime            = context.StringValue("DescribeDBInstances.Items[" + i + "].CreateTime");
                dBInstance.EngineVersion         = context.StringValue("DescribeDBInstances.Items[" + i + "].EngineVersion");
                dBInstance.GuardDBInstanceId     = context.StringValue("DescribeDBInstances.Items[" + i + "].GuardDBInstanceId");
                dBInstance.TempDBInstanceId      = context.StringValue("DescribeDBInstances.Items[" + i + "].TempDBInstanceId");
                dBInstance.MasterInstanceId      = context.StringValue("DescribeDBInstances.Items[" + i + "].MasterInstanceId");
                dBInstance.VpcId                 = context.StringValue("DescribeDBInstances.Items[" + i + "].VpcId");
                dBInstance.VSwitchId             = context.StringValue("DescribeDBInstances.Items[" + i + "].VSwitchId");
                dBInstance.ReplicateId           = context.StringValue("DescribeDBInstances.Items[" + i + "].ReplicateId");
                dBInstance.ResourceGroupId       = context.StringValue("DescribeDBInstances.Items[" + i + "].ResourceGroupId");

                List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ReadOnlyDBInstanceId> dBInstance_readOnlyDBInstanceIds = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ReadOnlyDBInstanceId>();
                for (int j = 0; j < context.Length("DescribeDBInstances.Items[" + i + "].ReadOnlyDBInstanceIds.Length"); j++)
                {
                    DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ReadOnlyDBInstanceId readOnlyDBInstanceId = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ReadOnlyDBInstanceId();
                    readOnlyDBInstanceId.DBInstanceId = context.StringValue("DescribeDBInstances.Items[" + i + "].ReadOnlyDBInstanceIds[" + j + "].DBInstanceId");

                    dBInstance_readOnlyDBInstanceIds.Add(readOnlyDBInstanceId);
                }
                dBInstance.ReadOnlyDBInstanceIds = dBInstance_readOnlyDBInstanceIds;

                describeDBInstancesResponse_items.Add(dBInstance);
            }
            describeDBInstancesResponse.Items = describeDBInstancesResponse_items;

            return(describeDBInstancesResponse);
        }
コード例 #9
0
        public static DescribeDBInstancesResponse Unmarshall(UnmarshallerContext context)
        {
            DescribeDBInstancesResponse describeDBInstancesResponse = new DescribeDBInstancesResponse()
            {
                HttpResponse     = context.HttpResponse,
                RequestId        = context.StringValue("DescribeDBInstances.RequestId"),
                PageNumber       = context.IntegerValue("DescribeDBInstances.PageNumber"),
                TotalRecordCount = context.IntegerValue("DescribeDBInstances.TotalRecordCount"),
                PageRecordCount  = context.IntegerValue("DescribeDBInstances.PageRecordCount")
            };
            List <DescribeDBInstancesResponse.DBInstance> items = new List <DescribeDBInstancesResponse.DBInstance>();

            for (int i = 0; i < context.Length("DescribeDBInstances.Items.Length"); i++)
            {
                DescribeDBInstancesResponse.DBInstance dBInstance = new DescribeDBInstancesResponse.DBInstance()
                {
                    InsId                 = context.IntegerValue($"DescribeDBInstances.Items[{i}].InsId"),
                    DBInstanceId          = context.StringValue($"DescribeDBInstances.Items[{i}].DBInstanceId"),
                    DBInstanceDescription = context.StringValue($"DescribeDBInstances.Items[{i}].DBInstanceDescription"),
                    PayType               = context.StringValue($"DescribeDBInstances.Items[{i}].PayType"),
                    DBInstanceType        = context.EnumValue <DescribeDBInstancesResponse.DBInstance.DBInstanceTypeEnum>($"DescribeDBInstances.Items[{i}].DBInstanceType"),
                    RegionId              = context.StringValue($"DescribeDBInstances.Items[{i}].RegionId"),
                    ExpireTime            = context.StringValue($"DescribeDBInstances.Items[{i}].ExpireTime"),
                    DBInstanceStatus      = context.EnumValue <DescribeDBInstancesResponse.DBInstance.DBInstanceStatusEnum>($"DescribeDBInstances.Items[{i}].DBInstanceStatus"),
                    Engine                = context.StringValue($"DescribeDBInstances.Items[{i}].Engine"),
                    DBInstanceNetType     = context.EnumValue <DescribeDBInstancesResponse.DBInstance.DBInstanceNetTypeEnum>($"DescribeDBInstances.Items[{i}].DBInstanceNetType"),
                    ConnectionMode        = context.EnumValue <DescribeDBInstancesResponse.DBInstance.ConnectionModeEnum>($"DescribeDBInstances.Items[{i}].ConnectionMode"),
                    LockMode              = context.EnumValue <DescribeDBInstancesResponse.DBInstance.LockModeEnum>($"DescribeDBInstances.Items[{i}].LockMode"),
                    InstanceNetworkType   = context.StringValue($"DescribeDBInstances.Items[{i}].InstanceNetworkType"),
                    LockReason            = context.StringValue($"DescribeDBInstances.Items[{i}].LockReason"),
                    ZoneId                = context.StringValue($"DescribeDBInstances.Items[{i}].ZoneId"),
                    MutriORsignle         = context.BooleanValue($"DescribeDBInstances.Items[{i}].MutriORsignle"),
                    CreateTime            = context.StringValue($"DescribeDBInstances.Items[{i}].CreateTime"),
                    EngineVersion         = context.StringValue($"DescribeDBInstances.Items[{i}].EngineVersion"),
                    GuardDBInstanceId     = context.StringValue($"DescribeDBInstances.Items[{i}].GuardDBInstanceId"),
                    TempDBInstanceId      = context.StringValue($"DescribeDBInstances.Items[{i}].TempDBInstanceId"),
                    MasterInstanceId      = context.StringValue($"DescribeDBInstances.Items[{i}].MasterInstanceId"),
                    VpcId                 = context.StringValue($"DescribeDBInstances.Items[{i}].VpcId")
                };
                List <DescribeDBInstancesResponse.DBInstance.ReadOnlyDBInstanceId> readOnlyDBInstanceIds = new List <DescribeDBInstancesResponse.DBInstance.ReadOnlyDBInstanceId>();
                for (int j = 0; j < context.Length($"DescribeDBInstances.Items[{i}].ReadOnlyDBInstanceIds.Length"); j++)
                {
                    DescribeDBInstancesResponse.DBInstance.ReadOnlyDBInstanceId readOnlyDBInstanceId = new DescribeDBInstancesResponse.DBInstance.ReadOnlyDBInstanceId()
                    {
                        DBInstanceId = context.StringValue($"DescribeDBInstances.Items[{i}].ReadOnlyDBInstanceIds[{j}].DBInstanceId")
                    };
                    readOnlyDBInstanceIds.Add(readOnlyDBInstanceId);
                }
                dBInstance.ReadOnlyDBInstanceIds = readOnlyDBInstanceIds;

                items.Add(dBInstance);
            }
            describeDBInstancesResponse.Items = items;

            return(describeDBInstancesResponse);
        }
コード例 #10
0
        public List <DBDetail> GetDBProperties()
        {
            List <AWSProfile> profile;
            List <DBDetail>   list = new List <DBDetail>();

            profile = SqlHelper.GetAWSAccounts();
            //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_);
                            AmazonRDSClient             rds      = new AmazonRDSClient(profile_.Accesskey, profile_.Secretkey, region);
                            DescribeDBInstancesRequest  request  = new DescribeDBInstancesRequest();
                            DescribeDBInstancesResponse response = rds.DescribeDBInstances(request);
                            List <DBInstance>           result   = response.DBInstances;
                            foreach (var db in result)
                            {
                                DBDetail dbdetail = new DBDetail();
                                dbdetail.Name        = db.DBInstanceIdentifier;
                                dbdetail.Size        = db.AllocatedStorage.ToString() + " GB";
                                dbdetail.Status      = db.DBInstanceStatus;
                                dbdetail.Type        = db.StorageType;
                                dbdetail.Key         = db.DbiResourceId;
                                dbdetail.ServerName  = db.Engine;
                                dbdetail.accountId   = profile_.accountId;
                                dbdetail.ProfileName = profile_.ProfileName;
                                dbdetail.Region      = region_;
                                list.Add(dbdetail);
                            }
                        }
                    }
                }

                return(list);
            }
            catch (Exception e)
            {
                this.log.Error(e);
                return(null);
            }
        }
コード例 #11
0
ファイル: Default.aspx.cs プロジェクト: melnx/Bermuda
        private void WriteRDSInfo()
        {
            StringBuilder output = new StringBuilder();
            DescribeDBInstancesRequest  rdsRequest  = new DescribeDBInstancesRequest();
            DescribeDBInstancesResponse rdsResponse = rds.DescribeDBInstances(rdsRequest);

            foreach (DBInstance dbInstance in rdsResponse.DescribeDBInstancesResult.DBInstances)
            {
                output.AppendFormat("<li>{0}</li>", dbInstance.DBName);
            }

            this.rdsPlaceholder.Text = output.ToString();
        }
コード例 #12
0
        public void Setup()
        {
            _firstPage = new DescribeDBInstancesResponse
            {
                Marker      = "token-1",
                DBInstances = new List <DBInstance>
                {
                    new DBInstance {
                        DBInstanceIdentifier = "DBInstance-1"
                    }
                }
            };
            _secondPage = new DescribeDBInstancesResponse
            {
                Marker      = "token-2",
                DBInstances = new List <DBInstance>
                {
                    new DBInstance {
                        DBInstanceIdentifier = "DBInstance-2"
                    }
                }
            };
            _thirdPage = new DescribeDBInstancesResponse
            {
                DBInstances = new List <DBInstance>
                {
                    new DBInstance {
                        DBInstanceIdentifier = "DBInstance-3"
                    }
                }
            };

            var rdsMock = new Mock <IAmazonRDS>();

            rdsMock.Setup(s => s.DescribeDBInstancesAsync(
                              It.Is <DescribeDBInstancesRequest>(r => r.Marker == null),
                              It.IsAny <CancellationToken>()))
            .ReturnsAsync(_firstPage);

            rdsMock.Setup(s => s.DescribeDBInstancesAsync(
                              It.Is <DescribeDBInstancesRequest>(r => r.Marker == "token-1"),
                              It.IsAny <CancellationToken>()))
            .ReturnsAsync(_secondPage);

            rdsMock.Setup(s => s.DescribeDBInstancesAsync(
                              It.Is <DescribeDBInstancesRequest>(r => r.Marker == "token-2"),
                              It.IsAny <CancellationToken>()))
            .ReturnsAsync(_thirdPage);

            _rdsSource = new RdsSource(rdsMock.Object);
        }
コード例 #13
0
        public static DescribeDBInstancesResponse Unmarshall(UnmarshallerContext context)
        {
            DescribeDBInstancesResponse describeDBInstancesResponse = new DescribeDBInstancesResponse();

            describeDBInstancesResponse.HttpResponse     = context.HttpResponse;
            describeDBInstancesResponse.RequestId        = context.StringValue("DescribeDBInstances.RequestId");
            describeDBInstancesResponse.PageNumber       = context.IntegerValue("DescribeDBInstances.PageNumber");
            describeDBInstancesResponse.TotalRecordCount = context.IntegerValue("DescribeDBInstances.TotalRecordCount");
            describeDBInstancesResponse.PageRecordCount  = context.IntegerValue("DescribeDBInstances.PageRecordCount");

            List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance> describeDBInstancesResponse_items = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance>();

            for (int i = 0; i < context.Length("DescribeDBInstances.Items.Length"); i++)
            {
                DescribeDBInstancesResponse.DescribeDBInstances_DBInstance dBInstance = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance();
                dBInstance.DBInstanceId          = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceId");
                dBInstance.DBInstanceDescription = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceDescription");
                dBInstance.PayType             = context.StringValue("DescribeDBInstances.Items[" + i + "].PayType");
                dBInstance.InstanceNetworkType = context.StringValue("DescribeDBInstances.Items[" + i + "].InstanceNetworkType");
                dBInstance.ConnectionMode      = context.StringValue("DescribeDBInstances.Items[" + i + "].ConnectionMode");
                dBInstance.RegionId            = context.StringValue("DescribeDBInstances.Items[" + i + "].RegionId");
                dBInstance.ZoneId            = context.StringValue("DescribeDBInstances.Items[" + i + "].ZoneId");
                dBInstance.ExpireTime        = context.StringValue("DescribeDBInstances.Items[" + i + "].ExpireTime");
                dBInstance.DBInstanceStatus  = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceStatus");
                dBInstance.Engine            = context.StringValue("DescribeDBInstances.Items[" + i + "].Engine");
                dBInstance.EngineVersion     = context.StringValue("DescribeDBInstances.Items[" + i + "].EngineVersion");
                dBInstance.DBInstanceNetType = context.StringValue("DescribeDBInstances.Items[" + i + "].DBInstanceNetType");
                dBInstance.LockMode          = context.StringValue("DescribeDBInstances.Items[" + i + "].LockMode");
                dBInstance.LockReason        = context.StringValue("DescribeDBInstances.Items[" + i + "].LockReason");
                dBInstance.CreateTime        = context.StringValue("DescribeDBInstances.Items[" + i + "].CreateTime");
                dBInstance.VpcId             = context.StringValue("DescribeDBInstances.Items[" + i + "].VpcId");
                dBInstance.VSwitchId         = context.StringValue("DescribeDBInstances.Items[" + i + "].VSwitchId");

                List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_Tag> dBInstance_tags = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_Tag>();
                for (int j = 0; j < context.Length("DescribeDBInstances.Items[" + i + "].Tags.Length"); j++)
                {
                    DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_Tag tag = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_Tag();
                    tag.Key    = context.StringValue("DescribeDBInstances.Items[" + i + "].Tags[" + j + "].Key");
                    tag._Value = context.StringValue("DescribeDBInstances.Items[" + i + "].Tags[" + j + "].Value");

                    dBInstance_tags.Add(tag);
                }
                dBInstance.Tags = dBInstance_tags;

                describeDBInstancesResponse_items.Add(dBInstance);
            }
            describeDBInstancesResponse.Items = describeDBInstancesResponse_items;

            return(describeDBInstancesResponse);
        }
コード例 #14
0
        public virtual async Task Failover()
        {
            try
            {
                //fail over rds which is in the same AZ
                // Note: This turns the asynchronous call into a synchronous one
                DescribeDBInstancesResponse describeDBInstancesResult = await rdsClient.DescribeDBInstancesAsync();

                string dbInstancedId = String.Empty;

                foreach (DBInstance dbInstance in describeDBInstancesResult.DBInstances)
                {
                    if (String.Equals(dbInstance.DBSubnetGroup.VpcId, vpcId, StringComparison.OrdinalIgnoreCase) &&
                        dbInstance.MultiAZ && dbInstance.StatusInfos.Count == 0)
                    {
                        dbInstancedId = dbInstance.DBInstanceIdentifier;
                        break;
                    }
                }

                if (!String.IsNullOrEmpty(dbInstancedId))
                {
                    Console.WriteLine("Rebooting rds instance " + dbInstancedId);

                    var response = await rdsClient.RebootDBInstanceAsync(new RebootDBInstanceRequest()
                    {
                        DBInstanceIdentifier = dbInstancedId,
                        ForceFailover        = true
                    });
                }
                else
                {
                    Console.WriteLine($"Did not find a multi-az database in the VPC {vpcId}");
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine("Unknown exception occurred " + exception.Message);
            }
        }
コード例 #15
0
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            DescribeDBInstancesResponse response = new DescribeDBInstancesResponse();

            while (context.Read())
            {
                if (context.IsStartElement)
                {
                    if (context.TestExpression("DescribeDBInstancesResult", 2))
                    {
                        response.DescribeDBInstancesResult = DescribeDBInstancesResultUnmarshaller.GetInstance().Unmarshall(context);
                        continue;
                    }
                    if (context.TestExpression("ResponseMetadata", 2))
                    {
                        response.ResponseMetadata = ResponseMetadataUnmarshaller.GetInstance().Unmarshall(context);
                    }
                }
            }


            return(response);
        }
コード例 #16
0
        private static void UnmarshallResult(XmlUnmarshallerContext context, DescribeDBInstancesResponse response)
        {
            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            if (context.IsStartOfDocument)
            {
                targetDepth += 2;
            }

            while (context.Read())
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("Marker", targetDepth))
                    {
                        response.Marker = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                    if (context.TestExpression("DBInstances/DBInstance", targetDepth))
                    {
                        response.DBInstances.Add(DBInstanceUnmarshaller.GetInstance().Unmarshall(context));

                        continue;
                    }
                }
                else if (context.IsEndElement && context.CurrentDepth < originalDepth)
                {
                    return;
                }
            }



            return;
        }
コード例 #17
0
        public static DescribeDBInstancesResponse Unmarshall(UnmarshallerContext context)
        {
            DescribeDBInstancesResponse describeDBInstancesResponse = new DescribeDBInstancesResponse();

            describeDBInstancesResponse.HttpResponse = context.HttpResponse;
            describeDBInstancesResponse.RequestId    = context.StringValue("DescribeDBInstances.RequestId");
            describeDBInstancesResponse.PageNumber   = context.IntegerValue("DescribeDBInstances.PageNumber");
            describeDBInstancesResponse.PageSize     = context.IntegerValue("DescribeDBInstances.PageSize");
            describeDBInstancesResponse.TotalCount   = context.IntegerValue("DescribeDBInstances.TotalCount");

            List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance> describeDBInstancesResponse_dBInstances = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance>();

            for (int i = 0; i < context.Length("DescribeDBInstances.DBInstances.Length"); i++)
            {
                DescribeDBInstancesResponse.DescribeDBInstances_DBInstance dBInstance = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance();
                dBInstance.DBInstanceId          = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceId");
                dBInstance.DBInstanceDescription = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceDescription");
                dBInstance.RegionId          = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].RegionId");
                dBInstance.ZoneId            = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].ZoneId");
                dBInstance.Engine            = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].Engine");
                dBInstance.EngineVersion     = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].EngineVersion");
                dBInstance.DBInstanceClass   = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceClass");
                dBInstance.DBInstanceStorage = context.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceStorage");
                dBInstance.DBInstanceStatus  = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceStatus");
                dBInstance.LockMode          = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].LockMode");
                dBInstance.ChargeType        = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].ChargeType");
                dBInstance.NetworkType       = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].NetworkType");
                dBInstance.CreationTime      = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].CreationTime");
                dBInstance.ExpireTime        = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].ExpireTime");
                dBInstance.DBInstanceType    = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceType");
                dBInstance.LastDowngradeTime = context.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].LastDowngradeTime");
                dBInstance.ReplicationFactor = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].ReplicationFactor");
                dBInstance.DestroyTime       = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].DestroyTime");

                List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_MongosAttribute> dBInstance_mongosList = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_MongosAttribute>();
                for (int j = 0; j < context.Length("DescribeDBInstances.DBInstances[" + i + "].MongosList.Length"); j++)
                {
                    DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_MongosAttribute mongosAttribute = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_MongosAttribute();
                    mongosAttribute.NodeId          = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].MongosList[" + j + "].NodeId");
                    mongosAttribute.NodeDescription = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].MongosList[" + j + "].NodeDescription");
                    mongosAttribute.NodeClass       = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].MongosList[" + j + "].NodeClass");
                    mongosAttribute.ConnectSting    = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].MongosList[" + j + "].ConnectSting");
                    mongosAttribute.Port            = context.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].MongosList[" + j + "].Port");

                    dBInstance_mongosList.Add(mongosAttribute);
                }
                dBInstance.MongosList = dBInstance_mongosList;

                List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ShardAttribute> dBInstance_shardList = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ShardAttribute>();
                for (int j = 0; j < context.Length("DescribeDBInstances.DBInstances[" + i + "].ShardList.Length"); j++)
                {
                    DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ShardAttribute shardAttribute = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ShardAttribute();
                    shardAttribute.NodeId          = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].NodeId");
                    shardAttribute.NodeDescription = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].NodeDescription");
                    shardAttribute.NodeClass       = context.StringValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].NodeClass");
                    shardAttribute.NodeStorage     = context.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].NodeStorage");

                    dBInstance_shardList.Add(shardAttribute);
                }
                dBInstance.ShardList = dBInstance_shardList;

                describeDBInstancesResponse_dBInstances.Add(dBInstance);
            }
            describeDBInstancesResponse.DBInstances = describeDBInstancesResponse_dBInstances;

            return(describeDBInstancesResponse);
        }
コード例 #18
0
        public virtual async Task Failover()
        {
            try
            {
                Console.WriteLine($"Simulating AZ failure for {azName}");

                // Find all subnets in the availability zone passed in the input
                DescribeSubnetsResponse subnetsInSpecifiedAZandVpc
                    = await ec2Client.DescribeSubnetsAsync(new DescribeSubnetsRequest()
                {
                    Filters = new List <Amazon.EC2.Model.Filter> {
                        new Amazon.EC2.Model.Filter {
                            Name   = "vpc-id",
                            Values = { vpcId }
                        },
                        new Amazon.EC2.Model.Filter {
                            Name   = "availability-zone",
                            Values = { azName }
                        }
                    }
                });

                List <string> subnetIdsInSpecifiedAZ = subnetsInSpecifiedAZandVpc.Subnets.Select(x => x.SubnetId).ToList();

                // Modify the autoscaling group to remove the AZ affected which is the AZ passed in the input
                // Find the autoscaling group that this is deployed into
                DescribeAutoScalingGroupsResponse autoScalingGroupsResponse = await asClient.DescribeAutoScalingGroupsAsync();

                if (autoScalingGroupsResponse != null && autoScalingGroupsResponse.AutoScalingGroups.Count > 0)
                {
                    // Note: This assumes an Auto Scaling group exists; no error checking for readability
                    AutoScalingGroup autoScalingGroup = autoScalingGroupsResponse.AutoScalingGroups[0];

                    Console.WriteLine($"Updating the auto scaling group {autoScalingGroup.AutoScalingGroupName} to remove the subnet in {azName}");

                    UpdateAutoScalingGroupResponse updateAutoScalingGroupResponse
                        = await asClient.UpdateAutoScalingGroupAsync(new UpdateAutoScalingGroupRequest
                    {
                        AutoScalingGroupName = autoScalingGroup.AutoScalingGroupName,
                        VPCZoneIdentifier    = String.Join(",", autoScalingGroup.VPCZoneIdentifier.Split(',').Where(x => !subnetIdsInSpecifiedAZ.Contains(x)))
                    });
                }

                Console.WriteLine("Creating new network ACL associations");
                await BlockSubnetsInAZ(vpcId, subnetIdsInSpecifiedAZ);

                Console.WriteLine("Failing over database");

                //fail over rds which is in the same AZ
                DescribeDBInstancesResponse describeDBInstancesResult = await rdsClient.DescribeDBInstancesAsync();

                string dbInstancedId = describeDBInstancesResult.DBInstances.Where(x => String.Equals(x.DBSubnetGroup.VpcId, vpcId, StringComparison.OrdinalIgnoreCase) &&
                                                                                   String.Equals(x.AvailabilityZone, azName, StringComparison.OrdinalIgnoreCase) &&
                                                                                   x.MultiAZ &&
                                                                                   !x.StatusInfos.Any())?.Select(x => x.DBInstanceIdentifier).FirstOrDefault();

                // we want to fail over rds if rds is present in the same az where it is affected
                if (!String.IsNullOrEmpty(dbInstancedId))
                {
                    Console.WriteLine("Rebooting dbInstanceId to secondary AZ " + dbInstancedId);

                    var response = await rdsClient.RebootDBInstanceAsync(new RebootDBInstanceRequest()
                    {
                        DBInstanceIdentifier = dbInstancedId,
                        ForceFailover        = true
                    });
                }
                else
                {
                    Console.WriteLine($"Didn't find DB in the same AZ as {azName}");
                }

                Console.Write("Done");
            }
            catch (Exception exception)
            {
                Console.WriteLine("Unknown exception occurred " + exception.Message);
            }
        }
        public static DescribeDBInstancesResponse Unmarshall(UnmarshallerContext _ctx)
        {
            DescribeDBInstancesResponse describeDBInstancesResponse = new DescribeDBInstancesResponse();

            describeDBInstancesResponse.HttpResponse = _ctx.HttpResponse;
            describeDBInstancesResponse.TotalCount   = _ctx.IntegerValue("DescribeDBInstances.TotalCount");
            describeDBInstancesResponse.PageSize     = _ctx.IntegerValue("DescribeDBInstances.PageSize");
            describeDBInstancesResponse.RequestId    = _ctx.StringValue("DescribeDBInstances.RequestId");
            describeDBInstancesResponse.PageNumber   = _ctx.IntegerValue("DescribeDBInstances.PageNumber");

            List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance> describeDBInstancesResponse_dBInstances = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance>();

            for (int i = 0; i < _ctx.Length("DescribeDBInstances.DBInstances.Length"); i++)
            {
                DescribeDBInstancesResponse.DescribeDBInstances_DBInstance dBInstance = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance();
                dBInstance.EngineVersion         = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].EngineVersion");
                dBInstance.ReplicationFactor     = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ReplicationFactor");
                dBInstance.ZoneId                = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ZoneId");
                dBInstance.ResourceGroupId       = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ResourceGroupId");
                dBInstance.DBInstanceStatus      = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceStatus");
                dBInstance.DBInstanceClass       = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceClass");
                dBInstance.DestroyTime           = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].DestroyTime");
                dBInstance.DBInstanceType        = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceType");
                dBInstance.LockMode              = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].LockMode");
                dBInstance.DBInstanceId          = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceId");
                dBInstance.NetworkType           = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].NetworkType");
                dBInstance.VpcAuthMode           = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].VpcAuthMode");
                dBInstance.ChargeType            = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ChargeType");
                dBInstance.DBInstanceStorage     = _ctx.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceStorage");
                dBInstance.LastDowngradeTime     = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].LastDowngradeTime");
                dBInstance.CreationTime          = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].CreationTime");
                dBInstance.RegionId              = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].RegionId");
                dBInstance.ExpireTime            = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ExpireTime");
                dBInstance.KindCode              = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].KindCode");
                dBInstance.Engine                = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Engine");
                dBInstance.DBInstanceDescription = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBInstanceDescription");

                List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_MongosAttribute> dBInstance_mongosList = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_MongosAttribute>();
                for (int j = 0; j < _ctx.Length("DescribeDBInstances.DBInstances[" + i + "].MongosList.Length"); j++)
                {
                    DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_MongosAttribute mongosAttribute = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_MongosAttribute();
                    mongosAttribute.NodeClass       = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].MongosList[" + j + "].NodeClass");
                    mongosAttribute.NodeDescription = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].MongosList[" + j + "].NodeDescription");
                    mongosAttribute.NodeId          = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].MongosList[" + j + "].NodeId");

                    dBInstance_mongosList.Add(mongosAttribute);
                }
                dBInstance.MongosList = dBInstance_mongosList;

                List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ShardAttribute> dBInstance_shardList = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ShardAttribute>();
                for (int j = 0; j < _ctx.Length("DescribeDBInstances.DBInstances[" + i + "].ShardList.Length"); j++)
                {
                    DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ShardAttribute shardAttribute = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_ShardAttribute();
                    shardAttribute.NodeClass        = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].NodeClass");
                    shardAttribute.NodeDescription  = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].NodeDescription");
                    shardAttribute.ReadonlyReplicas = _ctx.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].ReadonlyReplicas");
                    shardAttribute.NodeId           = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].NodeId");
                    shardAttribute.NodeStorage      = _ctx.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].ShardList[" + j + "].NodeStorage");

                    dBInstance_shardList.Add(shardAttribute);
                }
                dBInstance.ShardList = dBInstance_shardList;

                List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_Tag> dBInstance_tags = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_Tag>();
                for (int j = 0; j < _ctx.Length("DescribeDBInstances.DBInstances[" + i + "].Tags.Length"); j++)
                {
                    DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_Tag tag = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_Tag();
                    tag._Value = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Tags[" + j + "].Value");
                    tag.Key    = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Tags[" + j + "].Key");

                    dBInstance_tags.Add(tag);
                }
                dBInstance.Tags = dBInstance_tags;

                describeDBInstancesResponse_dBInstances.Add(dBInstance);
            }
            describeDBInstancesResponse.DBInstances = describeDBInstancesResponse_dBInstances;

            return(describeDBInstancesResponse);
        }
コード例 #20
0
        public virtual void failover()
        {
            try
            {
                // Modify the autoscaling group to remove the AZ affected which is the AZ passed in the input
                // Find the autoscaling group that this is deployed into
                // Note: This changes the asynchronous call to a synchronous one
                DescribeAutoScalingGroupsResponse autoScalingGroupsResponse = AUTO_SCALING_CLIENT.DescribeAutoScalingGroupsAsync().GetAwaiter().GetResult();

                if (autoScalingGroupsResponse != null && autoScalingGroupsResponse.AutoScalingGroups.Count > 0)
                {
                    // Note: This assumes an Auto Scaling group exists; no error checking for readability
                    AutoScalingGroup autoScalingGroup     = autoScalingGroupsResponse.AutoScalingGroups[0];
                    string           autoScalingGroupName = autoScalingGroup.AutoScalingGroupName;

                    // Find all subnets in the availability zone passed in the input
                    DescribeSubnetsResponse subnetsResult
                        = EC2_CLIENT.DescribeSubnetsAsync(new DescribeSubnetsRequest()
                    {
                        Filters = new List <Amazon.EC2.Model.Filter> {
                            new Amazon.EC2.Model.Filter {
                                Name   = "vpc-id",
                                Values = new List <string> {
                                    vpcId
                                }
                            }
                        }
                    }).GetAwaiter().GetResult();
                    IList <string> desiredSubnetsForASG = new List <string>();
                    foreach (Amazon.EC2.Model.Subnet subnet in subnetsResult.Subnets)
                    {
                        if (!string.Equals(subnet.AvailabilityZone, azId, StringComparison.OrdinalIgnoreCase))
                        {
                            desiredSubnetsForASG.Add(subnet.SubnetId);
                        }
                    }

                    List <string> desiredSubnets = new List <String>(autoScalingGroup.VPCZoneIdentifier.Split(new[] { ',' }, StringSplitOptions.None));

                    var tempList = new List <String>(desiredSubnets);
                    foreach (var subnet in desiredSubnets)
                    {
                        if (!desiredSubnetsForASG.Contains(subnet))
                        {
                            tempList.Remove(subnet);
                        }
                    }
                    desiredSubnets = tempList;

                    Console.WriteLine("Updating the auto scaling group " + autoScalingGroupName + " to remove the subnet in the AZ");

                    // Note: This turns the asynchronous call into a synchronous one
                    UpdateAutoScalingGroupResponse updateAutoScalingGroupResponse
                        = AUTO_SCALING_CLIENT.UpdateAutoScalingGroupAsync(new UpdateAutoScalingGroupRequest
                    {
                        AutoScalingGroupName = autoScalingGroupName,
                        VPCZoneIdentifier    = string.Join(",", desiredSubnets)
                    }).GetAwaiter().GetResult();
                }

                // Find all subnets in the availability zone passed in the input
                // Note: This turns the asynchronous call into a synchronous one
                DescribeSubnetsResponse describeSubnetsResult
                    = EC2_CLIENT.DescribeSubnetsAsync(new DescribeSubnetsRequest
                {
                    Filters = new List <Amazon.EC2.Model.Filter> {
                        new Amazon.EC2.Model.Filter {
                            Name   = "vpc-id",
                            Values = new List <string> {
                                vpcId
                            }
                        },
                        new Amazon.EC2.Model.Filter {
                            Name   = "availabilityZone",
                            Values = new List <string> {
                                azId
                            }
                        }
                    }
                }).GetAwaiter().GetResult();

                IList <string> desiredSubnetsForAddingNewNacl = new List <string>();
                foreach (Amazon.EC2.Model.Subnet subnet in describeSubnetsResult.Subnets)
                {
                    desiredSubnetsForAddingNewNacl.Add(subnet.SubnetId);
                }

                //Find all the network acl associations matching the subnets identified above
                // Note: This turns the asynchronous call into a synchronous one
                DescribeNetworkAclsResponse describeNetworkAclsResult
                    = EC2_CLIENT.DescribeNetworkAclsAsync(new DescribeNetworkAclsRequest()
                {
                    Filters = new List <Amazon.EC2.Model.Filter> {
                        new Amazon.EC2.Model.Filter {
                            Name   = "association.subnet-id",
                            Values = (List <string>)desiredSubnetsForAddingNewNacl
                        }
                    }
                }).GetAwaiter().GetResult();

                IList <NetworkAclAssociation> desiredAclAssociations = new List <NetworkAclAssociation>();
                // Note: This assumes a Network ACL is present for readability
                IList <NetworkAclAssociation> networkAclsAssociatedWithSubnet = describeNetworkAclsResult.NetworkAcls[0].Associations;
                foreach (string subnetId in desiredSubnetsForAddingNewNacl)
                {
                    foreach (NetworkAclAssociation networkAcl in networkAclsAssociatedWithSubnet)
                    {
                        if (string.Equals(networkAcl.SubnetId, subnetId, StringComparison.OrdinalIgnoreCase))
                        {
                            desiredAclAssociations.Add(networkAcl);
                        }
                    }
                }

                //create new network acl association with both ingress and egress denying to all the traffic
                CreateNetworkAclRequest createNetworkAclRequest = new CreateNetworkAclRequest();
                createNetworkAclRequest.VpcId = vpcId;
                // Note: This turns the asynchronous call into a synchronous one
                CreateNetworkAclResponse createNetworkAclResponse = EC2_CLIENT.CreateNetworkAclAsync(createNetworkAclRequest).GetAwaiter().GetResult();
                string networkAclId = createNetworkAclResponse.NetworkAcl.NetworkAclId;
                createNetworkAclEntry(networkAclId, 100, "0.0.0.0/0", true, "-1", createPortRange(0, 65535), RuleAction.Deny);
                createNetworkAclEntry(networkAclId, 101, "0.0.0.0/0", false, "-1", createPortRange(0, 65535), RuleAction.Deny);

                // replace all the network acl associations identified for the above subnets with the new network
                // acl association which will deny all traffic for those subnets in that AZ
                Console.WriteLine("Creating new network ACL associations");
                replaceNetworkAclAssociations(desiredAclAssociations, networkAclId);

                //fail over rds which is in the same AZ
                // Note: This turns the asynchronous call into a synchronous one
                DescribeDBInstancesResponse describeDBInstancesResult = RDS_CLIENT.DescribeDBInstancesAsync().GetAwaiter().GetResult();
                IList <DBInstance>          dbInstances = describeDBInstancesResult.DBInstances;
                string dbInstancedId = null;
                foreach (DBInstance dbInstance in dbInstances)
                {
                    if (string.Equals(dbInstance.DBSubnetGroup.VpcId, vpcId, StringComparison.OrdinalIgnoreCase) &&
                        (string.Equals(dbInstance.AvailabilityZone, azId, StringComparison.OrdinalIgnoreCase)) &&
                        dbInstance.MultiAZ && dbInstance.StatusInfos.Count == 0)
                    {
                        dbInstancedId = dbInstance.DBInstanceIdentifier;
                    }
                }
                // we want to fail over rds if rds is present in the same az where it is affected
                if (!string.IsNullOrEmpty(dbInstancedId))

                {
                    RebootDBInstanceRequest rebootDBInstanceRequest = new RebootDBInstanceRequest();
                    rebootDBInstanceRequest.DBInstanceIdentifier = dbInstancedId;
                    rebootDBInstanceRequest.ForceFailover        = true;
                    Console.WriteLine("Rebooting dbInstanceId to secondary AZ " + dbInstancedId);
                    // Note: This turns the asynchronous call into a synchronous one
                    RDS_CLIENT.RebootDBInstanceAsync(rebootDBInstanceRequest).GetAwaiter().GetResult();
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine("Unkown exception occured " + exception.Message);
            }
        }
        public static DescribeDBInstancesResponse Unmarshall(UnmarshallerContext _ctx)
        {
            DescribeDBInstancesResponse describeDBInstancesResponse = new DescribeDBInstancesResponse();

            describeDBInstancesResponse.HttpResponse = _ctx.HttpResponse;
            describeDBInstancesResponse.RequestId    = _ctx.StringValue("DescribeDBInstances.RequestId");
            describeDBInstancesResponse.PageNumber   = _ctx.IntegerValue("DescribeDBInstances.PageNumber");
            describeDBInstancesResponse.PageSize     = _ctx.IntegerValue("DescribeDBInstances.PageSize");
            describeDBInstancesResponse.TotalNumber  = _ctx.IntegerValue("DescribeDBInstances.TotalNumber");

            List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance> describeDBInstancesResponse_dBInstances = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance>();

            for (int i = 0; i < _ctx.Length("DescribeDBInstances.DBInstances.Length"); i++)
            {
                DescribeDBInstancesResponse.DescribeDBInstances_DBInstance dBInstance = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance();
                dBInstance.Id            = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Id");
                dBInstance.Description   = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Description");
                dBInstance.PayType       = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].PayType");
                dBInstance.CreateTime    = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].CreateTime");
                dBInstance.ExpireTime    = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ExpireTime");
                dBInstance.Expired       = _ctx.BooleanValue("DescribeDBInstances.DBInstances[" + i + "].Expired");
                dBInstance.RegionId      = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].RegionId");
                dBInstance.ZoneId        = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ZoneId");
                dBInstance.Network       = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Network");
                dBInstance.VPCId         = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].VPCId");
                dBInstance.Engine        = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Engine");
                dBInstance.DBType        = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBType");
                dBInstance.DBVersion     = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].DBVersion");
                dBInstance.Status        = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Status");
                dBInstance.LockMode      = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].LockMode");
                dBInstance.LockReason    = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].LockReason");
                dBInstance.NodeCount     = _ctx.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].NodeCount");
                dBInstance.NodeClass     = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].NodeClass");
                dBInstance.StorageUsed   = _ctx.IntegerValue("DescribeDBInstances.DBInstances[" + i + "].StorageUsed");
                dBInstance.CommodityCode = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].CommodityCode");
                dBInstance.Type          = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Type");

                List <string> dBInstance_readDBInstances = new List <string>();
                for (int j = 0; j < _ctx.Length("DescribeDBInstances.DBInstances[" + i + "].ReadDBInstances.Length"); j++)
                {
                    dBInstance_readDBInstances.Add(_ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].ReadDBInstances[" + j + "]"));
                }
                dBInstance.ReadDBInstances = dBInstance_readDBInstances;

                List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_PolarDBXNode> dBInstance_nodes = new List <DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_PolarDBXNode>();
                for (int j = 0; j < _ctx.Length("DescribeDBInstances.DBInstances[" + i + "].Nodes.Length"); j++)
                {
                    DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_PolarDBXNode polarDBXNode = new DescribeDBInstancesResponse.DescribeDBInstances_DBInstance.DescribeDBInstances_PolarDBXNode();
                    polarDBXNode.Id        = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Nodes[" + j + "].Id");
                    polarDBXNode.ClassCode = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Nodes[" + j + "].ClassCode");
                    polarDBXNode.RegionId  = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Nodes[" + j + "].RegionId");
                    polarDBXNode.ZoneId    = _ctx.StringValue("DescribeDBInstances.DBInstances[" + i + "].Nodes[" + j + "].ZoneId");

                    dBInstance_nodes.Add(polarDBXNode);
                }
                dBInstance.Nodes = dBInstance_nodes;

                describeDBInstancesResponse_dBInstances.Add(dBInstance);
            }
            describeDBInstancesResponse.DBInstances = describeDBInstancesResponse_dBInstances;

            return(describeDBInstancesResponse);
        }