Оценка стоимости
TerraCi умеет оценивать месячную стоимость инфраструктуры на основе Terraform планов, используя данные AWS Pricing API. Это позволяет видеть финансовое влияние каждого изменения прямо в комментарии к Merge Request.
Базовая конфигурация
extensions:
cost:
providers:
aws:
enabled: trueЭто минимальный конфиг для активации. Кеш цен инициализируется автоматически через бэкенд diskblob в сервисной директории проекта.
Параметры конфигурации
providers.aws.enabled
Активирует AWS-оценку. Плагин использует политику EnabledExplicitly: cost запускается только если хотя бы у одного провайдера enabled: true.
extensions:
cost:
providers:
aws:
enabled: trueblob_cache
Данные о ценах кешируются через blob-store (diskblob по умолчанию). Переопределите бэкенд, namespace или TTL:
extensions:
cost:
blob_cache:
backend: diskblob # по умолчанию; любой зарегистрированный BlobStoreProvider
namespace: cost/pricing # по умолчанию
ttl: "24h" # по умолчаниюttl принимает строки формата Go-duration: "1h", "30m", "72h". Бэкенд diskblob хранит объекты в ~/.terraci/blobs/ по умолчанию — см. конфиг плагина diskblob, чтобы переопределить.
Удалённые поля
Ранее принимались cost.cache_dir и cost.cache_ttl на верхнем уровне cost. Оба поля удалены: cache_dir отвергается на валидации, а cache_ttl переехал в blob_cache.ttl.
Как это работает
- Парсится
plan.json(результатterraform show -json) для каждого модуля - Определяются изменения ресурсов (create, update, delete, replace)
- Каждый тип ресурса сопоставляется с обработчиком из реестра
aws.Registry - Цены загружаются из AWS Bulk Pricing API и кешируются через настроенный
blob_cache - Рассчитывается часовая и месячная стоимость каждого ресурса
- Результат агрегируется в стоимость модуля с показателями before/after/diff
При наличии state.json в директории модуля учитываются также неизменяемые ресурсы для полной картины стоимости.
Поддерживаемые ресурсы AWS
Вычислительные ресурсы
| Terraform ресурс | Описание |
|---|---|
aws_instance | EC2 инстансы |
aws_ebs_volume | EBS тома |
aws_eip | Elastic IP адреса |
aws_nat_gateway | NAT Gateway |
Базы данных
| Terraform ресурс | Описание |
|---|---|
aws_db_instance | RDS инстансы |
aws_rds_cluster | RDS кластеры (Aurora) |
aws_rds_cluster_instance | Инстансы кластеров RDS |
Балансировка нагрузки
| Terraform ресурс | Описание |
|---|---|
aws_lb / aws_alb | Application Load Balancer |
aws_elb | Classic Load Balancer |
Кеширование
| Terraform ресурс | Описание |
|---|---|
aws_elasticache_cluster | ElastiCache кластеры |
aws_elasticache_replication_group | ElastiCache группы репликации |
Kubernetes
| Terraform ресурс | Описание |
|---|---|
aws_eks_cluster | EKS кластеры |
aws_eks_node_group | EKS группы нод |
Serverless и очереди
| Terraform ресурс | Описание |
|---|---|
aws_lambda_function | Lambda функции |
aws_dynamodb_table | DynamoDB таблицы |
aws_sqs_queue | SQS очереди |
aws_sns_topic | SNS топики |
aws_secretsmanager_secret | Secrets Manager |
Хранение и сеть
| Terraform ресурс | Описание |
|---|---|
aws_s3_bucket | S3 бакеты (только хранение) |
aws_route53_zone | Route 53 зоны |
Мониторинг и безопасность
| Terraform ресурс | Описание |
|---|---|
aws_cloudwatch_log_group | CloudWatch Log Groups |
aws_cloudwatch_metric_alarm | CloudWatch алармы |
aws_kms_key | KMS ключи |
TIP
Неподдерживаемые типы ресурсов не блокируют оценку -- они просто пропускаются. В отладочном режиме (-v) выводится информация о пропущенных ресурсах.
Интеграция с MR/PR
При включённом плагине cost оценки стоимости отображаются в таблице комментария MR/PR. Для каждого модуля показывается разница месячной стоимости:
| Модуль | Plan | Политики | Стоимость |
|--------|------|----------|-----------|
| platform/prod/eu-central-1/vpc | :white_check_mark: | :white_check_mark: | +$124.50/мес |
| platform/prod/eu-central-1/eks | :white_check_mark: | :white_check_mark: | +$1,280/мес |
| platform/prod/eu-central-1/rds | :warning: | :white_check_mark: | -$45.20/мес |Кеширование цен
TerraCi загружает данные из AWS Bulk Pricing API и кеширует их локально. Это позволяет:
- Избежать лишних запросов к AWS API при повторных запусках
- Ускорить оценку стоимости в CI/CD пайплайнах
- Работать оффлайн с уже загруженным кешем
Кеш организован по сервисам и регионам. При запуске TerraCi автоматически определяет, какие данные необходимы, и загружает только недостающие.
Полный пример конфигурации
execution:
extensions:
cost:
blob_cache:
backend: diskblob
namespace: cost/pricing
ttl: "24h"
providers:
aws:
enabled: true
# MR/PR комментарии формирует summary.
summary:
enabled: trueЭта конфигурация включает оценку стоимости с кешированием по умолчанию и отображает результаты в комментариях MR/PR рядом с выводом plan.
CLI команда
Запуск оценки стоимости из командной строки:
# Оценить все модули с plan.json
terraci cost
# Оценить один модуль
terraci cost --module platform/prod/eu-central-1/rds
# JSON вывод
terraci cost --output json
# Подробно — стоимость по ресурсам и информация о кеше
terraci cost -vКоманда terraci cost сканирует plan.json файлы, загружает данные о ценах и выводит оценку стоимости по модулям. В выводе показывается расположение кеша и время до его обновления.
В JSON выводе для каждого ресурса есть поле status:
exact, если TerraCi смог определить цену на этапе planusage_estimated, если TerraCi смог вывести частичную оценку из настроенной capacityusage_unknown, если без runtime usage данных стоимость определить нельзяunsupported/failed, если ресурс не поддержан или получение цены завершилось ошибкой
Примечание: требуется настройка
extensions.costв.terraci.yaml.
В CI пайплайнах оценка стоимости выполняется автоматически в рамках terraci summary. Используйте terraci cost для локальной разработки и проверки.
Примеры
См. examples/cost-estimation — рабочий пример с VPC, EKS и RDS модулями.
Смотрите также
- Конфигурация summary — комментарии MR/PR с результатами plan и стоимостью
- Генерация пайплайнов — руководство по генерации CI пайплайнов