Ungenutzte EBS-Volumes (Elastic Block Storage) auf AWS mit einer Lambda-Funktion löschen

Amazon Elastic Block Store (EBS) ist ein einfach zu bedienender, leistungsstarker Blockspeicherdienst. Er ist wie eine externe Festplatte, die an eine EC2-Instanz angeschlossen werden kann und auf der wir unsere Daten speichern. Wenn die EBS-Volumes nicht genutzt und nicht benötigt werden und noch im Account vorhanden sind, werden sie dir von AWS unnötigerweise in Rechnung gestellt. Um Kosten zu sparen, sehen wir uns die Lambda-Funktion an, mit der man solche ungenutzten EBS Volumes finden und löschen kann.

Vorraussetzungen

  1. AWS-Konto (Erstelle wenn du noch keinen hast).
  2. Grundlegendes Verständnis von EC2 Instance, klicke hier, um mehr über EC2 Instance zu erfahren.
  3. Grundlegendes Verständnis von Lambda,klicke hier, um mehr über Lambda-Funktionen zu erfahren.

Was werden wir tun?

  1. Melde dich bei AWS an.
  2. Erstelle eine Lambda-Funktion, um ungenutzte EBS-Volumes zu löschen.

Melde dich bei AWS an

  1. Klicke auf hier um zur AWS-Anmeldeseite zu gelangen.

Wenn wir den obigen Link anklicken, sehen wir die folgende Webseite, auf der wir uns mit unseren Anmeldedaten anmelden müssen.

Sobald wir uns erfolgreich bei AWS angemeldet haben, sehen wir die Hauptkonsole mit allen aufgelisteten Services.

Erstelle eine Lambda-Funktion, um ungenutzte EBS-Volumes zu löschen.

Klicke oben links auf „Services“, suche nach „EC2“ und gehe zum Haupt-Dashboard von EC2.

Scrolle im Haupt-Dashboard von EC2 nach unten und klicke auf „Volumes“ unter „Elastic Block Speicher„.

Hier siehst du alle EBS Volumes, die du in der ausgewählten Region hast. Volumes mit dem Status „verfügbar“ sind ungenutzte Volumes, die mit keiner EC2-Instanz verbunden sind. Diese Volumes können gefahrlos gelöscht werden, wenn sie keine wichtigen Daten enthalten oder keine Daten auf ihnen gespeichert sind.

Volumes können von dieser Konsole aus gelöscht werden, aber wenn es sich um 100-1000 ungenutzteVolumes gibt, ist es besser, eine Automatisierung einzurichten.

Um das Löschen von ungenutzten Volumes zu automatisieren, können wir „Lambda-Funktionen“ verwenden. Klicke oben links auf dem Bildschirm auf „Dienste“ und suche nach „Lambda“.

Im Haupt-Dashboard von Lambda klickst du auf „Funktion erstellen“.

Erstelle eine Funktion mit „Author from Scratch“, benenne die zu erstellende Funktion und wähle die Runtime. Hier sehen wir eine Lambda-Funktion mit Python Runtime, um das Löschen der ungenutzten EBS-Volumes zu automatisieren. Klicke auf „Funktion erstellen“, um fortzufahren.

Du siehst den folgenden Bildschirm mit dem Code der Beispielfunktion.

Verwende den folgenden Code, um die ungenutzten EBS Volumes zu löschen. Lösche den bestehenden Funktionscode und füge den folgenden Code in das Funktionscodefeld ein. Wenn du die ungenutzten EBS Volumes nicht löschen willst, markiere sie als „Name: DND“. Der folgende Code wird solche Volumes nicht löschen.

import boto3
ec2 = boto3.resource('ec2',region_name='eu-west-3')
def lambda_handler(event, context):
    for vol in ec2.volumes.all():
        if  vol.state=='available':
            if vol.tags is None:
                vid=vol.id
                v=ec2.Volume(vol.id)
                v.delete()
                print ('Deleted ' +vid)
                continue
            for tag in vol.tags:
                if tag['Key'] == 'Name':
                    value=tag['Value']
                    if value != 'DND' and vol.state=='available':
                        vid=vol.id
                        v=ec2.Volume(vol.id)
                        v.delete()
                        print ('Deleted ' +vid)

Oder du kannst die Liste der nicht verwendeten EBS Volumes angeben, die gelöscht werden sollen.

import boto3
ec2 = boto3.resource('ec2',region_name='eu-west-3')
volume_ids = ['vol-029af2107c0a0807d', ‘vol-029af2107c0a08123’]
def lambda_handler(event, context):
    for volid in volume_ids:
        vid=volid
        v=ec2.Volume(vid)
        v.delete()
        print ('Deleted ' +vid)

Speichere die Funktion, indem du auf die Schaltfläche Speichern klickst.

Bevor wir den Code ausführen/testen, müssen wir ein Ereignis erstellen. Wir werden ein einfaches Ereignis erstellen. Um ein Ereignis zu erstellen, klicke auf „Testereignis auswählen“ – > Testereignis konfigurieren.

Auf dem folgenden Bildschirm gibst du dem Ereignis einen Namen, behältst die Ereignisvorlage bei und klickst auf „Erstellen“.

Wenn der Code und das Ereignis fertig sind, müssen wir der Lambda-Funktion noch die erforderlichen Richtlinien zuweisen, bevor wir die Funktion testen oder ausführen können. Um die erforderliche Richtlinie zuzuweisen, scrolle nach unten und klicke auf „View the delete-unused-ebs-volumes-role-ruemgr4x role“ und öffne sie in einem neuen Fenster.

Klicke auf „Richtlinie anhängen“, um die erforderliche Richtlinie an diese IAM-Rolle anzuhängen.

Suche nach EC2 und füge die Richtlinie „AmazonEC2FullAccess“ hinzu. Diese Richtlinie gewährt vollen Zugriff auf die Lambda-Funktion auf EC2-Instanzen.

Jetzt können wir die Funktion ausführen. Klicke auf „Testen“.

Sobald du die Funktion ausgeführt hast, kannst du die Protokolle unter Ausführungsergebnis sehen.

Du kannst überprüfen, ob das ungenutzte EBS-Volumen gelöscht wurde oder nicht, indem du das Haupt-Dashboard der EC2-Instanz aufrufst.

Hier siehst du, dass das ungenutzte EBS-Volumen in der Konsole nicht mehr verfügbar ist, was bedeutet, dass es von der Lambda-Funktion erfolgreich gelöscht wurde.

Fazit

In diesem Artikel haben wir gesehen, wie man eine Lambda-Funktion schreibt, um ungenutzte EBS-Volumes zu löschen. Das kann uns helfen, zusätzliche Kosten für das AWS-Konto zu sparen.

Das könnte dich auch interessieren …