অনাথ এডাব্লুএস ইসি 2 স্ন্যাপশট কীভাবে পরিষ্কার করবেন?


22

আমরা ন্যায্য পরিমাণ এডাব্লুএস ইসি 2 স্ন্যাপশট নিয়ে শেষ করি যেখানে এএমআই মুছে ফেলা হয়েছে তবে স্ন্যাপশটটি পচানোর জন্য পিছনে ফেলে রাখা হয়েছে। আমাদের অর্থ এবং স্থান বাঁচাতে আমি এতিমদের সনাক্ত এবং মুছে ফেলার একটি অ-ম্যানুয়াল পদ্ধতি চাই ।

আদর্শভাবে আমি ভাবছি একটি বাশ স্ক্রিপ্ট সিএলআইয়ের উপরে উঠিয়ে ফেলছি তবে আমার এডাব্লুএস-ফু দুর্বল। আমি ধরে নিলাম কারও এর আগে এটি করা হয়েছে তবে আমি আসলে কোনও স্ক্রিপ্ট খুঁজে পাই না।

সর্বাধিক ক্ষেত্রে দৃশ্যে এটি খণ্ডগুলিও পরীক্ষা করবে এবং সেগুলিও পরিষ্কার করবে তবে এটি দ্বিতীয় প্রশ্নের পক্ষে আরও উপযুক্ত হতে পারে।


পাইথনে আমার সংস্করণ। কীভাবে ব্যবহার করবেন এবং
গিথুব

উত্তর:


13

অন্যান্য উত্তরগুলিতে ইতিমধ্যে সংযুক্ত ব্লগ পোস্টগুলি এবং টুকরো টুকরো দ্বারা উত্সাহিত, এখানে আমার সমস্যার সমাধান।

আমি স্ন্যাপশটের একটি তালিকা পাওয়ার জন্য কিছু সংবিযুক্ত জেএমইএসপথ ফাংশন ব্যবহার করেছি এবং প্রয়োজন নেই tr

দাবি অস্বীকার : আপনার নিজের ঝুঁকিতে ব্যবহার করুন , আমি কোনও সমস্যা এড়াতে এবং বুদ্ধিমান খেলাপি রাখার জন্য যথাসাধ্য চেষ্টা করেছি, তবে এটি যদি আপনার সমস্যার কারণ হয় তবে আমি কোনও দোষ দেব না।

#!/bin/sh
# remove x if you don't want to see the commands
set -ex

# Some variable initialisation with sane defaults
DRUN='--dry-run'
DO_DELETE=${1:-'no'}
REGION=${2:-'eu-west-1'}
ACCOUNTID=${3:-'self'}

# Get two temporary files
SNAP_FILE=$(mktemp)
IMAGE_FILE=$(mktemp)

# Get the snapshot list and the volume list
aws --region "$REGION" ec2 describe-snapshots --owner-ids "$ACCOUNTID" --query 'Snapshots[*].[SnapshotId]' --output text > "$SNAP_FILE"
aws --region "$REGION" ec2 describe-images --owners "$ACCOUNTID" --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.[SnapshotId]' --output text > "$IMAGE_FILE"

# Check if the outputed command should be dry-run (default) or not
if [ "$DO_DELETE" = "IAMSURE" ]
then
 DRUN=''
fi

# count each snapshot id, decrease when a volume reference it, print delete command for those with no volumes
awk -v REGION="$REGION" -v DRUN="$DRUN" '
FNR==NR { snap[$1]++; next } # increment snapshots and get to next line in file immediately

{ snap[$1]-- } # we changed file, decrease the snap counter when a volume reference it

END {
 for (s in snap) { # loop over the snapshots
   if (snap[s] > 0) { # if we did not decrese under 1 that means there is no volume referencing this snapshot
    cmd="aws --region " REGION " " DRUN " ec2 delete-snapshot --snapshot-id " s
    print(cmd)
  }
 }
}
' "$SNAP_FILE" "$IMAGE_FILE"
# Clean up the temp files
rm "$SNAP_FILE" "$IMAGE_FILE"

আমি আশা করি স্ক্রিপ্টটি নিজেই যথেষ্ট মন্তব্য করেছে।

ডিফল্ট ব্যবহার (নো-প্যারামস) বর্তমান অ্যাকাউন্ট এবং অঞ্চল ইইউ-ওয়েস্ট -1 এর জন্য অনাথ স্ন্যাপশটের কমান্ডগুলি মুছে ফেলার তালিকা তৈরি করবে:

aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-81e5856a
aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-95c68c7e
aws --region eu-west-1 --dry-run ec2 delete-snapshot --snapshot-id snap-a3bf50bd

আপনি এই আউটপুটটিকে সমস্ত কমান্ড কার্যকর করতে সোর্স করার আগে পর্যালোচনার জন্য কোনও ফাইলে পুনর্নির্দেশ করতে পারেন।

স্ক্রিপ্টটি পরিবর্তে তাদের মুদ্রণ নির্দেশে চালানো করতে চান তাহলে, প্রতিস্থাপন print(cmd)দ্বারা system(cmd)

নামের সাথে স্ক্রিপ্ট ব্যবহার অনুসরণ করা হয় snap_cleaner:

আমাদের-পশ্চিম -1 অঞ্চলে শুকনো রান কমান্ডগুলির জন্য

./snap_cleaner no us-west-1

ইউরোপীয় ইউনিয়ন-কেন্দ্রীয় -১ এ ব্যবহারযোগ্য আদেশের জন্য for

./snap_cleaner IAMSURE eu-central-1 

তৃতীয় প্যারামিটারটি অন্য অ্যাকাউন্ট অ্যাক্সেস করতে ব্যবহার করা যেতে পারে (আমি এর আগে অন্য অ্যাকাউন্টে ভূমিকা পরিবর্তন করতে পছন্দ করি না)।

অনেলাইনার হিসাবে স্ক্রিপ্টের উইন্ডো স্ক্রিপ্ট সহ স্ট্রিপড সংস্করণ:

#!/bin/sh
set -ex

# Some variable initialisation with sane defaults
DRUN='--dry-run'
DO_DELETE=${1:-'no'}
REGION=${2:-'eu-west-1'}
ACCOUNTID=${3:-'self'}

# Get two temporary files
SNAP_FILE=$(mktemp)
IMAGE_FILE=$(mktemp)

# Get the snapshot list and the volume list
aws --region "$REGION" ec2 describe-snapshots --owner-ids "$ACCOUNTID" --query 'Snapshots[*].[SnapshotId]' --output text > "$SNAP_FILE"
aws --region "$REGION" ec2 describe-images --owners "$ACCOUNTID" --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.[SnapshotId]' --output text > "$IMAGE_FILE"

# Check if the outputed command should be dry-run (default) or not
if [ "$DO_DELETE" = "IAMSURE" ]
then
 DRUN=''
fi

# count each snapshot id, decrease when a volume reference it, print delete command for those with no volumes
awk -v REGION="$REGION" -v DRUN="$DRUN" 'FNR==NR { snap[$1]++; next } { snap[$1]-- } END { for (s in snap) { if (snap[s] > 0) { cmd="aws --region " REGION " " DRUN " ec2 delete-snapshot --snapshot-id " s; print(cmd) } } }' "$SNAP_FILE" "$IMAGE_FILE"
# Clean up the temp files
rm "$SNAP_FILE" "$IMAGE_FILE"

জমকালো! এবং 'অনুসরণ' (যা আইএমও'র 'অনুসরণ' হওয়া উচিত) বাদে আমি মনে করি এই উত্তরটি উচ্চ মানের পোস্টের নমুনা হিসাবে বিবেচিত হবে। এতে কেবলমাত্র কিছুটা অপ্রয়োজনীয় মনে হচ্ছে, অস্বীকৃতি (অস্বীকার করা (এসই সাইটের কোনও কিছু থেকে যে কোনও কিছু ব্যবহার করে আসে "এটি নিজের ঝুঁকিতে ব্যবহার করুন") আসে)। আমি কেবলমাত্র 1 টি অতিরিক্ত উন্নতি আপনি যুক্ত করতে চাইতে পারেন: আপনি যদি এই স্ক্রিপ্টটি পরীক্ষা করে থাকেন এবং যদি এর পরীক্ষার ফলাফলগুলি সংক্ষিপ্ত করতে হয় তবে একটি ইঙ্গিত ("ডিজাইনের মতো কিছু কাজ করে?")। স্পষ্টতই, আপনি যদি ইতিমধ্যে এটি নিজেরাই ব্যবহার করেন তবে এটি আরও ভাল একটি ইঙ্গিত।
Pierre.Vriens

@ পিয়ার আজ সকালে এটি লিখেছেন, আংশিকভাবে পরীক্ষিত হয়েছে, সম্ভবত আজ বিকেলে আমাদের পাইপলাইনে প্রবেশ করবে এবং আমি যখন সাধারণ ধারণার সাথে একমত হই ´ যেমনটি 'তেমনই করা হয়, তখন' ব্যাকআপ 'অপসারণের ঝুঁকি স্তর বেশি এবং আমি অনুভব করি যে এটির উপর চাপ দেওয়া উচিত আরও বেশি.
তেনসিভাই

এইচএম, সুতরাং আমরা আপনাকে এই ধরণের ডিওওপিএস প্রয়োজনীয়তার জন্য একটি বিনামূল্যে কোড রাইটিং পরিষেবা শুরু করতে জড়িত করতে পারি (কিছু অস্বীকৃতি-স্ট্রিং সংযুক্ত করে) ... আকর্ষণীয়! আমি প্রস্তাব দিই যা পরে (সময় ঠিক থাকে) আপনি " আমার স্ক্রিপ্টটি এই বিকালে আমাদের পাইপলাইনে প্রবেশ করেছে " এর মতো একটি ছোট্ট আপডেট যোগ করুন (শেষে) ।
Pierre.Vriens

@ পিয়েরে।ভ্রিয়েন্স আমি বলেছিলাম সম্ভবত গ্যারান্টি নেই, পরের সপ্তাহে বা তার পরেও হতে পারে;)
তেনসিবাই

1
পারফেক্ট, সম্পাদনার জন্য ধন্যবাদ! ঠিক মত কাজ করে।
অ্যালেক্স

5

আমি রড্রিগু কফফি (বোনক্লে 7) দ্বারা গিটহাবে নীচের স্ক্রিপ্টটি ব্যবহার করেছি এবং এটি বেশ ভাল কাজ করে।

https://github.com/bonclay7/aws-amicleaner

COMMAND:

amicleaner --check-orphans

ডকুমেন্টেশন ব্লগ পোস্ট থেকে এটি আরও কিছু কাজ করে:

এটি আসলে এর থেকে কিছুটা বেশি করে, আজকের দিনে এটি এর অনুমতি দেয়:

  • চিত্র এবং সম্পর্কিত স্ন্যাপশটের একটি তালিকা সরানো
  • এএমআই ম্যাপিং:
    • নাম ব্যবহার করা
    • ট্যাগ ব্যবহার করে
  • ফিল্টারিং এএমআই:
    • চলমান দৃষ্টান্ত দ্বারা ব্যবহৃত
    • অটোক্যাসিং গ্রুপগুলি থেকে (প্রবর্তন কনফিগারেশন) থেকে একটি পছন্দসই ক্ষমতা 0 তে সেট করা
    • অটোক্যাসিং গ্রুপগুলি থেকে পৃথক লঞ্চ কনফিগারেশন থেকে
  • আপনি কতগুলি এএমআই রাখতে চান তা উল্লেখ করে
  • এতিম স্ন্যাপশট পরিষ্কার করা
  • কিছুটা রিপোর্টিং

3

এখানে একটি স্ক্রিপ্ট রয়েছে যা আপনাকে অনাথ স্ন্যাপশটগুলি খুঁজতে সহায়তা করতে পারে

comm -23 <(echo $(ec2-describe-snapshots --region eu-west-1 | grep SNAPSHOT | awk '{print $2}' | sort | uniq) | tr ' ' '\n') <(echo $(ec2-describe-images --region eu-west-1 | grep BLOCKDEVICEMAPPING | awk '{print $3}' | sort | uniq) | tr ' ' '\n') | tr '\n' ' '

(থেকে এখানে )

এছাড়াও আপনি সার্ভারফল্ট থেকে এই নিবন্ধটি পরীক্ষা করতে পারেন

পিএস অবশ্যই আপনি প্রতিচ্ছবি করতে অঞ্চল পরিবর্তন করতে পারেন

পিপিএস এখানে আপডেট আপডেট কোড:

 comm -23 \
<(echo $(aws ec2 describe-snapshots --region eu-west-1 |awk '/SNAPSHOT/ {print $2}' | sort -u) | tr ' ' '\n') \
<(echo $(aws ec2 describe-images --region eu-west-1 |  awk '/BLOCKDEVICEMAPPING/ {print $3}' | sort -u) | tr ' ' '\n') | tr '\n' ' '

কোডটি কী করে তা নমুনাটির বর্ণনা:

echo $(aws ec2 describe-snapshots --region eu-west-1 | awk '/SNAPSHOT/ {print $2}' | sort -u) | tr ' ' '\n')

স্ন্যাপশটের তালিকাটি STDOUT এ প্রেরণ করুন। এই নির্মাণ:

<(...)

commদুটি "ফাইল" থেকে কমান্ড পড়ার জন্য এবং তাদের তুলনা করার জন্য ভার্চুয়াল অস্থায়ী ফাইলহ্যান্ডলার তৈরি করুন


আপনি এটি পরীক্ষা করেছেন? আমি একই নিবন্ধটি পেয়েছি কিন্তু এটি কাজ করতে পারি না। যদি আপনি পারেন তবে আমার শেষের দিকে ব্যবহারকারীর ত্রুটি, তবে আমি আশঙ্কা করছি এটি নিবন্ধের বয়সের ভিত্তিতে পুরানো হতে পারে।
অ্যালেক্স

@ অ্যালেক্স, আগামীকাল এটি পরীক্ষা করতে পারে
রোমিও নিনভ

কমান্ড দেখুন পরিবর্তন হয়েছে, aws ec2 বর্ণনা / মুছুন ব্যবহার করুন
তেনসাইবাই

1
আমি একই উত্সটি পেয়েছি, তবে নায়ক ওজক সাজানো এবং ইউনিকের শৃঙ্খলাবদ্ধ করে আমার শেল
কোডারকে

1
আমার পক্ষে দুর্দান্ত, কেবল আপনাকে কিছু (গঠনমূলক) প্রতিক্রিয়া জানাতে চেয়েছিলাম যে কোনও বিশেষজ্ঞের কাছে সম্ভবত আপনার মতো নিয়মিত ইংরাজী দেখায় (আপনার মতো), আমার কাছে চীনাদের মতো দেখতে বেশ, ঠিক আছে? পিএস: এবং এটি ফ্লেমিশ শোনায় না ... আপনার কাজ শেষ হওয়ার পরে যদি আমাকে অবহিত করতে চান তবে আমাকে একটি অতিরিক্ত মন্তব্য ফেলে দিন (যদি আপনি আমার আপডেট হওয়া প্রতিক্রিয়া চান তবে)।
Pierre.Vriens

2

আপনি ড্যানিল ইয়ারোস্লাভটসেভ দ্বারা ঠিক যা চেয়েছিলেন তার একটি গিথহব গিস্ট কোড স্নিপেট এখানে

এটি সমস্ত চিত্র এবং তাদের স্ন্যাপশটের তালিকা ব্যবহার করে এবং সমস্ত স্ন্যাপশট আইডিগুলির তালিকাতে আইডিগুলির সাথে তুলনা করে। যা কিছু অবশিষ্ট রয়েছে তা অনাথরা। কোডটি উপরের উত্তরের মতো একই নীতিতে কাজ করে তবে এটি আরও ভাল ফর্ম্যাটেড এবং কিছুটা বেশি পঠনযোগ্য।

কোডটি --query Snapshots[*].SnapshotIdবিকল্প সহ জেএমইএসপথের সুবিধা গ্রহণ করে (আপনি এটির জন্য জেপি কমান্ড লাইন ইউটিলিটিও ব্যবহার করতে পারেন, এটি ইতিমধ্যে আপনার বিতরণে রয়েছে the আউটপুটটিকে পাঠ্য হিসাবে ফর্ম্যাট করে --output textHere এখানে এপিআই রেফারেন্স এবং কয়েকটি উদাহরণের একটি লিঙ্ক রয়েছে slightly এটি সামান্য গ্রেপ / অ্যাওক / সাজানো / ইউনিক / টিআর পাইপগুলির দীর্ঘ চেইনের চেয়ে আরও মার্জিত।

টড ওয়ালটন দ্বারা সতর্কতা : 'জেকিউ' ইউটিলিটিতে ভুল করবেন না যা জেসন ডকুমেন্টগুলি পার্স করতে বিভিন্ন কোয়েরি ভাষা ব্যবহার করে।


শুধু এফওয়াইআই, জেকিউ কমান্ড লাইন ইউটিলিটি "আউস" কমান্ডটি ব্যবহার করে এমন জেএসওএন কোয়েরি ভাষা নয় । "Aws" কমান্ডটি JMESPath ব্যবহার করে।
টড ওয়ালটন

এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। আমি আজ নতুন কিছু শিখেছি।
জিরি ক্লাউদা

0

আমি স্ন্যাপশট.পি স্ক্রিপ্ট লিখেছি যা সমস্ত স্ন্যাপশটের উপর পুনরাবৃত্তি করে (অঞ্চলগুলির সংজ্ঞায়িত তালিকায়) এবং উত্পন্ন করে report.csv। এই ফাইলটিতে উদাহরণস্বরূপ, এএমআই এবং সমস্ত স্ন্যাপশট দ্বারা রেফারেন্সযুক্ত ভলিউম সম্পর্কিত তথ্য রয়েছে।

ইন্টারঅ্যাকটিভভাবে জটলা স্ন্যাপশট অপসারণ করার কমান্ডও রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.