Я хочу получить список экземпляров на ec2 без защиты от прерывания. Прежде чем я закодирую что-нибудь для этого, есть ли что-то, что скрыто в aws cli для этого?
Мне кажется, из документации и моего тестирования вы ищете:
#aws ec2 describe-instance-attribute --instance-id <instanceid> --attribute disableApiTermination
Это возвращает
<instanceid>
DISABLEAPITERMINATION True
Если защита от прерывания включена. В документации указано: «Если значение истинно, вы не можете завершить работу экземпляра через консоль Amazon EC2, интерфейс командной строки или API; в противном случае вы можете».
И вы можете изменить параметр с помощью атрибута modify-instance-attribute. Так...
#aws ec2 modify-instance-attribute --no-disable-api-termination --instance-id <instanceid>
или
#aws ec2 modify-instance-attribute --disable-api-termination --instance-id <instanceid>
Вот сценарий, который перечислит защиту от прерывания для всех экземпляров во всех регионах. Для этого необходимо установить AWS CLI и в $PATH
:
#!/bin/bash
for region in $(aws ec2 describe-regions | grep RegionName | cut -d '"' -f 4 | sort); do
echo $region
for instance in $(aws ec2 describe-instances --region $region | grep InstanceId | cut -d '"' -f 4 | sort); do
echo -n $instance
aws ec2 describe-instance-attribute --region $region --instance-id $instance --attribute disableApiTermination | grep Value | cut -d : -f 2
done
done
Если вы работаете только с одним регионом, а интерфейс командной строки уже настроен для этого региона, вы можете упростить его и немного ускорить:
#!/bin/bash
for instance in $(aws ec2 describe-instances | grep InstanceId | cut -d '"' -f 4 | sort); do
echo -n $instance
aws ec2 describe-instance-attribute --instance-id $instance --attribute disableApiTermination | grep Value | cut -d : -f 2
done
Пример вывода 2-го сценария, показывающий два экземпляра, один без защиты от прерывания, а другой с:
i-0123456789abcdef0 false
i-0123456789abcdef1 true