Howto detele archive in AWS Glacier Vault

Автор | 25.04.2020

Post writed only as note for me. All information fount on docs https://docs.aws.amazon.com/cli/latest/reference/glacier/delete-archive.html and from github https://gist.github.com/veuncent/ac21ae8131f24d3971a621fac0d95be5

First step: create job for retrieve information in Vault

aws glacier initiate-job --job-parameters '{"Type": "inventory-retrieval"}' --account-id - --vault-name VM-test
---
{
    "location": "/727672876752/vaults/VM-test/jobs/OLMDWS22tHYasKGnvdT-L9l4ryYX1NKnE6SNnwztrgbw5wMNZuXUjzdTPd-HRKUGv6jNxnwA3fysoeb5M4yj4N9_lblQ",
    "jobId": "OLMDWS22tKVfeKGnvdT-L9l4ryGTDSnE6SNnwztrgbw5wMNZuXUjzdTPd-HRKUGv6jNxnwA3fysoeb5M4yj4N9_lblQ"
}

Get status of our Job

aws glacier list-jobs --account-id - --vault-name VM-test
{
    "JobList": [
        {
            "JobId": "OLMDWS22tKVfeKGnvdT-L9l4ryYHFESnE6SNnwztrgbw5wMNZuXUjzdTPd-HRKUGv6jNxnwA3fysoeb5M4yj4N9_lblQ",
            "Action": "InventoryRetrieval",
            "VaultARN": "arn:aws:glacier:eu-central-1:727633333352:vaults/VM-test",
            "CreationDate": "2020-04-25T11:34:14.142Z",
            "Completed": false,
            "StatusCode": "InProgress",
            "InventoryRetrievalParameters": {
                "Format": "JSON"
            }
        }
    ]
}

When status wil be “Completed: true” we can download list of archives and start remove all data from Vault using script from github

aws glacier get-job-output --account-id - --region YOUR_REGION --vault-name VM-test --job-id YOUR_JOB_ID ./output.json
Script:
#!/usr/bin/env bash

file='./output.json'
id_file='./output-archive-ids.txt'

if [[ -z ${AWS_ACCOUNT_ID} ]] || [[ -z ${AWS_REGION} ]] || [[ -z ${AWS_VAULT_NAME} ]]; then
        echo "Please set the following environment variables: "
        echo "AWS_ACCOUNT_ID"
        echo "AWS_REGION"
        echo "AWS_VAULT_NAME"
        exit 1
fi

echo "Started at $(date)"

echo -n "Getting archive ids from $file..."
if [[ ! -f $id_file ]]; then
  cat $file | jq -r --stream ". | { (.[0][2]): .[1]} | select(.ArchiveId) | .ArchiveId" > $id_file 2> /dev/null
fi
total=$(wc -l $id_file | awk '{print $1}')
echo "got $total"

num=0
while read -r archive_id; do
  num=$((num+1))
  echo "Deleting archive $num/$total at $(date)"
  aws glacier delete-archive --archive-id=${archive_id} --vault-name ${AWS_VAULT_NAME} --account-id ${AWS_ACCOUNT_ID} --region ${AWS_REGION} &
  [ $( jobs | wc -l ) -ge $( nproc ) ] && wait
done < "$id_file"

wait
echo "Finished at $(date)"
echo "Deleted archive ids are in $id_file"

Start script and wait. You can freely to change the variable “$( nproc )” for the CPU thread will be used.

Залишити відповідь