Список всех снимков EC2 EBS, сделанных на определенную дату - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь перечислить все снимки томов EBS, сделанные на определенную дату, чтобы я мог автоматизировать копирование с помощью сценария bash по всему региону для лучшего аварийного восстановления У меня есть другой скрипт bash, который создает снимки всех используемых томов EBS и удаляет все, что старше 30 дней. Мне нужно скопировать все, что снято на предыдущую дату, в другом регионе.

Я пробовал много переключателей jmespath (которые не дают никакого вывода), некоторые из них как: -

$aws ec2 describe-snapshots --query 'Sanpshots[?StartTime >= `2018-06-25`]|[?StartTime <= `2018-06-27`]'
$aws ec2 describe-snapshots --query 'Sanpshots[?StartTime == `2018-06-25`]

Я просмотрел много страниц, но не смог найти какую-либо конкретную дату. Пожалуйста, предложите некоторые ключи, методы сортировки, ссылки или что-нибудь еще. Благодарю.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я понял, что переключатель JMESpath от doc right здесь. Таким образом, чтобы найти конкретную дату, я применил переключатель, который выполняет поиск между двумя датами. например: -

'Snapshots[?(StartTime >= `2018-06-27`) && (StartTime <= `2018-06-28`)]

Причина, по которой "==" не работает в коммутаторе, поскольку он используется для строки с точным соответствием.

Итак, полная строка: -

aws ec2 describe-snapshots --query 'Snapshots[?(StartTime >= `2018-06-27`) && (StartTime <= `2018-06-28`)].{ID:SnapshotId,ST:StartTime}' --output text --region $regionname
0 голосов
/ 28 июня 2018

Учитывая, что вам понадобится какой-то программный способ вычисления "30 дней назад", вам лучше делать это на языке программирования, например:

import boto3
import pytz
from datetime import datetime, timedelta

# Get my AWS Account ID
myAccount = boto3.client('sts').get_caller_identity()['Account']

# Connect to EC2
client = boto3.client('ec2', region_name = 'ap-southeast-2')

# Get a list of snapshots for my AWS account (not all public ones)
snapshots = client.describe_snapshots(OwnerIds=[myAccount])['Snapshots']

# Find snapshots more than 30 days old
oldest_date = datetime.now(pytz.utc) - timedelta(days=30)
old_snapshots = [s for s in snapshots if s['StartTime'] < oldest_date]

# Delete the old snapshots
for s in old_snapshots:
  client.delete_snapshot(SnapshotId = s['SnapshotId'])
...