54 lines
1.4 KiB
Bash
54 lines
1.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# 获取所有可用的 region
|
||
|
|
regions=$(aws ec2 describe-regions --query 'Regions[*].RegionName' --output text)
|
||
|
|
# regions=ap-south-1
|
||
|
|
|
||
|
|
for region in $regions; do
|
||
|
|
echo "=== Processing region: $region ==="
|
||
|
|
|
||
|
|
# 获取当前 region 的实例 ID 列表
|
||
|
|
instance_ids=$(aws ec2 describe-instances \
|
||
|
|
--region $region \
|
||
|
|
--query 'Reservations[*].Instances[*].InstanceId' \
|
||
|
|
--output text)
|
||
|
|
|
||
|
|
for instance_id in $instance_ids; do
|
||
|
|
echo "---- Instance: $instance_id ----"
|
||
|
|
|
||
|
|
# 获取该实例的全部 EBS block device mapping
|
||
|
|
devices=$(aws ec2 describe-instances \
|
||
|
|
--region $region \
|
||
|
|
--instance-ids $instance_id \
|
||
|
|
--query 'Reservations[0].Instances[0].BlockDeviceMappings[*].DeviceName' \
|
||
|
|
--output text)
|
||
|
|
|
||
|
|
for device in $devices; do
|
||
|
|
echo "Setting DeleteOnTermination=false for $instance_id ($device)"
|
||
|
|
|
||
|
|
# 创建临时 JSON 文件
|
||
|
|
tmpfile=$(mktemp)
|
||
|
|
|
||
|
|
cat > $tmpfile <<EOF
|
||
|
|
[
|
||
|
|
{
|
||
|
|
"DeviceName": "$device",
|
||
|
|
"Ebs": {
|
||
|
|
"DeleteOnTermination": false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
]
|
||
|
|
EOF
|
||
|
|
|
||
|
|
# 修改属性
|
||
|
|
aws ec2 modify-instance-attribute \
|
||
|
|
--region $region \
|
||
|
|
--instance-id $instance_id \
|
||
|
|
--block-device-mappings file://$tmpfile
|
||
|
|
|
||
|
|
rm -f $tmpfile
|
||
|
|
done
|
||
|
|
done
|
||
|
|
done
|
||
|
|
|
||
|
|
echo "All instances processed."
|