Mit der Zeit können sich in AWS-Konten Ressourcen ansammeln, die nicht mehr notwendig sind, aber weiterhin Kosten verursachen. Ein häufiges Beispiel sind verwaiste EBS-Snapshots, die nach dem Löschen von Volumes zurückbleiben. Die manuelle Verwaltung dieser Snapshots kann mühsam und kostspielig sein.
Diese Anleitung zeigt, wie Sie die Bereinigung verwaister EBS-Snapshots mithilfe von Python (Boto3) und Terraform in einer AWS Lambda-Funktion automatisieren, die dann mithilfe von AWS EventBridge nach einem Zeitplan oder Ereignis ausgelöst wird.
Am Ende verfügen Sie über eine vollständige serverlose Lösung, um Ihre AWS-Umgebung sauber und kosteneffizient zu halten.
Stellen Sie zunächst sicher, dass die wesentlichen Tools installiert sind.
AWS CLI
Die AWS CLI ermöglicht den Befehlszeilenzugriff auf AWS-Dienste. Installieren Sie es entsprechend Ihrem Betriebssystem:
macOS: brew install awscli
Windows:AWS CLI-Installationsprogramm
Linux:Verwenden Sie den Paketmanager (z. B. sudo apt install awscli für Ubuntu).
Installation überprüfen:
aws --version
Terraform
Terraform ist ein beliebtes Infrastructure as Code (IaC)-Tool zum Definieren und Verwalten von AWS-Ressourcen.
macOS: brew install terraform
Windows: Terraform-Installationsprogramm
Linux: Laden Sie die Binärdatei herunter und verschieben Sie sie nach /usr/local/bin.
Installation überprüfen:
terraform -version
Konfigurieren Sie Ihre AWS CLI mit Zugriffsschlüsseln, damit Terraform und Lambda sich bei AWS-Diensten authentifizieren können.
Zugriffsschlüssel erhalten von Ihrem AWS-Konto (AWS IAM-Konsole).
AWS CLI konfigurieren:
aws configure
Folgen Sie den Anweisungen zur Eingabe Ihres Zugriffsschlüssels, Ihres geheimen Zugriffsschlüssels, der Standardregion (z. B. us-east-1) und des Ausgabeformats (z. B. json).
Eine Schritt-für-Schritt-Anleitung zum Erstellen einer Lambda-Funktion finden Sie hier.
Diese Lambda-Funktion verwendet Boto3, das Python SDK von AWS, um alle EBS-Snapshots aufzulisten, den zugehörigen Volume-Status zu überprüfen und Snapshots zu löschen, wenn das Volume nicht mehr verfügbar ist. Hier ist der vollständige Funktionscode:
import boto3 import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): ec2_cli = boto3.client("ec2") response = ec2_cli.describe_snapshots(OwnerIds=["self"], DryRun=False) snapshot_id = [] for each_snapshot in response["Snapshots"]: try: volume_stat = ec2_cli.describe_volume_status( VolumeIds=[each_snapshot["VolumeId"]], DryRun=False ) except ec2_cli.exceptions.ClientError as e: if e.response["Error"]["Code"] == "InvalidVolume.NotFound": snapshot_id.append(each_snapshot["SnapshotId"]) else: raise e if snapshot_id: for each_snap in snapshot_id: try: ec2_cli.delete_snapshot(SnapshotId=each_snap) logger.info(f"Deleted SnapshotId {each_snap}") except ec2_cli.exceptions.ClientError as e: return { "statusCode": 500, "body": f"Error deleting snapshot {each_snap}: {e}", } return {"statusCode": 200}
Mit Terraform erstellen wir eine Lambda-Funktion, eine IAM-Rolle und eine Richtlinie, um dieses Skript in AWS bereitzustellen. Darüber hinaus richten wir eine EventBridge-Regel ein, um Lambda regelmäßig auszulösen.
Terraform-Setup und Anbieterkonfiguration
In diesem Abschnitt wird Terraform konfiguriert, einschließlich der Einrichtung der Remote-Statusverwaltung in S3.
Hinweis:Ändern Sie den Wert „required_version“ gemäß der Terraform-Versionsausgabe.
aws --version
IAM-Rolle und -Richtlinie für Lambda
Diese IAM-Konfiguration richtet Berechtigungen für Lambda für den Zugriff auf EC2 und CloudWatch ein und ermöglicht das Löschen und Protokollieren von Snapshots.
terraform -version
Verpacken und Bereitstellen der Lambda-Funktion
Hier verpacken wir den Python-Code und stellen ihn als Lambda-Funktion bereit.
aws configure
EventBridge-Regel für Lambda-Aufruf
Mit AWS EventBridge können Sie geplante oder ereignisbasierte Trigger für Lambda-Funktionen erstellen. Hier konfigurieren wir EventBridge so, dass unsere Lambda-Funktion nach einem Zeitplan aufgerufen wird, etwa alle 24 Stunden. Weitere Informationen zu EventBridge und geplanten Ereignissen finden Sie in der AWS-Dokumentation hier.
import boto3 import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): ec2_cli = boto3.client("ec2") response = ec2_cli.describe_snapshots(OwnerIds=["self"], DryRun=False) snapshot_id = [] for each_snapshot in response["Snapshots"]: try: volume_stat = ec2_cli.describe_volume_status( VolumeIds=[each_snapshot["VolumeId"]], DryRun=False ) except ec2_cli.exceptions.ClientError as e: if e.response["Error"]["Code"] == "InvalidVolume.NotFound": snapshot_id.append(each_snapshot["SnapshotId"]) else: raise e if snapshot_id: for each_snap in snapshot_id: try: ec2_cli.delete_snapshot(SnapshotId=each_snap) logger.info(f"Deleted SnapshotId {each_snap}") except ec2_cli.exceptions.ClientError as e: return { "statusCode": 500, "body": f"Error deleting snapshot {each_snap}: {e}", } return {"statusCode": 200}
Nachdem Sie die Infrastruktur definiert haben, initialisieren Sie die Terraform-Konfiguration und wenden Sie sie an:
terraform { required_version = ">=1.5.6" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.72.0" } } backend "s3" { bucket = "terraform-state-files-0110" key = "delete-orphan-snapshots/terraform.tfstate" region = "us-east-1" dynamodb_table = "tf_state_file_locking" } } provider "aws" { region = "us-east-1" }
Um zu überprüfen, ob die Lösung funktioniert:
Zusammenfassung
Durch die Kombination von Python (Boto3), Terraform und AWS EventBridge haben wir eine vollautomatische, serverlose Lösung zum Bereinigen verwaister EBS-Snapshots erstellt. Dieses Setup reduziert nicht nur die Cloud-Kosten, sondern fördert auch eine aufgeräumte, effiziente AWS-Umgebung. Bei geplanten Aufrufen können Sie sicher sein, dass verwaiste Ressourcen konsequent entfernt werden.
Probieren Sie diese Lösung in Ihrem eigenen AWS-Konto aus und erleben Sie die Vorteile der Automatisierung im Cloud-Ressourcenmanagement!
Das obige ist der detaillierte Inhalt vonVerabschieden Sie sich von verwaisten Snapshots: Automatisieren Sie die Bereinigung mit Serverless, Terraform und AWS EventBridge!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!