前文最後總結了我的工具選型:
我們今天先簡單介紹 Grafana Terraform provider.
Grafana provider 為 Grafana 提供設定管理資源。是目前 Grafana 官方提供的,覆蓋的 Grafana 資源最全的 IaC 工具。
Grafana Terraform Provider 的程式碼是建立在 grafana-api-golang-client 之上的。
通過 Grafana Terraform Provider, 我們可以管理:
grafana_contact_point
grafana_message_template
grafana_mute_timing
grafana_notification_policy
grafana_rule_group
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
grafana_cloud_ips
grafana_cloud_organization
grafana_cloud_stack
grafana_builtin_role_assignment
grafana_data_source_permission
(AWS Managed Grafana 也有這個功能)grafana_report
grafana_role
grafana_role_assignment
grafana_team_external_group
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
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
因為 Grafana 資源相對比較清晰和獨立,不像 AWS 會有很多複雜的關聯關係。
所以關於 Grafana TF 程式碼的組織形式可以簡單點:
.tf
檔案├── dashboard.tf
├── datasource.tf
├── grafana-ds-info.auto.tfvars.json
├── jsonnet (jsonnet 資料夾,dashboard 相關內容都在該資料夾下)
├── main.tf
├── outputs.tf
├── variables.tf
└── versions.tf
下面以第二種組織結構來詳細介紹。
在 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"
}