Przejdź do głównej zawartości

Zarządzanie kosztami chmury i FinOps

Zarządzanie kosztami w chmurze z AI łączy Cursor, Claude Code i Codex z serwerami MCP do billingu — AWS Labs Billing and Cost Management oraz Vantage — dzięki czemu agent czyta wydatki na żywo, szereguje usługi napędzające wzrost, proponuje fazowy right-sizing oznaczony poziomem ryzyka i szkicuje alokację kosztów oraz prognozy. Agent generuje komendy; człowiek decyduje, czy je uruchomić.

Twój rachunek za chmurę skoczył w tym miesiącu o 40%. Dział finansowy chce wyjaśnienia do piątku, inżynieria przysięga, że nic się nie zmieniło, a nowy klaster staging, którego nikt nie otagował, jest zagrzebany gdzieś w EC2-Other. Konsola Cost Explorer wymaga dwudziestu kliknięć, żeby odpowiedzieć na pytanie, na które i tak odpowiesz ponownie za tydzień, a dashboard pokazuje 200 pozycji bez żadnej historii.

Nie potrzebujesz do tego platformy FinOps. Potrzebujesz, żeby twój agent kodujący odczytał dane rozliczeniowe, uszeregował marnotrawstwo i podał ci dokładne komendy do naprawy — które pięć usług się ruszyło, o ile i dlaczego.

  • Działającą konfigurację MCP dla serwera AWS Labs Billing and Cost Management i Vantage (wielochmurowość), skonfigurowaną identycznie w Cursor, Claude Code i Codex
  • Gotowy do wklejenia prompt, który zwraca najważniejsze generatory kosztów pogrupowane po usługach, uszeregowane działania right-sizingowe i notatkę o ryzyku dla każdego z nich
  • Prompt do polowania na nieotagowane wydatki — najczęstszy pojedynczy powód, dla którego rachunek jest „niewyjaśniony”
  • Fazowy plan right-sizingu oznaczony poziomami ryzyka, a nie płaską listę instancji, plus mechanikę trzech narzędzi do zamiany jednej rekomendacji w zrecenzowany diff Terraform
  • Prompt do wykrywania anomalii, który odróżnia spodziewany wzrost od prawdziwego szoku rachunkowego
  • Dwudziestolinijkowy skrypt, który przepuszcza JSON z Cost Explorera przez Claude Opus 5 po uszeregowane rekomendacje, gdy wolisz skrypt od rozmowy
  • Jasne wyczucie tego, kiedy ten przepływ pracy się psuje — opłaty API, limity zapytań, nieaktualne tagi, 48-godzinne opóźnienie danych — i jak się z tego pozbierać

Te serwery udostępniają API billingu i użycia jako narzędzia, które asystent może wywoływać bezpośrednio. Definicja serwera — command, args, env — jest identyczna w Cursor, Claude Code i Codex; różni się tylko plik, który czyta każde narzędzie (.cursor/mcp.json lub Ustawienia Cursora, .mcp.json dla Claude Code, ~/.codex/config.toml dla Codex).

AWS Labs publikuje oficjalny serwer MCP Billing and Cost Management, następcę starszego serwera cost-analysis. Udostępnia Cost Explorer, budżety, right-sizing z Compute Optimizera, Cost Optimization Hub, rekomendacje Savings Plans i porównania miesiąc do miesiąca — wszystko przez twoje istniejące poświadczenia AWS. To dlatego jest serwerem, od którego warto zacząć: węższy awslabs.cost-explorer-mcp-server odpowiada na pytania o wydatki, ale nie niesie żadnej z rekomendacji optymalizatora, na których opierają się poniższe prompty do right-sizingu.

Działa przez uvx, więc najpierw zainstaluj uv i upewnij się, że aws configure (lub AWS_PROFILE) wskazuje na rolę z uprawnieniami do odczytu ce:Get*, compute-optimizer:Get* i cost-optimization-hub:*.

Dodaj serwer do .cursor/mcp.json (projekt) lub globalnych ustawień MCP Cursora, a następnie włącz go w Settings → MCP. Cursor sam udostępnia narzędzia trybowi agenta:

{
"mcpServers": {
"awslabs.billing-cost-management-mcp-server": {
"command": "uvx",
"args": ["awslabs.billing-cost-management-mcp-server@latest"],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR",
"AWS_PROFILE": "your-aws-profile",
"AWS_REGION": "us-east-1"
}
}
}
}

Otwórz panel agenta (Cmd/Ctrl+I), przełącz na tryb Agent i potwierdź, że narzędzia billingowe pojawiły się na liście narzędzi MCP, zanim zaczniesz promptować.

Vantage agreguje wydatki AWS, Azure, GCP, Kubernetes i SaaS za jednym API. Oficjalny serwer MCP działa przez npx i uwierzytelnia się tokenem bearer tylko do odczytu, wygenerowanym na koncie Vantage w sekcji dostępu API — asystent nigdy nie potrzebuje prawa zapisu, żeby analizować wydatki.

{
"mcpServers": {
"vantage": {
"command": "npx",
"args": ["-y", "vantage-mcp-server"],
"env": {
"VANTAGE_TOKEN": "your-read-only-vantage-token"
}
}
}
}

W TOML-u Codeksa ten sam serwer wygląda tak:

[mcp_servers.vantage]
command = "npx"
args = ["-y", "vantage-mcp-server"]
env = { VANTAGE_TOKEN = "your-read-only-vantage-token" }

Dla Azure i GCP odpowiednikami są @azure/mcp (npx -y @azure/mcp@latest server start) i @google-cloud/gcloud-mcp (npx -y @google-cloud/gcloud-mcp), każdy czytający swój natywny łańcuch poświadczeń. Dodawaj je tylko wtedy, gdy faktycznie działasz w tych chmurach.

Od szoku rachunkowego do planu, którego da się bronić

Dział zatytułowany „Od szoku rachunkowego do planu, którego da się bronić”

Wzorzec jest ten sam niezależnie od narzędzia: podłącz serwer MCP do kosztów, zadaj skupione pytanie, a potem zweryfikuj rekomendację na faktycznym zasobie, zanim cokolwiek zrobisz. AI szybko znajduje kandydatów; decyzja o zmianie produkcji należy do ciebie.

Nieprecyzyjny prompt („przeanalizuj moje koszty”) marnuje turę. Poniższy jest celowo opiniotwórczy — nazywa grupowanie, metrykę, okno i kształt wyniku.

Linijka do not run any modifications ma znaczenie. Bez niej agent w trybie automatycznego zatwierdzania może spróbować zastosować right-sizing przez narzędzie zapisu. Chcesz analizy i komend — decyzja o zastosowaniu zostaje po stronie człowieka.

Gdy masz już uszeregowaną listę, działaniem następczym, które się opłaca, jest polowanie na nieotagowane wydatki, najczęstszy pojedynczy powód, dla którego rachunek jest „niewyjaśniony”:

Jeśli twoje wydatki wykraczają poza AWS, zadaj to samo pytanie w poprzek dostawców, dorzucając Vantage. Mechanika różni się nieco w zależności od narzędzia:

Otwórz panel agenta i odwołaj się do serwerów po nazwie. Cursor trzyma analizę w edytorze, więc możesz przenieść ustalenia prosto do runbooka albo zmiany w Terraformie.

@vantage @aws-cost Pull last month's spend grouped by service and linked
account. For the five services that grew the most versus the prior month, tell
me the dollar delta, the likely driver (usage vs. price vs. new resources), and
whether the growth looks expected for a product scaling its user base. Output a
table, then a short prioritized list of what to investigate first.

Cursor zwraca tabelę, nad którą możesz iterować w miejscu — dopytuj „wejdź głębiej w RDS” bez powtarzania kontekstu.

Typowa odpowiedź grupuje wydatki, szereguje to, co się ruszyło, i oznacza, który wzrost jest niegroźny — RDS urósł, bo dodano trzy repliki odczytu (spodziewane przy rampie ruchu), podczas gdy 45-procentowy skok transferu międzyregionowego nie ma odpowiadającego wdrożenia i wymaga zbadania. Traktuj kwoty jako punkt wyjścia i potwierdź je w konsoli dostawcy, zanim zameldujesz się w dziale finansów, bo pokrycie tagami i granice kont kształtują to, co zwraca API.

To są przepisy wielokrotnego użytku. Nazywają prawdziwe usługi i proszą o opiniotwórczy wynik, więc działają przy minimalnej edycji — podmień dostawcę albo próg i uruchom.

Widoczność mówi, co naprawić. Kolejny krok to sprawienie, by agent zamienił jedną rekomendację w zrecenzowaną zmianę w twoim IaC. Rekomendacja jest identyczna we wszystkich narzędziach — „zmniejsz ten przewymiarowany m5.2xlarge do m5.large” — ale sposób, w jaki każde z nich edytuje Terraform, się różni.

Otwórz moduł Terraform w edytorze. W trybie agenta odwołaj się do pliku i do ustalenia z MCP, żeby Cursor edytował w miejscu i pokazał diff do akceptacji lub odrzucenia:

@main.tf The AWS cost MCP flagged `aws_instance.api` (m5.2xlarge) at 9% average
CPU over 30 days. Change it to the Compute Optimizer recommended size, add a
comment with the date and the % savings, and show me a `terraform plan` summary
of what changes. Do not apply.

Ustaw checkpoint Cursora przed akceptacją, żeby móc cofnąć edycję jednym kliknięciem, jeśli plan wygląda źle.

Dwa zadania następcze domykają praktykę FinOps: zamiana historii w budżet na przyszłość i uczynienie wydatków przypisywalnymi do zespołów.

Liniowa projekcja „wydaliśmy X w zeszłym miesiącu, więc wydamy X znowu” jest błędna w chwili, gdy użycie ma jakąkolwiek sezonowość. Agent ma dwie uczciwe opcje — poprosić MCP o własną prognozę Cost Explorera albo pobrać surową historię i ją dopasować. Dla większości zespołów wbudowana prognoza wystarcza:

Ten prompt odpowiada na pytanie „czy zaraz przekroczymy budżet w tym kwartale?”. Planowanie roczne to inne pytanie i wymaga historii względnej plus jawnych buforów zamiast jednej liczby:

Oparcie się na historii względnej („ostatnie cztery kwartały → przyszły rok”) utrzymuje analizę wiecznie świeżą, zamiast przypinać ją do roku kalendarzowego, który się zestarzeje. Potem uczyń wydatki przypisywalnymi:

Sprawdź wyrywkowo alokację na prawdziwej fakturze jednego zespołu i potwierdź, że mnożnik wzrostu w prognozie zgadza się z planem produktowym, zanim którakolwiek z tych liczb trafi na przegląd budżetu.

Aby zasilić dashboard albo cykliczny raport, pomiń czat i przepuść dane przez Claude bezpośrednio. Ten skrypt pobiera prawdziwą historię z Cost Explorera i prosi Claude Opus 5 o uszeregowany, ustrukturyzowany zestaw rekomendacji:

// rank-cost-drivers.ts — run: npx tsx rank-cost-drivers.ts
import { CostExplorer } from '@aws-sdk/client-cost-explorer';
import Anthropic from '@anthropic-ai/sdk';
const ce = new CostExplorer({ region: 'us-east-1' });
const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY
const end = new Date().toISOString().slice(0, 10);
const start = new Date(Date.now() - 30 * 864e5).toISOString().slice(0, 10);
const { ResultsByTime } = await ce.getCostAndUsage({
TimePeriod: { Start: start, End: end },
Granularity: 'DAILY',
Metrics: ['UnblendedCost'],
GroupBy: [{ Type: 'DIMENSION', Key: 'SERVICE' }],
});
const msg = await anthropic.messages.create({
model: 'claude-opus-5',
max_tokens: 1500,
messages: [{
role: 'user',
content: `Here is 30 days of AWS daily cost grouped by service as JSON. Return the top
5 cost drivers, any service trending up more than 20% week-over-week, and one concrete
rightsizing or scheduling action per driver with an estimated monthly saving.
\n\n${JSON.stringify(ResultsByTime)}`,
}],
});
console.log(msg.content);

Przy masowych, prostych przebiegach klasyfikacyjnych — na przykład etykietowaniu tysięcy zasobów po nazwie według środowiska — zejdź na najtańszy model zamiast flagowego:

const msg = await anthropic.messages.create({
model: 'claude-haiku-4-5', // cheapest tier, ~$1/$5 per Mtok — fine for bulk tagging
max_tokens: 256,
messages: [{ role: 'user', content: tagInferencePrompt }],
});

Jeśli twoje wydatki żyją w Kubernetes, a nie w gołym EC2, zamień MCP AWS na MCP klastra, żeby agent mógł czytać zadeklarowane requests względem faktycznego użycia — to dane stojące za niemal każdym znaleziskiem marnotrawstwa na poziomie podów. Robią to dwa prawdziwe, osobne pakiety: społecznościowy mcp-server-kubernetes oraz nieprzestrzeniony kubernetes-mcp-server (npx -y kubernetes-mcp-server@latest). Wybierz jeden i używaj jego dokładnej nazwy; przestrzeniony @kubernetes/mcp-server nie istnieje, a prompt odwołujący się do niego po cichu nic nie zrobi.

Dodaj go tak samo (claude mcp add --transport stdio k8s -- npx -y mcp-server-kubernetes albo odpowiadający blok w .cursor/mcp.json / config.toml), a potem:

Przy prawdziwym porównaniu kosztów między chmurami bądź szczery co do narzędzi: nie istnieje jeden godny zaufania MCP do „arbitrażu”. Używaj serwera każdego dostawcy — MCP billingowego AWS powyżej, Vantage dla widoku zbiorczego, @azure/mcp i @google-cloud/gcloud-mcp dla danych natywnych — i każ agentowi znormalizować liczby. Traktuj oszczędności z migracji między chmurami jako model, a nie gwarancję, bo koszty egressu i przebudowy architektury rutynowo zjadają różnicę z nagłówka.

  1. Narzędzia MCP w ogóle się nie pojawiają albo każde wywołanie zwraca błąd uwierzytelnienia. Serwer startuje, ale Cost Explorer zwraca 403 albo każde zapytanie wraca puste. Niemal zawsze AWS_PROFILE wskazuje na złe konto lub rolę bez ce:Get*. Uruchom aws sts get-caller-identity z tym profilem, potwierdź konto i sprawdź, czy polityka IAM zawiera akcje odczytu Cost Explorera, Compute Optimizera i Cost Optimization Hub. Cost Explorer musi też być włączony w konsoli rozliczeniowej, zanim jakiekolwiek API zwróci dane. Po stronie Vantage odpowiednikiem jest brakujący lub źle zakresowany VANTAGE_TOKEN.

  2. uvx nie jest znaleziony albo serwer nie startuje. Konfiguracja jest poprawna, ale uv nie jest zainstalowany albo nie ma go w PATH, który widzi narzędzie. Zainstaluj uv, zrestartuj narzędzie, żeby podchwyciło nowy PATH, i przetestuj surową komendę w terminalu: uvx awslabs.billing-cost-management-mcp-server@latest powinno wystartować i czekać na stdio.

  3. Opłaty i limity API Cost Explorera dają się we znaki. Każde zapytanie to 0,01 USD, a API dławi przy gwałtownym obciążeniu. Agent rozsyłający setki zapytań z dzienną granularnością potrafi nabić koszt i zacząć dostawać błędy throttlingu. Zawężaj zapytania najpierw do granularności miesięcznej i schodź do dziennej tylko tam, gdzie to ma znaczenie.

  4. Liczby wyglądają na sprzed dnia lub dwóch. Dane Cost Explorera mają opóźnienie 24-48 godzin i aktualizują się do trzech razy dziennie — to nie jest czas rzeczywisty. Jeśli agent zgłasza brak wczorajszego skoku, tak ma być. Po coś bliższego czasowi rzeczywistemu potrzebujesz eksportów CUR albo metryk billingowych CloudWatch, a nie Cost Explorera.

  5. Nieaktualne lub brakujące tagi alokacji kosztów psują wszystko niżej. Alokacja i chargeback są tak dokładne, jak twoje tagi, a duży kubełek „untagged” po cichu wykrzywia każdą liczbę per zespół. Traktuj pokrycie tagami jako warunek wstępny, a nie miły dodatek.

  6. Right-sizing powoduje throttling. Zmniejszenie instancji, która wygląda na bezczynną średnio, potrafi ją zagłodzić w szczytach ruchu, a rekomendacja zbudowana na cichym oknie wstecznym całkowicie pomija miesięczny szczyt. Sprawdzaj wykorzystanie szczytowe, a nie średnie, każ agentowi podać okno wsteczne, zmieniaj po jednym poziomie naraz i obserwuj opóźnienia oraz błędy po każdej zmianie.

  7. Agent chce zastosować destrukcyjną zmianę. Proponuje terminację instancji albo zmniejszenie produkcji i — w trybie automatycznego zatwierdzania — próbuje to uruchomić. Właśnie dlatego każdy prompt powyżej kończy się „do not apply”, a profil MCP jest tylko do odczytu. Trzymaj włączone zatwierdzenia (--ask-for-approval on-request w Codeksie, akceptacja/odrzucenie diffów w Cursorze, przegląd przed uruchomieniem w Claude Code) dla wszystkiego, co modyfikuje infrastrukturę.

  8. Zmyślone nazwy serwerów. Jeśli prompt odwołuje się do serwera, którego nigdy nie skonfigurowałeś, wywołanie narzędzia po cichu nic nie robi, a asystent może wymyślić prawdopodobnie wyglądające liczby, żeby wypełnić lukę. Używaj dokładnych kluczy serwerów z własnej konfiguracji i weryfikuj każdą nazwę pakietu, zanim ją podłączysz.