Grafana 系列-GaC-2-Grafana Terraform Provider 基礎

2023-06-19 15:01:52

系列文章

概述

前文最後總結了我的工具選型:

  • Grafana Terraform provider
  • Jsonnet

我們今天先簡單介紹 Grafana Terraform provider.

Grafana Terraform Provider

Grafana provider 為 Grafana 提供設定管理資源。是目前 Grafana 官方提供的,覆蓋的 Grafana 資源最全的 IaC 工具。

Grafana Terraform Provider 的程式碼是建立在 grafana-api-golang-client 之上的。

通過 Grafana Terraform Provider, 我們可以管理:

  • Alerting
    • Resources
      • grafana_contact_point
      • grafana_message_template
      • grafana_mute_timing
      • grafana_notification_policy
      • grafana_rule_group
  • Cloud
    • Resources
      • grafana_cloud_access_policy
      • grafana_cloud_access_policy_token
      • grafana_cloud_api_key
      • grafana_cloud_plugin_installation
      • grafana_cloud_stack
      • grafana_cloud_stack_api_key
      • grafana_cloud_stack_service_account
      • grafana_cloud_stack_service_account_token
      • grafana_machine_learning_holiday
      • grafana_machine_learning_job
      • grafana_machine_learning_outlier_detector
    • DataSources
      • grafana_cloud_ips
      • grafana_cloud_organization
      • grafana_cloud_stack
  • Grafana Enterprise
    • Resources
      • grafana_builtin_role_assignment
      • grafana_data_source_permission (AWS Managed Grafana 也有這個功能)
      • grafana_report
      • grafana_role
      • grafana_role_assignment
      • grafana_team_external_group
  • Grafana OSS
    • Resources
      • grafana_annotation
      • grafana_api_key
      • grafana_dashboard
      • grafana_dashboard_permission
      • grafana_data_source
      • grafana_folder
      • grafana_folder_permission
      • grafana_library_panel
      • grafana_organization
      • grafana_organization_preferences
      • grafana_playlist
      • grafana_service_account
      • grafana_service_account_permission
      • grafana_service_account_token
      • grafana_team
      • grafana_team_preferences
      • grafana_user
    • DataSources
      • grafana_dashboard
      • grafana_dashboards
      • grafana_data_source
      • grafana_folder
      • grafana_folders
      • grafana_library_panel
      • grafana_organization
      • grafana_organization_preferences
      • grafana_team
      • grafana_user
      • grafana_users
  • OnCall
  • SLO
  • Synthetic Monitoring

實戰

因為 Grafana 資源相對比較清晰和獨立,不像 AWS 會有很多複雜的關聯關係。

所以關於 Grafana TF 程式碼的組織形式可以簡單點:

  • 可以使 AllInOne 的 .tf 檔案
  • 也可以根據資源型別,簡單拆分為如下即可:
├── dashboard.tf
├── datasource.tf
├── grafana-ds-info.auto.tfvars.json
├── jsonnet (jsonnet 資料夾,dashboard 相關內容都在該資料夾下)
├── main.tf
├── outputs.tf
├── variables.tf
└── versions.tf

下面以第二種組織結構來詳細介紹。

建立 Grafana Provider

main.tf 中,建立 Grafana Provider:

provider "grafana" {
}

如果只有一套 Grafana, 那麼如上的設定完全就夠用了。

如果有多套 Grafana, 則可以通過指定 Grafana provider 的 alias 來實現。具體如下:

provider "grafana" {
  alias = "aws-managed-grafana"
}

後續使用資源的時候,可以通過指定 provider 來區分,範例如下:

# provision folder
resource "grafana_folder" "play-grafana" {
  provider = grafana.aws-managed-grafana
  uid   = "play-grafana"
  title = "play-grafana"
}