1 public class CreateELB 2 { 3 /// <summary> 4 /// 连接AWS服务器 5 /// </summary> 6 /// <param name="awsAccessKeyId">Access Key Id</param> 7 /// <param name="awsSecretAccessKey">Secret Access Key</param> 8 /// <param name="regionEndpoint">服务器区域</param> 9 /// <returns></returns> 10 public AmazonElasticLoadBalancingClient CreateELB(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint regionEndpoint) 11 { 12 AmazonElasticLoadBalancingClient client = new AmazonElasticLoadBalancingClient(awsAccessKeyId, awsSecretAccessKey, regionEndpoint); 13 return client; 14 } 15 16 #region 添加负载均衡器 17 /// <summary> 18 /// 添加负载均衡器 19 /// </summary> 20 /// <param name="client">连接请求</param> 21 /// <param name="LoadBalancerName">负载均衡器名称</param> 22 /// <returns></returns> 23 private string CreateLoadBalancer(AmazonElasticLoadBalancingClient client, string LoadBalancerName) 24 { 25 string DNSName = ""; 26 try 27 { 28 List<string> availabilityZonesList = GetAvailabilityZonesList(); 29 List<Listener> listenerList = GetListenerList(); 30 List<Tag> tagList = GetTagList(); 31 List<string> securityGroupslist = GetSecurityGroupslist(); 32 if (!ExistLoadBalancer(client, LoadBalancerName)) 33 { 34 CreateLoadBalancerRequest request = new CreateLoadBalancerRequest() 35 { 36 //可用区域 37 AvailabilityZones = availabilityZonesList, 38 //侦听器 39 Listeners = listenerList, 40 //负载平衡名称 41 LoadBalancerName = LoadBalancerName, 42 //设置负载平衡是面向 Internet , 默认 面向Internet 43 // Scheme = "", 44 //安全组 45 SecurityGroups = securityGroupslist, 46 //子网 47 // Subnets = list, 48 //标签 49 Tags = tagList 50 }; 51 CreateLoadBalancerResponse response = client.CreateLoadBalancer(request); 52 DNSName = response.DNSName; 53 if (RegisterInstancesWithLoadBalancer(client, LoadBalancerName)) 54 { 55 Console.Write("添加实例成功"); 56 Console.WriteLine(""); 57 } 58 if (ConfigureHealthCheck(client, LoadBalancerName)) 59 { 60 Console.Write("配置运行状况检查成功"); 61 Console.WriteLine(""); 62 } 63 } 64 else 65 { 66 Console.Write("名为<" + LoadBalancerName + ">负载均衡存在"); 67 Console.WriteLine(""); 68 } 69 } 70 catch (Exception) 71 { 72 throw; 73 } 74 return DNSName; 75 } 76 #endregion 77 #region 可用区域实体 78 /// <summary> 79 /// 可用区域实体 80 /// </summary> 81 /// <returns></returns> 82 private List<string> GetAvailabilityZonesList() 83 { 84 List<string> availabilityZonesList = new List<string>(); 85 string availabilityZones = "ap-southeast-1a"; 86 availabilityZonesList.Add(availabilityZones); 87 return availabilityZonesList; 88 } 89 #endregion 90 #region 监听器实体 91 /// <summary> 92 /// 监听器实体 93 /// </summary> 94 /// <returns></returns> 95 private List<Listener> GetListenerList() 96 { 97 List<Listener> listenerList = new List<Listener>(); 98 Listener listener = new Listener(); 99 listener.InstancePort = 80; 100 listener.InstanceProtocol = "HTTP"; 101 listener.LoadBalancerPort = 80; 102 listener.Protocol = "HTTP"; 103 listenerList.Add(listener); 104 return listenerList; 105 } 106 #endregion 107 #region 标签实体 108 /// <summary> 109 /// 标签实体 110 /// </summary> 111 /// <returns></returns> 112 private List<Tag> GetTagList() 113 { 114 //添加标签 115 List<Tag> tagList = new List<Tag>(); 116 117 Tag tag = new Tag(); 118 tag.Key = "key"; 119 tag.Value = "value"; 120 tagList.Add(tag); 121 return tagList; 122 } 123 #endregion 124 #region 安全组实体 125 /// <summary> 126 /// 安全组实体 127 /// </summary> 128 /// <returns></returns> 129 private List<string> GetSecurityGroupslist() 130 { 131 string str = "sg-4afa562f"; 132 List<string> securityGroupslist = new List<string>(); 133 securityGroupslist.Add(str); 134 return securityGroupslist; 135 } 136 #endregion 137 #region 添加实例 138 /// <summary> 139 /// 添加实例 140 /// </summary> 141 /// <param name="client"></param> 142 /// <param name="LoadBalancerName"></param> 143 /// <returns></returns> 144 private bool RegisterInstancesWithLoadBalancer(AmazonElasticLoadBalancingClient client, string LoadBalancerName) 145 { 146 bool result = false; 147 try 148 { 149 List<Instance> instanceList = new List<Instance>(); 150 Instance instance = new Instance(); 151 instance.InstanceId = "i-18de45d5"; 152 instanceList.Add(instance); 153 154 Instance instance1 = new Instance(); 155 instance1.InstanceId = "i-26d918e9"; 156 instanceList.Add(instance1); 157 RegisterInstancesWithLoadBalancerRequest requestInstance = new RegisterInstancesWithLoadBalancerRequest() 158 { 159 Instances = instanceList, 160 LoadBalancerName = LoadBalancerName 161 }; 162 RegisterInstancesWithLoadBalancerResponse responseInstance = client.RegisterInstancesWithLoadBalancer(requestInstance); 163 result = true; 164 } 165 catch (Exception) 166 { 167 throw; 168 } 169 return result; 170 } 171 #endregion 172 #region 配置运行状况检查 173 /// <summary> 174 /// 配置运行状况检查 175 /// </summary> 176 /// <param name="client"></param> 177 /// <param name="LoadBalancerName"></param> 178 /// <returns></returns> 179 private bool ConfigureHealthCheck(AmazonElasticLoadBalancingClient client, string LoadBalancerName) 180 { 181 bool result = false; 182 try 183 { 184 HealthCheck healthCheck = new HealthCheck(); 185 healthCheck.HealthyThreshold = 10; 186 healthCheck.Interval = 30; 187 healthCheck.Target = "HTTP:80/index.html"; 188 healthCheck.Timeout = 5; 189 healthCheck.UnhealthyThreshold = 2; 190 ConfigureHealthCheckRequest requestHealth = new ConfigureHealthCheckRequest() 191 { 192 HealthCheck = healthCheck, 193 LoadBalancerName = LoadBalancerName 194 }; 195 ConfigureHealthCheckResponse responseHealth = client.ConfigureHealthCheck(requestHealth); 196 result = true; 197 } 198 catch (Exception) 199 { 200 throw; 201 } 202 return result; 203 } 204 #endregion 205 #region 删除负载均衡器 206 /// <summary> 207 /// 删除负载均衡器 208 /// </summary> 209 /// <param name="client"></param> 210 /// <param name="LoadBalancerName"></param> 211 /// <returns></returns> 212 private string DeleteLoadBalancer(AmazonElasticLoadBalancingClient client, string LoadBalancerName) 213 { 214 string result = ""; 215 try 216 { 217 DeleteLoadBalancerRequest request = new DeleteLoadBalancerRequest() 218 { 219 LoadBalancerName = LoadBalancerName 220 }; 221 DeleteLoadBalancerResponse response = client.DeleteLoadBalancer(request); 222 result = response.HttpStatusCode.ToString(); 223 } 224 catch (Exception) 225 { 226 throw; 227 } 228 return result; 229 } 230 #endregion 231 #region 负载均衡器是否存在 232 /// <summary> 233 /// 负载均衡器是否存在 234 /// </summary> 235 /// <param name="client"></param> 236 /// <param name="LoadBalancerName"></param> 237 private bool ExistLoadBalancer(AmazonElasticLoadBalancingClient client, string LoadBalancerName) 238 { 239 bool result = false; 240 DescribeLoadBalancersResponse response = client.DescribeLoadBalancers(); 241 List<LoadBalancerDescription> loadBalancerDescriptionList = response.LoadBalancerDescriptions; 242 foreach (LoadBalancerDescription loadBalancerDescription in loadBalancerDescriptionList) 243 { 244 if (loadBalancerDescription.LoadBalancerName == LoadBalancerName) 245 { 246 result = true; 247 } 248 } 249 return result; 250 } 251 #endregion 252 #region 得到负载均衡器DNS名称 253 /// <summary> 254 /// 得到负载均衡器DNS名称 255 /// </summary> 256 /// <param name="client"></param> 257 /// <param name="LoadBalancerName"></param> 258 /// <returns></returns> 259 private string GetLoadBalancerDescription(AmazonElasticLoadBalancingClient client, string LoadBalancerName) 260 { 261 string DNSName = ""; 262 DescribeLoadBalancersResponse response = client.DescribeLoadBalancers(); 263 List<LoadBalancerDescription> loadBalancerDescriptionList = response.LoadBalancerDescriptions; 264 foreach (LoadBalancerDescription loadBalancerDescription in loadBalancerDescriptionList) 265 { 266 if (loadBalancerDescription.LoadBalancerName == LoadBalancerName) 267 { 268 DNSName = loadBalancerDescription.DNSName; 269 } 270 } 271 return DNSName; 272 } 273 #endregion 274 275 }