ELB に登録されているインスタンスを解除 & 指定したインスタンスを ELB に登録
ELB に登録されているインスタンスを全て解除する
#!/bin/bash aws="/usr/bin/aws --region ap-northeast-1" elb_names=("elb-1" "elb-2") deregister_instances_from_elb() { for elb_name in ${elb_names[@]} do # get registerd instance ids per elb deregister_instance_ids=$(${aws} elb describe-load-balancers \ --load-balancer-names ${elb_name} \ --query 'LoadBalancerDescriptions[].Instances[].InstanceId' \ --output text) # deregister instances from elb ${aws} elb deregister-instances-from-load-balancer \ --load-balancer-name ${elb_name} \ --instances ${deregister_instance_ids} \ || echo "ERROR. failed to deregistered ${deregister_instance_ids} from ${elb_name}" | exit 1 echo "OK. deregistered ${deregister_instance_ids} from ${elb_name}" done } deregister_instances_from_elb
指定したインスタンスを指定した ELB に登録
リストで持たせた NAME TAG から InstanceId を取得して一気に ELB に登録します。 また、登録した全てのインスタンスが InService になるまで待ちます。
#!/bin/bash aws="/usr/bin/aws --region ap-northeast-1" elb_names=("elb-1" "elb-2") regist_servers=("web-1" "web-2" "web-3" "web-4") register_instances_with_elb() { for elb_name in ${elb_names[@]} do # get instance ids from Name Tag for regist_server in ${regist_servers[@]} do regist_instance_id=$(${aws} ec2 describe-instances \ --filters Name=tag-value,Values=${regist_server} \ --query 'Reservations[].Instances[].[InstanceId]' \ --output text) regist_instance_ids+=("$regist_instance_id") done # register instance with elb ${aws} elb register-instances-with-load-balancer \ --load-balancer-name ${elb_name} \ --instances ${regist_instance_ids[@]} \ || echo "ERROR. failed to registered ${regist_instance_id[@]} with ${elb_name}" | exit 1 ## check in service regist_num=${#regist_instance_ids[@]} i=0 while true do in_service=$(${aws} elb describe-instance-health --load-balancer-name ${elb_name} \ --query 'length(InstanceStates[?State==`InService`].[State])') if [ ${in_service} = "${regist_num}" ]; then echo "OK. ${regist_servers[@]} is InService at ${elb_name}" unset regist_instance_ids break fi i=`expr $i + 1` sleep 5 done done } register_instances_with_elb
elb_names と attach_servers の持たせ方を工夫するとメンテナンスとかで使えそうな気がしたので晒してみました。