首页 > 解决方案 > 在目标组 aws cli、shell 脚本中添加实例

问题描述

编写脚本以将实例添加到 AWS 目标组

#!/bin/bash
export AWS_PROFILE=***
export AWS_DEFAULT_REGION=eu-central-1

for INST_NAME in $(aws ec2 describe-instances --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value' --output text | sort); do
    echo "check ${INST_NAME} in Target Group"
    TARGET_GROUP=$(aws elbv2 describe-target-groups|jq -r '.[]|.[].TargetGroupArn'| grep ${INST_NAME})
    RUNNING_INSTANCES=$(aws ec2 describe-instances| jq '.Reservations[].Instances[] | select(.Tags[].Value=="${INST_NAME}")'| jq -r .InstanceId| sort | uniq | wc -l)
    COUNT=$(aws elbv2 describe-target-health --target-group-arn ${TARGET_GROUP}|jq -r '.TargetHealthDescriptions[].Target.Id'| wc -l)
    if [[ ${RUNNING_INSTANCES} = ${COUNT} ]]; then
        echo "VSE OK"
    else 
        echo "dobavit ${RUNNING_INSTANCES} v ${TARGET_GROUP}"
        for INSTANCE_ID in $(aws ec2 describe-instances --filter Name=tag-key,Values=Name --query "Reservations[*].Instances[*].{Instance:InstanceId,Name:Tags[?Key=='Name']|[0].Value}"|jq ".[][]|select(.Name==\"${TAGS}\")"|jq -r .Instance); do
            ASG=$(aws autoscaling describe-auto-scaling-instances|jq '.AutoScalingInstances'|jq ".[]|select(.InstanceId==\"${INSTANCE_ID}\")"|jq -r .InstanceId)
            echo "Updating ${TARGET_GROUP} to add instances from ${ASG}"
            aws elbv2 register-targets --target-group-arn ${TARGET_GROUP} --targets "Id="${ASG}
        done
    fi
done

但他没有添加。需要通过标签选择所有实例并与目标组中的数量进行比较,如果数量不同,则将所有带有该标签的实例添加到目标组中

标签: amazon-web-servicesshelltagstarget

解决方案


更新,它正在工作

for INSTANCE_NAME in $(aws ec2 describe-instances --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value' --output text | sort | uniq ); do
echo "check ${INSTANCE_NAME} in Target Group"
TARGET_GROUP=$(aws elbv2 describe-target-groups|jq -r '.[]|.[].TargetGroupArn'| grep ${INSTANCE_NAME})
if ! [ -z "${TARGET_GROUP}" ]; then
    for i in $(echo ${TARGET_GROUP}); do
        RUNNING_INSTANCES=$(aws ec2 describe-instances| jq ".Reservations[].Instances[] | select(.Tags[].Value==\"${INSTANCE_NAME}\")"| jq -r .InstanceId| sort | uniq | wc -l)
        COUNT=$(aws elbv2 describe-target-health --target-group-arn ${i}|jq -r '.TargetHealthDescriptions[].Target.Id'| wc -l)
        if ! [[ ${RUNNING_INSTANCES} = ${COUNT} ]]; then 
            for INSTANCE_ID in $(aws ec2 describe-instances --filter Name=tag-key,Values=Name --query "Reservations[*].Instances[*].{Instance:InstanceId,Name:Tags[?Key=='Name']|[0].Value}"|jq ".[][]|select(.Name==\"${INSTANCE_NAME}\")"|jq -r .Instance); do
                ASG=$(aws autoscaling describe-auto-scaling-instances|jq '.AutoScalingInstances'|jq ".[]|select(.InstanceId==\"${INSTANCE_ID}\")"|jq -r .InstanceId)
                aws elbv2 register-targets --target-group-arn ${i} --targets "Id="${ASG}
                echo "Updating ${TARGET_GROUP} to add instances from ${ASG}"
                
            done
        fi
    done
fi

完毕


推荐阅读