Эффективные методы управления потерянными снимками в AWS

Управление снимками в Amazon Web Services (AWS) имеет решающее значение для эффективного использования ресурсов и оптимизации затрат. Потерянные моментальные снимки, то есть снимки, которые больше не связаны с какими-либо активными ресурсами, могут накапливаться с течением времени и приводить к ненужным затратам на хранение. В этой статье мы рассмотрим несколько методов выявления потерянных снимков и управления ими в AWS, а также приведем примеры кода, которые помогут автоматизировать этот процесс.

Метод 1: AWS CLI
Интерфейс командной строки AWS (CLI) предоставляет набор мощных команд для взаимодействия с сервисами AWS. Чтобы идентифицировать потерянные снимки, вы можете использовать следующую команду AWS CLI:

aws ec2 describe-snapshots --filters "Name=status,Values=completed" --query 'Snapshots[?State==`completed` && !exists(Instances)]'

Эта команда извлекает все завершенные снимки, не имеющие связанных экземпляров. Затем вы можете дополнительно обработать выходные данные или удалить потерянные снимки с помощью соответствующих команд AWS CLI.

Метод 2: AWS SDK
AWS SDK, например AWS SDK для Python (Boto3), обеспечивают программный доступ к сервисам AWS. Вот пример использования Boto3 для идентификации и удаления потерянных снимков:

import boto3
def find_orphaned_snapshots():
    ec2_client = boto3.client('ec2')
    response = ec2_client.describe_snapshots(Filters=[{'Name': 'status', 'Values': ['completed']}])
    orphaned_snapshots = []
    for snapshot in response['Snapshots']:
        if 'Instances' not in snapshot:
            orphaned_snapshots.append(snapshot['SnapshotId'])
    return orphaned_snapshots
def delete_snapshots(snapshot_ids):
    ec2_client = boto3.client('ec2')
    ec2_client.delete_snapshots(SnapshotIds=snapshot_ids)
# Usage
orphaned_snapshots = find_orphaned_snapshots()
delete_snapshots(orphaned_snapshots)

Этот код Python использует Boto3 для описания всех завершенных снимков и проверяет, есть ли у каждого снимка связанные экземпляры. Если нет, он добавляет идентификатор снимка в список потерянных снимков. Наконец, он удаляет идентифицированные потерянные снимки.

Метод 3: AWS CloudFormation
AWS CloudFormation позволяет автоматизировать создание ресурсов AWS и управление ими. Вы можете использовать CloudFormation для регулярного сканирования потерянных снимков и их удаления. Вот пример шаблона CloudFormation:

Resources:
  OrphanedSnapshotCleanupRule:
    Type: AWS::Events::Rule
    Properties:
      ScheduleExpression: rate(1 day)
      Targets:
        - Arn: <LAMBDA_FUNCTION_ARN>
  OrphanedSnapshotCleanupFunction:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.8
      Handler: lambda_function.handler
      Code:
        ZipFile: |
          import boto3
          def lambda_handler(event, context):
              ec2_client = boto3.client('ec2')
              response = ec2_client.describe_snapshots(Filters=[{'Name': 'status', 'Values': ['completed']}])
              orphaned_snapshots = []
              for snapshot in response['Snapshots']:
                  if 'Instances' not in snapshot:
                      orphaned_snapshots.append(snapshot['SnapshotId'])
              if orphaned_snapshots:
                  ec2_client.delete_snapshots(SnapshotIds=orphaned_snapshots)
  OrphanedSnapshotCleanupPermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !Ref OrphanedSnapshotCleanupFunction
      Action: lambda:InvokeFunction
      Principal: events.amazonaws.com
      SourceArn: !GetAtt OrphanedSnapshotCleanupRule.Arn

Этот шаблон CloudFormation устанавливает запланированное правило, которое запускает функцию Lambda для идентификации и удаления потерянных снимков. Функция Lambda использует код, аналогичный ранее показанному в Boto3.

Эффективное управление потерянными моментальными снимками в AWS жизненно важно для контроля расходов на хранилище. В этой статье мы рассмотрели различные методы, в том числе AWS CLI, AWS SDK, такие как Boto3, и AWS CloudFormation, для идентификации и удаления потерянных снимков. Автоматизируя процесс с помощью этих методов, вы можете гарантировать, что ваши ресурсы AWS оптимизированы, что приведет к экономии затрат и повышению операционной эффективности.