صور AMI القديمة ولقطات EBS خلفها تراكم تكاليف تخزين بلا نهاية إن لم تُنظَّف. يفرض هذا السكربت فترة احتفاظ بأمان. يحسب نقطة قطع زمنية من MAX_AGE_DAYS، ثم يسرد الصور التي تملكها فقط عبر describe-images مع --owners self، فتبقى الصور المشتركة والعامة بلا مساس. يُحوَّل تاريخ إنشاء كل صورة إلى ثواني الحقبة ويُقارن بنقطة القطع؛ ويُتجاوز فورًا كل ما هو أحدث. للصور الأقدم يسجّل أولًا معرّفات اللقطات من خرائط أجهزة الكتل، لأنك بعد إلغاء تسجيل الصورة تفقد الرابط السهل بلقطاتها. الترتيب مهم: لا يمكن حذف اللقطات وهي مرجوعة من صورة مسجلة، لذا نلغي تسجيل الصورة قبل حذف كل لقطة. يخضع المسار كله لـ DRY_RUN الذي قيمته الافتراضية true ويطبع الإجراءات المقصودة فقط؛ ويجب ضبط DRY_RUN=false للحذف. هذا يجعل عملية تدميرية فعليًا قابلة للمراجعة قبل الالتزام بها.
تنظيف صور AMI واللقطات القديمة
إلغاء تسجيل صور AMI القديمة بعد فترة الاحتفاظ وحذف لقطات EBS الداعمة لها.
11 مشاهدة
مشاركة
السكربت
تحميل .shbash
#!/usr/bin/env bash
# Deregister AMIs older than N days that you own, then delete their snapshots.
# Dry run by default to prevent accidental deletion.
set -euo pipefail
REGION="${AWS_REGION:-us-east-1}"
MAX_AGE_DAYS="${MAX_AGE_DAYS:-30}"
DRY_RUN="${DRY_RUN:-true}" # set DRY_RUN=false to actually delete
command -v aws >/dev/null 2>&1 || { echo "aws CLI not found"; exit 1; }
CUTOFF="$(date -u -d "${MAX_AGE_DAYS} days ago" +%s)"
# List self-owned AMIs with their creation date and ID.
aws ec2 describe-images --region "${REGION}" --owners self \
--query "Images[].[ImageId, CreationDate]" --output text |
while IFS=$'\t' read -r ami created; do
created_epoch="$(date -u -d "${created}" +%s)"
[ "${created_epoch}" -ge "${CUTOFF}" ] && continue # too new, keep it
echo "Old AMI: ${ami} (created ${created})"
# Capture the snapshot IDs backing this AMI before we deregister it.
snaps="$(aws ec2 describe-images --region "${REGION}" --image-ids "${ami}" \
--query "Images[].BlockDeviceMappings[].Ebs.SnapshotId" --output text)"
if [ "${DRY_RUN}" = "true" ]; then
echo " [DRY RUN] would deregister ${ami} and delete snapshots: ${snaps:-none}"
continue
fi
# Deregister the AMI first; snapshots cannot be deleted while in use.
aws ec2 deregister-image --region "${REGION}" --image-id "${ami}"
for snap in ${snaps}; do
aws ec2 delete-snapshot --region "${REGION}" --snapshot-id "${snap}"
echo " deleted snapshot ${snap}"
done
echo " deregistered ${ami}"
doneكيفية التشغيل
راجع السكربت أولاً، ثم حمّله أو انسخه وشغّله في بيئتك.
قد يعجبك أيضاً
bashlinuxمبتدئ
عرض نسخ الحوسبة في GCP
إظهار كل آلة افتراضية في Compute Engine ضمن مشروع مع المنطقة ونوع الآلة والحالة وعناوين IP.
bashlinuxمتوسط
مزامنة مجلد إلى مضيف بعيد عبر rsync فوق SSH
يطابق مجلداً محلياً مع خادم بعيد بأمان عبر SSH.
bashlinuxمتوسط
نسخ احتياطي لكل قواعد بيانات MySQL باستخدام mysqldump
يُفرغ كل قاعدة بيانات MySQL في ملف SQL مضغوط مستقل.