目的(やりたいこと)
- ELBの各操作をCLI行いたい
メンテナンスなどでELBが指定するターゲットグループから、ターゲットのマシン(EC2)を登録除外するときに行う。GUIでも実施可能だが煩雑。GUIも頻繁にアップデートされるため、コマンドで実施。
前提条件
- Cloudshellを利用
手順
ターゲットグループARN取得
ターゲットグループのARNが必要のため、これを取得する。GUIでも可能だが、ここではコマンドで行う。事前にターゲットグループの名前を確認し、以下コマンドを追記修正する。
export TARGET_GROUP_ARN=`aws elbv2 describe-target-groups --query "TargetGroups[].[TargetGroupName,TargetGroupArn]" --output text | column -t | grep -i "検索対象ELBターゲットグループ名" | awk '{print $2}'`
TARGET_GROUP_ARN変数にARNが代入されたことを確認する。
ARNはarn:aws:elasticloadbalancing:ap-northeast-1…
という名称。
echo ${TARGET_GROUP_ARN}
インスタンスID取得
EC2のタグ「Name」に対して、「target-grp-machine01」と設定しているマシンのインスタンスIDを確認する(このマシンがターゲットグループ配下にいると仮定)。タグNameでなくとも、なにかしらタグとValueを入れていれば検索できる。
EC2_NAME変数にtarget-grp-machine01を代入。
export EC2_NAME=target-grp-machine01
この名前から、Nameタグを検索し、インスタンスIDを表示してINSTANCE_ID変数に代入。
export INSTANCE_ID=`aws ec2 describe-instances --filter "Name=tag:Name,Values=${EC2_NAME}" --query "Reservations[].Instances[].[InstanceId]" --output text | column -t`
インスタンスIDが代入されたことを確認する。
echo ${INSTANCE_ID}
ターゲットグループのターゲット状態確認
ターゲットグループの対象EC2の状態を確認する。healthyになっているかどうかなどをこのコマンドで確認する。
aws elbv2 describe-target-health --target-group-arn ${TARGET_GROUP_ARN} --query 'TargetHealthDescriptions[].{Id:Target.Id,Port:Target.Port,State:TargetHealth.State}' --output text | column -t
ポート番号も表示されるため、次のコマンドで利用する。
ターゲットグループ除外
ターゲットグループから確認したインスタンスIDを除外する。
aws elbv2 deregister-targets --target-group-arn ${TARGET_GROUP_ARN} --targets Id=${INSTANCE_ID}
状態は先ほどの「ターゲットグループのターゲット状態確認」コマンドで確認する。
aws elbv2 describe-target-health --target-group-arn ${TARGET_GROUP_ARN} --query 'TargetHealthDescriptions[].{Id:Target.Id,Port:Target.Port,State:TargetHealth.State}' --output text | column -t
実行後はしばらくdrainingとなり、最終的にリストから対象インスタンスが消える。
ターゲットグループ登録
CloudShellは10分ぐらいでサインアウトされるので、念のため環境変数を確認する。値が入っていればOK。なければ再度代入。
echo ${TARGET_GROUP_ARN}
echo ${INSTANCE_ID}
以下コマンドで対象インスタンスをターゲットグループに登録する。ここでは443(https)で負荷分散しているが、環境に合わせて「Port=」の数値は変更する。
aws elbv2 register-targets --target-group-arn ${TARGET_GROUP_ARN} --targets Id=${INSTANCE_ID},Port=443
状態は先ほどの「ターゲットグループのターゲット状態確認」コマンドで確認する。
aws elbv2 describe-target-health --target-group-arn ${TARGET_GROUP_ARN} --query 'TargetHealthDescriptions[].{Id:Target.Id,Port:Target.Port,State:TargetHealth.State}' --output text | column -t
登録直後はしばらくinitialとなり、最終的に対象インスタンスがhealthyと表示される。
参考
【AWS CLI】ALBおよびNLB関連の情報取得編
AWS – ターゲットグループのターゲット情報の取得
【AWS】ALBからの切り離しと再登録手順
いまさらですがLinuxで環境変数を設定したい
複数行の文字列をShell変数に格納して、forで回した時の挙動