Elastic IP Kosten stoppen: Disassociate und Release richtig anwenden
Die EC2-Instanz ist gestoppt, aber die AWS-Rechnung zeigt weiterhin stündliche Gebühren für eine Elastic IP — das ist ein klassischer Kostenfallen-Moment, den fast jeder AWS-Nutzer irgendwann erlebt. Das Problem liegt nicht darin, dass die Instanz läuft, sondern darin, wie AWS Elastic IPs abrechnet: Eine reservierte, aber nicht aktiv genutzte öffentliche IP kostet Geld, unabhängig vom Instanzstatus.
TL;DR: Elastic IP Kosten stoppen
| Situation | Wird berechnet? | Aktion erforderlich |
|---|---|---|
| EIP einer laufenden Instanz zugewiesen | Nein (kostenlos) | Keine |
| EIP zugewiesen, Instanz gestoppt | Ja | Disassociate + Release |
| EIP alloziert, keiner Instanz zugewiesen | Ja | Release |
| EIP freigegeben (released) | Nein | — |
Wie Elastic IP Abrechnung funktioniert
AWS stellt öffentliche IPv4-Adressen aus einem begrenzten Pool bereit. Wenn eine Elastic IP alloziert, aber nicht einer laufenden Instanz zugewiesen ist, hält AWS diese Adresse für dich reserviert — ohne sie produktiv zu nutzen. Genau dafür fällt die stündliche Gebühr an. Der Instanzstatus (running, stopped, terminated) ist dabei sekundär; entscheidend ist, ob die EIP an eine laufende Instanz gebunden ist.
Seit Februar 2024 berechnet AWS öffentliche IPv4-Adressen auch dann, wenn sie einer laufenden Instanz zugewiesen sind — das ist eine Änderung gegenüber dem früheren Modell. Prüfe die aktuelle Preisseite für IPv4-Adressen, da sich die Konditionen geändert haben und weiter ändern können.
Eine Elastic IP ist wie ein gemieteter Parkplatz: Ob dein Auto gerade dort steht oder nicht — du zahlst die Miete, solange du den Platz hältst.
Zustandsübergänge einer Elastic IP
Bevor du CLI-Befehle ausführst, ist es wichtig zu verstehen, in welchem Zustand sich deine EIP befindet und welche Übergänge möglich sind.
(Instanz läuft) Alloziert --> Freigegeben : release-address ZugewiesenLaufend --> ZugewiesenGestoppt : Instanz wird gestoppt ZugewiesenGestoppt --> ZugewiesenLaufend : Instanz wird gestartet ZugewiesenLaufend --> Alloziert : disassociate-address ZugewiesenGestoppt --> Alloziert : disassociate-address Alloziert --> Freigegeben : release-address Freigegeben --> [*]
- Alloziert, nicht zugewiesen: Die EIP existiert in deinem Konto, ist aber keiner Ressource zugeordnet. Gebühren fallen an.
- Zugewiesen, Instanz gestoppt: Die EIP ist einer Instanz zugewiesen, die Instanz läuft aber nicht. Gebühren fallen an.
- Zugewiesen, Instanz läuft: Aktive Nutzung. Prüfe die aktuelle IPv4-Preisseite für den geltenden Tarif.
- Freigegeben: Die EIP ist aus deinem Konto entfernt. Keine Gebühren mehr. Die IP-Adresse kehrt in den AWS-Pool zurück.
Der kritische Punkt: Vom Zustand 'Zugewiesen, Instanz gestoppt' kommst du nicht direkt zu 'Freigegeben'. Du musst zuerst disassoziieren, dann freigeben.
Der korrekte Ablauf: Disassociate, dann Release
Zwei Schritte sind notwendig. Wer nur einen davon ausführt, zahlt weiter.
Instanz gestoppt"] -->|"Schritt 1: disassociate-address
(eipassoc-...)"| B["EIP alloziert
nicht zugewiesen"] B -->|"Schritt 2: release-address
(eipalloc-...)"| C["EIP freigegeben
Keine Kosten"] style A fill:#f5a623,color:#000 style B fill:#f5a623,color:#000 style C fill:#7ed321,color:#000
- Schritt 1 — Disassociate: Trennt die Verbindung zwischen EIP und Instanz. Die EIP existiert danach noch in deinem Konto, ist aber keiner Ressource mehr zugewiesen.
- Schritt 2 — Release: Gibt die EIP vollständig frei. Sie verlässt dein Konto und kehrt in den AWS-Pool zurück. Ab diesem Moment entstehen keine Kosten mehr.
Elastic IP Kosten stoppen: Schritt-für-Schritt per AWS CLI
Schritt 1: Alle Elastic IPs im Konto auflisten
Zuerst verschaffst du dir einen Überblick über alle allozierten EIPs und ihren aktuellen Zuweisungsstatus. Ohne diese Übersicht weißt du nicht, welche IPs überhaupt Kosten verursachen — insbesondere in Konten mit mehreren Regionen oder alten, vergessenen Ressourcen.
aws ec2 describe-addresses \
--region us-east-1 \
--query 'Addresses[*].{PublicIP:PublicIp,AllocationId:AllocationId,AssociationId:AssociationId,InstanceId:InstanceId,Domain:Domain}' \
--output table
Achte auf Zeilen, bei denen AssociationId oder InstanceId leer ist — das sind EIPs, die bereits jetzt Kosten verursachen, ohne genutzt zu werden. Zeilen mit einer AssociationId, aber einer gestoppten Instanz, sind der häufigste Fall dieses Problems.
Schritt 2: Instanzstatus prüfen
Bevor du disassoziierst, bestätige, dass die zugehörige Instanz tatsächlich gestoppt ist. Dieser Schritt verhindert, dass du versehentlich eine produktive Instanz von ihrer öffentlichen IP trennst.
aws ec2 describe-instances \
--instance-ids i-0123456789abcdef0 \
--region us-east-1 \
--query 'Reservations[*].Instances[*].{InstanceId:InstanceId,State:State.Name,PublicIp:PublicIpAddress}' \
--output table
Schritt 3: EIP von der Instanz disassoziieren
Verwende die AssociationId aus Schritt 1 (Format: eipassoc-...), nicht die AllocationId. Das ist ein häufiger Fehler — beide IDs sehen ähnlich aus, aber disassociate-address erwartet die Association ID.
aws ec2 disassociate-address \
--association-id eipassoc-0123456789abcdef0 \
--region us-east-1
Kein Output bedeutet Erfolg. Prüfe danach erneut mit describe-addresses, ob das Feld AssociationId jetzt leer ist.
Schritt 4: EIP freigeben
Jetzt, da die EIP nicht mehr zugewiesen ist, kannst du sie mit der AllocationId freigeben. Nach diesem Befehl ist die IP-Adresse weg — sie kehrt in den AWS-Pool zurück und kann nicht wiederhergestellt werden.
aws ec2 release-address \
--allocation-id eipalloc-0123456789abcdef0 \
--region us-east-1
Schritt 5: Bestätigung
Verifiziere, dass die EIP nicht mehr in deinem Konto erscheint.
aws ec2 describe-addresses \
--region us-east-1 \
--output table
Wenn die EIP in der Ausgabe nicht mehr auftaucht, entstehen ab sofort keine weiteren Gebühren für diese Adresse.
IAM-Berechtigungen für diese Operationen
Falls du diese Schritte über einen IAM-Benutzer oder eine Rolle ausführst, sind mindestens diese Berechtigungen erforderlich:
🔽 IAM Policy anzeigen
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeAddresses",
"ec2:DescribeInstances",
"ec2:DisassociateAddress",
"ec2:ReleaseAddress"
],
"Resource": "*"
}
]
}
DescribeAddresses und DescribeInstances sind Read-Operationen und erfordern "Resource": "*" — eine Einschränkung auf spezifische ARNs ist für diese Describe-Aktionen nicht möglich. DisassociateAddress und ReleaseAddress können in manchen Umgebungen über Bedingungen weiter eingeschränkt werden; prüfe die AWS Service Authorization Reference für aktuelle Details.
Erfahrungsbericht: Warum 'gestoppt' nicht 'kostenlos' bedeutet
Das Szenario sieht immer gleich aus: Eine Testinstanz wird gestoppt, weil sie gerade nicht gebraucht wird. Der Entwickler denkt, damit sind alle Kosten gestoppt. Vier Wochen später zeigt das Billing Dashboard eine unerwartete Zeile für 'Elastic IP - IdleAddress'.
Die Fehldiagnose: 'Die Instanz ist gestoppt, also sollte nichts laufen.' Die tatsächliche Ursache: Die EIP ist noch der gestoppten Instanz zugewiesen. AWS berechnet die reservierte Adresse, nicht die Instanzlaufzeit.
Der Fix ist trivial — zwei CLI-Befehle. Aber der Schaden entsteht in den Wochen davor, weil das Billing-Alert-Threshold nicht niedrig genug gesetzt war. Richte für solche Fälle einen AWS Budgets Alert ein, der bei unerwarteten EC2-Nebenkosten (wie 'EC2-Other') anschlägt, bevor die nächste Monatsrechnung kommt.
Alle nicht genutzten Elastic IPs im Konto finden
In größeren Konten lohnt es sich, systematisch nach nicht zugewiesenen EIPs zu suchen. Dieser Befehl filtert direkt auf EIPs ohne aktive Zuweisung:
aws ec2 describe-addresses \
--region us-east-1 \
--filters 'Name=domain,Values=vpc' \
--query 'Addresses[?AssociationId==`null`].{PublicIP:PublicIp,AllocationId:AllocationId}' \
--output table
Führe diesen Befehl in jeder Region aus, in der du Ressourcen betreibst. Vergessene EIPs aus alten Projekten tauchen häufig in Regionen auf, die nicht mehr aktiv genutzt werden.
Nächste Schritte und weiterführende Ressourcen
Wenn du regelmäßig EC2-Instanzen für Tests oder Entwicklung startest und stoppst, solltest du folgende Punkte in deinen Workflow integrieren:
- Richte AWS Budgets mit einem Alert für EC2-Kosten ein, um unerwartete Gebühren frühzeitig zu erkennen.
- Prüfe mit AWS Cost Explorer die Kostenkategorie 'EC2-Other' — dort erscheinen EIP-Gebühren getrennt von Instanzlaufzeiten.
- Nutze AWS Trusted Advisor (im kostenpflichtigen Support-Plan) oder den kostenlosen EC2 Global View, um nicht genutzte Elastic IPs kontoübergreifend zu identifizieren.
- Offizielle Dokumentation: Elastic IP Addresses — AWS EC2 User Guide
Glossar
| Begriff | Bedeutung |
|---|---|
| Elastic IP (EIP) | Statische, öffentliche IPv4-Adresse, die du in deinem AWS-Konto allozieren und Ressourcen zuweisen kannst. |
| Allocation ID | Eindeutige ID einer allozierten EIP im Format eipalloc-.... Wird für release-address benötigt. |
| Association ID | ID der Verbindung zwischen einer EIP und einer Ressource im Format eipassoc-.... Wird für disassociate-address benötigt. |
| Disassociate | Trennt die EIP von einer Ressource. Die EIP bleibt im Konto alloziert und verursacht weiterhin Kosten. |
| Release | Gibt die EIP vollständig frei. Sie verlässt das Konto und verursacht keine Kosten mehr. |
Kommentare
Kommentar veröffentlichen