LBのリスナーでBL/GRのターゲットを切り替えるシェル
概要
BL/GR切り替えをLBのリスナーからターゲットグループで切り替えることを実装する際に使用したシェルをメモ的に記載します。
【動作前提】
・BL/GRのEC2が共に起動中であること
【動作要領】
・ALBのリスナールールにて向き先のターゲットグループを切り替えることによりBL/GRのEC2を切り替える
・シェル実行時にリスナーのデフォルトの向き先がBLであればGRに切り替え、GRであればBLに切り替える
シェルスクリプト
以下の内容のシェルスクリプトを作成し、必要な場所に配置して実行する。
#!/bin/bash ## MESSAGE FUNCTION function alert () { echo "$(date '+%Y-%m-%d %H:%M:%S') [$1] $2" } ## VARIABLES PRD_ALB_ARN="ALBのARN" PRD_BL_PC_TG_ARN="Blue用のPCのTGのARN" PRD_BL_SMT_TG_ARN="Blue用のSMTのTGのARN" PRD_GR_PC_TG_ARN="Green用のPCのTGのARN" PRD_GR_SMT_TG_ARN="Green用のSMTのTGのARN" PRD_LISTENER_ARN="ALBのリスナーのARN" ## CURRENT COLOR PRD_CURRENT_COLOR=$(aws elbv2 describe-listeners \ --listener-arns ${PRD_LISTENER_ARN} \ --query 'Listeners[].DefaultActions[].TargetGroupArn' --output text | cut -d/ -f2 \ ) ## CHANGE TARGET TO ANOTHER COLOR if [ "${PRD_CURRENT_COLOR}" = "bl-pc-http-tg" ]; then aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_GR_PC_TG_ARN} \ --conditions Field=path-pattern,Values='/sitemap/*' \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_GR_PC_TG_ARN} \ --conditions Field=path-pattern,Values='/assets/custom_sitemap*' \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_GR_PC_TG_ARN} \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_GR_SMT_TG_ARN} \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_GR_SMT_TG_ARN} \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-listener \ --listener-arn ${PRD_LISTENER_ARN} \ --protocol HTTPS --port 443 \ --ssl-policy ELBSecurityPolicy-2016-08 \ --default-actions Type=forward,TargetGroupArn=${PRD_GR_PC_TG_ARN} alert "SUCCESS" "ALB LISTENER CHANGE TARGET GREEN" exit 0 elif [ "${PRD_CURRENT_COLOR}" = "gr-pc-http-tg" ]; then aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_BL_PC_TG_ARN} \ --conditions Field=path-pattern,Values='/sitemap/*' \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_BL_PC_TG_ARN} \ --conditions Field=path-pattern,Values='/assets/custom_sitemap*' \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_BL_PC_TG_ARN} \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_BL_SMT_TG_ARN} \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-rule \ --actions Type=forward,TargetGroupArn=${PRD_BL_SMT_TG_ARN} \ --rule-arn ${PRD_ALB_ARN}:<ルールのARN> aws elbv2 modify-listener \ --listener-arn ${PRD_LISTENER_ARN} \ --protocol HTTPS --port 443 \ --ssl-policy ELBSecurityPolicy-2016-08 \ --default-actions Type=forward,TargetGroupArn=${PRD_BL_PC_TG_ARN} alert "SUCCESS" "ALB LISTENER CHANGE TARGET BLUE" exit 0 else alert "ALERT" "ALB LISTENER HAS NO COLOR" exit -1 fi