Status200 Terraform Provider
Terraform Provider для управления ресурсами Status200 через Infrastructure as Code (IaC): мониторинг, инциденты, status pages и остальные возможности платформы.
Содержание
Установка {#installation}
Terraform Registry (рекомендуется)
terraform {
required_providers {
status200 = {
source = "status200/status200"
version = "~> 7.0"
}
}
required_version = ">= 1.0"
}Self-hosted: pin версии
⚠️ Версия provider = версия установки Status200.
terraform {
required_providers {
status200 = {
source = "status200/status200"
version = "= 7.0.123"
}
}
required_version = ">= 1.0"
}Где взять версию Status200
- Dashboard: Settings → About
- API:
GET /api/status - Docker: тег образа
- Helm: версия chart
terraform {
required_providers {
status200 = {
source = "status200/status200"
version = "= 7.0.123"
}
}
}Настройка provider {#provider-configuration}
Базовая конфигурация
provider "status200" {
status200_url = "https://your-status200-instance.com"
api_key = var.status200_api_key
}Переменные окружения
export S200_URL="https://your-status200-instance.com"
export S200_API_KEY="your-api-key-here"provider "status200" {
}Параметры
| Аргумент | Переменная окружения | Описание | Обязательно |
|---|---|---|---|
status200_url | S200_URL | URL Status200 | Да |
api_key | S200_API_KEY | API key | Да |
Быстрый старт {#quick-start}
1. API key
Settings → API Keys → Create API Key → имя, permissions → скопировать ключ.
2. main.tf
terraform {
required_providers {
status200 = {
source = "status200/status200"
version = "~> 7.0"
}
}
}
provider "status200" {
status200_url = "https://status200.ru"
api_key = var.status200_api_key
}
# Проект создаётся вручную в dashboard
variable "project_id" {
description = "Status200 project ID"
type = string
}
resource "status200_monitor" "website" {
name = "Website Monitor"
description = "Monitor for website uptime"
data = jsonencode({
url = "https://example.com"
interval = "5m"
timeout = "30s"
})
}
resource "status200_team" "platform" {
name = "Platform Team"
description = "Platform engineering team"
}3. init и apply
terraform init
terraform plan
terraform applyСовместимость версий {#version-compatibility}
Облако
terraform {
required_providers {
status200 = {
source = "status200/status200"
version = "~> 7.0"
}
}
}Self-hosted
| Status200 | Provider | Конфиг |
|---|---|---|
| 7.0.x | 7.0.x | version = "~> 7.0.0" |
| 7.1.x | 7.1.x | version = "~> 7.1.0" |
| 7.2.x | 7.2.x | version = "~> 7.2.0" |
Пример для 7.0.123:
terraform {
required_providers {
status200 = {
source = "status200/status200"
version = "= 7.0.123"
}
}
}Ресурсы {#available-resources}
Ядро
status200_team— команды
Мониторинг
status200_monitor— мониторыstatus200_probe— пробы
On-call
status200_on_call_duty_policy— расписания on-call
Status pages
status200_status_page— страницы статуса
Service catalog
status200_service_catalogstatus200_servicestatus200_service_dependency
Data sources
В текущей схеме provider отдельные datasources могут отсутствовать — смотрите актуальную документацию в Registry.
Примеры {#examples}
Мониторинг end-to-end
variable "status200_api_key" {
description = "Status200 API Key"
type = string
sensitive = true
}
variable "project_id" {
description = "Status200 project ID (создать проект в dashboard)"
type = string
}
variable "status200_url" {
description = "Status200 URL"
type = string
default = "https://status200.ru"
}
terraform {
required_providers {
status200 = {
source = "status200/status200"
version = "~> 7.0"
}
}
}
provider "status200" {
status200_url = var.status200_url
api_key = var.status200_api_key
}
resource "status200_team" "platform" {
name = "Platform Team"
description = "Platform engineering team"
}
resource "status200_monitor" "api" {
name = "API Health Check"
description = "Monitor for API health endpoint"
data = jsonencode({
url = "https://api.mycompany.com/health"
method = "GET"
interval = "1m"
timeout = "30s"
})
}
resource "status200_monitor" "database" {
name = "Database Connection"
project_id = status200_project.production.id
monitor_type = "port"
hostname = "db.mycompany.com"
port = 5432
interval = "2m"
tags = {
service = "database"
environment = "production"
criticality = "critical"
}
}
resource "status200_on_call_policy" "platform_oncall" {
name = "Platform On-Call"
project_id = status200_project.production.id
team_id = status200_team.platform.id
schedules {
name = "Business Hours"
timezone = "America/New_York"
layers {
name = "Primary"
users = ["user1@mycompany.com", "user2@mycompany.com"]
rotation_type = "weekly"
start_time = "09:00"
end_time = "17:00"
days = ["monday", "tuesday", "wednesday", "thursday", "friday"]
}
}
}
resource "status200_alert_policy" "critical_alerts" {
name = "Critical System Alerts"
project_id = status200_project.production.id
conditions {
monitor_id = status200_monitor.api.id
threshold = "down"
}
conditions {
monitor_id = status200_monitor.database.id
threshold = "down"
}
actions {
type = "webhook"
url = "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"
}
actions {
type = "oncall_escalation"
oncall_policy_id = status200_on_call_policy.platform_oncall.id
}
}
resource "status200_status_page" "public" {
name = "MyCompany Status"
project_id = status200_project.production.id
domain = "status.mycompany.com"
components {
name = "API"
monitor_id = status200_monitor.api.id
}
components {
name = "Database"
monitor_id = status200_monitor.database.id
}
}Self-hosted
terraform {
required_providers {
status200 = {
source = "status200/status200"
version = "= 7.0.123"
}
}
required_version = ">= 1.0"
}
provider "status200" {
status200_url = "https://status200.mycompany.com"
api_key = var.status200_api_key
}Практики {#best-practices}
1. Версии
Облако: ~> и changelog перед major.
Self-hosted: точный pin; обновлять provider вместе с апгрейдом Status200; сначала staging.
2. State
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "status200/terraform.tfstate"
region = "us-west-2"
}
}3. Окружения
terraform workspace new production
terraform workspace new staging
mkdir -p environments/{staging,production}4. Переменные
variable "environment" {
description = "Environment name"
type = string
}
variable "monitors" {
description = "List of monitors to create"
type = list(object({
name = string
url = string
type = string
}))
}5. Именование
resource "status200_monitor" "website_production" {
name = "${var.environment}-website-monitor"
}
resource "status200_alert_policy" "critical_production" {
name = "${var.environment}-critical-alerts"
}Миграция {#migration-guide}
С ручной настройки
- Аудит ресурсов в dashboard
- Terraform-конфиг под существующее
terraform import- Сверка
plan - Постепенный
apply
terraform import status200_monitor.website monitor-id-here
terraform import status200_project.main project-id-hereАпгрейд версий
- Backup state
- Совместимость provider
- Обновить версию в
terraformблоке - Staging
- Production
terraform state pull > backup.tfstate
terraform init -upgrade
terraform plan
terraform applyПоддержка и ссылки
- Документация: Status200 Docs
- Registry: Status200 Provider
- GitHub: Issues
- Сообщество: Community
Устранение неполадок
Version mismatch (self-hosted)
Error: API version incompatibleСовпадение версий provider и Status200.
Authentication
Error: Invalid API keyКлюч и permissions.
Resource not found
Проверить ID и существование ресурса.
Debug
export TF_LOG=DEBUG
terraform applyПроверка
terraform version
terraform providers
terraform validate