Добавить экземпляры в целевую группу aws cli, сценарий оболочки - PullRequest
0 голосов
/ 05 августа 2020

Написал сценарий для добавления экземпляров в целевую группу 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

, но он не добавляет. Необходимо выбрать все экземпляры по тегу и сравнить с числом в целевой группе, если число другое, добавить все экземпляры с тегом в целевую группу

1 Ответ

0 голосов
/ 06 августа 2020

Обновить, работает

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

готово

...