Cost as Code (auch: FinOps as Code) heißt, die Objekte der Kostensteuerung wie Code zu führen: Budgets und ihre Warnungen, die Aktivierung von Tags, Kostenkategorien und Exporte stehen als versionierte Definitionen in einem Repository und entstehen über Terraform oder die APIs der Anbieter statt von Hand in der Konsole. Dazu kommen die APIs, über die Skripte und Werkzeuge Kosten lesen. Diese Seite behandelt diese beiden Teile. Wie man die Kosten einer Änderung vor dem Deployment schätzt, beschreibt Kosten im Entwicklungszyklus, wie man Regeln durchsetzt, Tagging-Regeln als Code durchsetzen.

So funktioniert es

Jeder Anbieter trennt Lesen und Verwalten. Gelesen wird über eine Abfrage-API oder einen Export, verwaltet über die Ressourcen der Terraform-Provider.

Kosten lesenWas das Lesen kostetAls Terraform-Ressource
AWSCost Explorer API für aggregierte Abfragen, Data Exports für Positionsdaten0,01 USD je API-Anfrageaws_budgets_budget, aws_budgets_budget_action, aws_ce_cost_allocation_tag, aws_ce_cost_category, aws_bcmdataexports_export
AzureExports API für wiederkehrende Exporte, Cost Details API für kleine Abrufekein Preis genannt, aber ratenbegrenztazurerm_consumption_budget_subscription (ebenso für Ressourcengruppe und Verwaltungsgruppe), azurerm_subscription_cost_management_export
Google CloudSQL auf den BigQuery-Export; die Cloud Billing APIs verwalten Konten, Budgets und PreiseBigQuery-Abfragen und -Speichergoogle_billing_budget

AWS

Die Cost Explorer API liefert dieselben Daten wie die Oberfläche (AWS Cost Explorer und AWS Budgets), aber jede Anfrage auf die primäre Abrechnungsansicht kostet 0,01 USD, und wer eine weitere Ergebnisseite über das NextPageToken holt, stellt eine weitere Anfrage. Budgets sind in Terraform eine Ressource mit Betrag, Zeitraum (täglich, monatlich, quartalsweise, jährlich) und Benachrichtigungen, die auf tatsächliche oder prognostizierte Kosten reagieren, als Prozentsatz oder absoluter Wert, an E-Mail-Adressen oder SNS-Themen. aws_ce_cost_allocation_tag schaltet einen Tag-Schlüssel als Kostenzuordnungs-Tag aktiv oder inaktiv; neue Schlüssel können bis zu 24 Stunden brauchen, bis sie zur Aktivierung erscheinen. default_tags im Provider setzt Tags auf jede Ressource, die er anlegt.

Azure

Microsoft empfiehlt für die Aufnahme von Kostendaten die Exports API und die Cost Details API nur für kleine Datensätze; ihre Größengrenzen stehen in Azure Cost Management. Für ein Skript zählt der Takt: Microsoft rät zu höchstens einem Abruf am Tag, weil häufigere Aufrufe dieselben Daten liefern, und ein Bericht umfasst höchstens einen Monat. Budget-Schwellen sind in azurerm_consumption_budget_* immer Prozentwerte zwischen 0 und 1000, wahlweise auf tatsächliche oder prognostizierte Kosten, mit E-Mail-Adressen, Aktionsgruppen oder Rollen als Empfänger.

Google Cloud

Unter seinen Billing-APIs führt Google die Cloud Billing Budget API, die Cloud Billing Account API, die Cloud Billing Catalog API und die Pricing API (Preview), aber keine Abfrage-API für Kosten; Kostendaten liest man per SQL aus dem Export nach BigQuery (Google Cloud Abrechnungsexport). google_billing_budget setzt Schwellen als Prozentsätze, kann jede Aktualisierung des Ausgabenstands an ein Pub/Sub-Thema senden, legt fest, wie Gutschriften zählen (Standard: alle eingerechnet) und wer das Budget sehen darf. default_labels im Provider setzt Labels auf alle Ressourcen.

Preislisten-APIs (AWS Price List, Azure Retail Prices, Cloud Billing Catalog) sind Eingaben für Schätzungen und gehören zum Entwicklungszyklus.

Was es für Ihre Kosten bedeutet

Ein Budget, das als Code existiert, ändert sich nur über einen Pull Request. Wer den Schwellenwert senkt oder einen Empfänger streicht, hinterlässt einen Diff, eine Prüfung und einen Commit, auf den eine spätere Entscheidung verweisen kann (Kostenentscheidungen nachvollziehbar machen). Neue Konten, Abonnements oder Projekte bekommen ihr Budget, ihre Exporte und ihre Tags im selben Modul wie ihre Ressourcen, und die Abdeckung hängt nicht davon ab, dass jemand an die Konsole denkt. Wie Budgets und Schwellen fachlich aufgebaut werden, bleibt Sache von Budgets und Budgetwarnungen.

Der Code hat eine zweite Wirkung: Er setzt sich gegen die Konsole durch. Ein normaler terraform plan liest den Ist-Zustand und schlägt vor, Abweichungen auf die Konfiguration zurückzusetzen; der Modus -refresh-only übernimmt Änderungen von außen nur in den State. Wer ein Budget in der Konsole anpasst, sieht die Änderung beim nächsten Apply wieder verschwinden, wenn sie nicht in den Code zurückfließt.

Die verwalteten Objekte selbst kosten wenig: Bei AWS werden erst Budgets mit Aktionen ab dem dritten berechnet (Budgets, Rechnung im Beispiel unten) und zugestellte Budgetberichte mit 0,01 USD je Bericht. Teuer wird das Lesen, wenn ein Skript eine abgerechnete API öfter abfragt, als sich die Daten ändern.

Wo es schiefgeht

  • Eine abgerechnete API im Minutentakt. Ein Monitoring-Skript fragt die Cost Explorer API alle paar Minuten ab, und die API erscheint als eigene Position auf der Rechnung. Die Ursache: Jede Anfrage kostet, und AWS sagt für Cost Explorer nur zu, die Daten mindestens einmal in 24 Stunden zu aktualisieren. Bei Azure liefert die Cost Details API laut Microsoft bei häufigeren Abrufen dieselben Daten und ist ratenbegrenzt.
  • Budgets doppelt angelegt. Dasselbe Konto bekommt zwei Warnungen für dieselbe Schwelle, oder eine Änderung in der Konsole ist nach dem nächsten Deployment verschwunden. Die Ursache: Ein Teil der Budgets entstand von Hand, ein Teil im Code, und niemand hat die alten importiert oder gelöscht.
  • State und Konfiguration öffentlich. Ein Repository mit State-Datei oder Variablen ist öffentlich einsehbar. Die Ursache: Terraform speichert Werte im State im Klartext, und Budget-Benachrichtigungen enthalten E-Mail-Adressen der Empfänger. AWS-Konto-IDs gelten laut AWS nicht als geheim, sollen aber sorgfältig geteilt werden; HashiCorp empfiehlt, den State nicht in Git abzulegen, sondern entfernt, verschlüsselt und mit Zugriffskontrolle zu speichern.
  • Tag gesetzt, aber nicht aktiviert. Ressourcen tragen den Tag über default_tags, Cost Explorer zeigt die Kosten trotzdem als nicht getaggt. Die Ursache: Die Aktivierung als Kostenzuordnungs-Tag ist ein eigenes Objekt (aws_ce_cost_allocation_tag) und fehlt im Code; warum ein nicht aktivierter Tag nicht zählt, erklärt AWS Cost Explorer und AWS Budgets.
  • Google-Budget mit Fehler 403. Terraform scheitert beim Anlegen eines Budgets mit Benutzeranmeldedaten. Die Ursache: Die Budget API verlangt dann ein billing_project und user_project_override im Provider.

Wie Open-Source-Werkzeuge Kosten schätzen und Regeln anwenden, beschreibt Open-Source-Werkzeuge.

Beispiel

AWS veröffentlicht diese Preise in US-Dollar ohne Regionsangabe (gelesen am 2026-10-16): 0,01 USD je Anfrage an die Cost Explorer API auf die primäre Abrechnungsansicht und 0,10 USD am Tag für jedes Budget mit Aktionen ab dem dritten.

Vorgang in einem Monat mit 30 TagenRechnungKosten
Ein Skript fragt alle 5 Minuten ab, eine Ergebnisseite12 × 24 × 30 = 8.640 Anfragen × 0,01 USD86,40 USD
Dasselbe Skript einmal täglich30 Anfragen × 0,01 USD0,30 USD
Fünf Budgets mit Aktionen(5 − 2) × 0,10 USD × 30 Tage9,00 USD

Quellen

Gelesen am 2026-10-16. AWS Cost Explorer, GetCostAndUsage, Preise für Cost Explorer, Preise für AWS Budgets und AWS-Konto-IDs; Microsoft Überblick über die Automatisierung in Cost Management und kleine Kostendatensätze bei Bedarf abrufen; Google Cloud Cloud Billing APIs; HashiCorp Terraform-Provider AWS mit aws_budgets_budget, aws_budgets_budget_action, aws_ce_cost_allocation_tag, aws_ce_cost_category und aws_bcmdataexports_export, AzureRM mit azurerm_consumption_budget_subscription und azurerm_subscription_cost_management_export, Google mit google_billing_budget und Provider-Referenz; HashiCorp sensible Daten verwalten und terraform plan.