Terraform으로 Grafana Cloud 스택 만들고 관리하기

Terraform으로 Grafana Cloud 스택 만들고 관리하기

이 문서에서는 Terraform을 사용해 Grafana Cloud 스택에 데이터 소스, 대시보드, 폴더를 추가하는 방법을 단계별로 안내합니다. 코드로 인프라를 관리하면서 Grafana 리소스를 만들고 관리해요.

출처: 문서

본문

Terraform을 사용해 Grafana Cloud 스택에 데이터 소스와 대시보드, 폴더를 추가하는 방법을 배워요.

사전 요구 사항

시작하기 전에 다음이 준비되어 있는지 확인하세요:

참고 아래의 모든 Terraform 구성 파일은 같은 디렉터리에 저장하세요.

Cloud 스택 만들기

  1. Terraform 구성 파일을 만드세요. 이 Terraform 구성은 Grafana Cloud 스택과 Grafana 인스턴스에 필요한 두 번째 토큰을 만들 거예요. cloud-stack.tf라는 파일을 만들고 다음을 추가하세요:
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"
}
  1. 다음 필드 값을 바꾸세요:
    • <cloud-access-token>을 Grafana Cloud Access Policy Token으로 바꾸세요. 새 토큰을 만들려면 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 Portal의 Cloud Access Policy Token을 사용하며, Cloud 스택과 Grafana 인스턴스의 토큰을 만들 때 필요한 인증을 제공하기 위해 매개변수로 참조돼요.

두 번째 프로바이더 블록인 grafana.my_stack는 Grafana 인스턴스 안에서 리소스를 만들 때 매개변수로 참조돼요.

데이터 소스 추가하기

이 가이드는 InfluxDB 데이터 소스를 사용해요. grafana_data_source (Resource)에 필요한 인자(required arguments)는 선택한 데이터 소스 유형에 따라 달라져요.

  1. datasource.tf라는 파일을 만들고 다음을 추가하세요:
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>"
}
  1. 다음 필드 값을 바꾸세요:
    • <data-source-name>을 Grafana에 추가할 데이터 소스 이름으로 바꾸세요.
    • <data-source-url>을 데이터 소스의 URL로 바꾸세요.
    • <username>을 데이터 소스 인증에 사용할 사용자 이름으로 바꾸세요.
    • <password>를 데이터 소스 인증에 사용할 비밀번호로 바꾸세요.
    • <db-name>을 데이터베이스 이름으로 바꾸세요.

폴더 추가하기

이 Terraform 구성은 grafana_folder (Resource)를 사용해 Grafana 인스턴스에 폴더를 만들어요.

  1. folder.tf라는 파일을 만들고 다음을 추가하세요:
resource "grafana_folder" "<folder-name>" {
  provider = grafana.my_stack

  title = "<folder-name>"
}
  1. 다음 필드 값을 바꾸세요:
    • <folder-name>을 폴더 이름으로 바꾸세요.

폴더에 대시보드 추가하기

이 Terraform 구성은 grafana_dashboard (Resource)를 사용해 위에서 만든 폴더 안에 대시보드를 만들어요.

  1. dashboard.tf라는 파일을 만들고 다음을 추가하세요:
# Using a JSON file
resource "grafana_dashboard" "dashboard" {
  provider = grafana.my_stack

  config_json = file("<file-name>.json")
  folder = grafana_folder.<folder-name>.id
}
  1. 다음 필드 값을 바꾸세요. 대시보드는 JSON 소스 코드로 표현되며 config_json 매개변수에서 참조돼요.
    • <file-name>을 대시보드의 소스 코드가 들어 있는 JSON 파일 이름으로 바꾸세요.

Terraform 구성 적용하기

터미널에서 모든 구성 파일이 있는 디렉터리에서 다음 명령을 실행하세요.

  1. Terraform 구성 파일이 포함된 작업 디렉터리를 초기화해요:
terraform init
  1. Terraform이 만들 변경 사항을 미리 보아요:
terraform plan
  1. 구성 파일을 적용해요:
terraform apply

검증

Terraform 구성의 변경 사항을 적용했다면 다음을 확인할 수 있어야 해요:

  • 새 Grafana 스택이 만들어져 Cloud Portal에 표시되는지: Cloud Portal
  • Grafana 인스턴스에 서비스 계정 키 토큰이 추가되었는지. 아래 이미지에서 "terraform serviceaccount key"라는 이름의 서비스 계정 키 토큰이 grafana_cloud_stack_service_account_token (Resource)에 의해 추가되었어요. API Key
  • Grafana 인스턴스에 새 데이터 소스(이 예제에서는 InfluxDB)가 표시되는지. InfluxDB data source
  • Grafana에 새 폴더가 생겼는지. 아래 이미지에서 "Demos"라는 이름의 폴더가 grafana_folder (Resource)에 의해 추가되었어요. Folder
  • Grafana 인스턴스에 새 대시보드가 생겼는지. 아래 이미지에서 "InfluxDB Cloud Demos"라는 이름의 대시보드가 "Demos" 폴더 안에 만들어졌어요. InfluxDB dashboard

요약

이 가이드에서는 Terraform을 사용해 JSON 파일에서 가져온 데이터 소스, 폴더, 대시보드와 함께 Grafana Cloud 스택을 만들었어요.

Terraform으로 Grafana Cloud를 관리하는 방법을 더 배우려면 Grafana provider 문서를 참고하세요.

더 알아보기