Документацияbreadcrumb arrow Grafanabreadcrumb arrow Документация GlaberGraphbreadcrumb arrow Как кодbreadcrumb arrow Инфраструктура как кодbreadcrumb arrow Terraformbreadcrumb arrow Создание стека Grafana Cloud и управление им с помощью Terraform

Создание стека Grafana Cloud и управление им с помощью Terraform

Узнайте, как добавить источник данных, панель и папку в стек Grafana Cloud с помощью Terraform.

Предварительные требования

Прежде чем начать, убедитесь, что у вас есть следующее:

  • Учётная запись Grafana Cloud, как описано в разделе Get started
  • Terraform, установленный на вашей машине

Note

Все перечисленные ниже файлы конфигурации Terraform следует сохранить в одном каталоге.

Создание стека Cloud

  1. Создайте файл конфигурации Terraform.

    Эта конфигурация Terraform создаст стек Grafana Cloud и второй токен, необходимый для вашего экземпляра Grafana.

    Создайте файл с именем cloud-stack.tf и добавьте следующее:

    terraform
    terraform {
      required_providers {
        grafana = {
          source  = "grafana/grafana"
          version = ">= 2.9.0"
        }
      }
    }
    // Step 1: Create a stack
    provider "grafana" {
      alias = "cloud"
      cloud_access_policy_token = "<cloud-access-token>"
    }
    
    
    resource "grafana_cloud_stack" "my_stack" {
      provider = grafana.cloud
    
      name               = "<stack-name>"
      slug               = "<stack-name>"
      region_slug        = "<region>" # Example "us","eu" etc
      delete_protection  = true
    }
    
    // Step 2: Create a service account and key for the stack
    resource "grafana_cloud_stack_service_account" "cloud_sa" {
      provider   = grafana.cloud
      stack_slug = grafana_cloud_stack.my_stack.slug
    
      name        = "<service-account-name>"
      role        = "Admin"
      is_disabled = false
    }
    
    resource "grafana_cloud_stack_service_account_token" "cloud_sa" {
      provider   = grafana.cloud
      stack_slug = grafana_cloud_stack.my_stack.slug
    
      name               = "terraform serviceaccount key"
      service_account_id = grafana_cloud_stack_service_account.cloud_sa.id
    }
    
    // Step 3: Create resources within the stack
    provider "grafana" {
      alias = "my_stack"
    
      url  = grafana_cloud_stack.my_stack.url
      auth = grafana_cloud_stack_service_account_token.cloud_sa.key
    }
    resource "grafana_folder" "my_folder" {
      provider = grafana.my_stack
    
      title = "Test Folder"
    }
  2. Замените следующие значения полей:

    • <cloud-access-token> на ваш токен политики доступа Grafana Cloud. Чтобы создать новый, обратитесь к разделу Grafana Cloud Access Policies. Добавьте все стеки в список областей (realms). Области доступа, необходимые для примера:
      • dashboards:read
      • orgs:read
      • stack-dashboards:read
      • stacks:read
      • dashboards:write
      • orgs:write
      • stack-dashboards:write
      • stacks:write
      • stack-service-accounts:write
      • dashboards:delete
      • stack-dashboards:delete
      • stacks:delete
    • <stack-name> на имя вашего стека.
    • <region> на регион, в котором вы хотите создать стек. Например, us, eu.
    • <service-account-name> на имя сервисной учётной записи, которая будет создана для использования в операциях внутри стека/экземпляра.

Первый блок провайдера, grafana.cloud, использует токен политики доступа Cloud из Cloud Portal и указывается как параметр при создании стека Cloud и токена в экземпляре Grafana для обеспечения необходимой аутентификации.

Второй блок провайдера, grafana.my_stack, указывается как параметр при создании ресурсов внутри экземпляра Grafana.

Добавление источника данных

В этом руководстве используется источник данных InfluxDB. Требуемые аргументы для grafana_data_source (Resource) зависят от типа выбранного источника данных.

  1. Создайте файл с именем datasource.tf и добавьте следующее:

    terraform
    resource "grafana_data_source" "<data-source-name>" {
      provider = grafana.my_stack
    
      type          = "influxdb"
      name          = "<data-source-name>"
      url           = "<data-source-url>"
      username      = "<username>"
      password      = "<password>"
      database_name = "<db-name>"
    }
  2. Замените следующие значения полей:

    • <data-source-name> на имя источника данных, который нужно добавить в Grafana.
    • <data-source-url> на URL вашего источника данных.
    • <username> на имя пользователя для аутентификации в вашем источнике данных.
    • <password> на пароль для аутентификации в вашем источнике данных.
    • <db-name> на имя вашей базы данных.

Добавление папки

Эта конфигурация Terraform создаёт папку в вашем экземпляре Grafana с помощью ресурса grafana_folder (Resource).

  1. Создайте файл с именем folder.tf и добавьте следующее:

    terraform
    resource "grafana_folder" "<folder-name>" {
      provider = grafana.my_stack
    
      title = "<folder-name>"
    }
  2. Замените следующее значение поля:

    • <folder-name> на имя папки.

Добавление панели в папку

Эта конфигурация Terraform создаёт панель внутри папки, созданной выше, в вашем экземпляре Grafana с помощью ресурса grafana_dashboard (Resource).

  1. Создайте файл с именем dashboard.tf и добавьте следующее:

    terraform
    # Using a JSON file
    resource "grafana_dashboard" "dashboard" {
      provider = grafana.my_stack
    
      config_json = file("<file-name>.json")
      folder = grafana_folder.<folder-name>.id
    }
  2. Замените следующее значение поля:

    • <file-name> на имя JSON-файла, содержащего исходный код панели.

    Панель представляется её JSON-исходным кодом и указывается в параметре config_json.

Применение конфигурации Terraform

В терминале выполните следующие команды из каталога, в котором находятся все файлы конфигурации.

  1. Инициализируйте рабочий каталог, содержащий файлы конфигурации Terraform.

    shell
    terraform init
  2. Просмотрите изменения, которые внесёт Terraform.

    shell
    terraform plan
  3. Примените файлы конфигурации.

    shell
    terraform apply

Проверка

После применения изменений в конфигурациях Terraform вы сможете убедиться в следующем:

  • Новый стек Grafana создан и виден в Cloud Portal

    Cloud Portal

  • В ваш экземпляр Grafana добавлен ключевой токен сервисной учётной записи. На следующем изображении ключевой токен сервисной учётной записи с именем “terraform serviceaccount key” был добавлен ресурсом grafana_cloud_stack_service_account_token (Resource).

    API Key

  • Новый источник данных (в этом примере InfluxDB) виден в экземпляре Grafana.

    Источник данных InfluxDB

  • Новая папка в Grafana. На следующем изображении папка с именем “Demos” была добавлена ресурсом grafana_folder (Resource).

    Папка

  • Новая панель в экземпляре Grafana. На следующем изображении панель с именем “InfluxDB Cloud Demos” была создана внутри папки “Demos”.

    Панель InfluxDB

Итог

В этом руководстве вы создали стек Grafana Cloud, а также источник данных, папку и панель, импортированную из JSON-файла, с помощью Terraform.

Чтобы узнать больше об управлении Grafana Cloud с помощью Terraform, обратитесь к документации провайдера Grafana.