Terraform으로 Grafana Cloud 스택 만들고 관리하기
Terraform으로 Grafana Cloud 스택 만들고 관리하기
이 문서에서는 Terraform을 사용해 Grafana Cloud 스택에 데이터 소스, 대시보드, 폴더를 추가하는 방법을 단계별로 안내합니다. 코드로 인프라를 관리하면서 Grafana 리소스를 만들고 관리해요.
출처: 문서
본문
Terraform을 사용해 Grafana Cloud 스택에 데이터 소스와 대시보드, 폴더를 추가하는 방법을 배워요.
사전 요구 사항
시작하기 전에 다음이 준비되어 있는지 확인하세요:
- Get started에 나온 대로 Grafana Cloud 계정
- 머신에 설치된 Terraform
참고 아래의 모든 Terraform 구성 파일은 같은 디렉터리에 저장하세요.
Cloud 스택 만들기
- 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"
}
- 다음 필드 값을 바꾸세요:
<cloud-access-token>을 Grafana Cloud Access Policy Token으로 바꾸세요. 새 토큰을 만들려면 Grafana Cloud Access Policies를 참고하세요. 모든 스택을 realms 목록에 추가하세요. 예제에 필요한 스코프는 다음과 같아요:dashboards:readorgs:readstack-dashboards:readstacks:readdashboards:writeorgs:writestack-dashboards:writestacks:writestack-service-accounts:writedashboards:deletestack-dashboards:deletestacks: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)는 선택한 데이터 소스 유형에 따라 달라져요.
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>"
}
- 다음 필드 값을 바꾸세요:
<data-source-name>을 Grafana에 추가할 데이터 소스 이름으로 바꾸세요.<data-source-url>을 데이터 소스의 URL로 바꾸세요.<username>을 데이터 소스 인증에 사용할 사용자 이름으로 바꾸세요.<password>를 데이터 소스 인증에 사용할 비밀번호로 바꾸세요.<db-name>을 데이터베이스 이름으로 바꾸세요.
폴더 추가하기
이 Terraform 구성은 grafana_folder (Resource)를 사용해 Grafana 인스턴스에 폴더를 만들어요.
folder.tf라는 파일을 만들고 다음을 추가하세요:
resource "grafana_folder" "<folder-name>" {
provider = grafana.my_stack
title = "<folder-name>"
}
- 다음 필드 값을 바꾸세요:
<folder-name>을 폴더 이름으로 바꾸세요.
폴더에 대시보드 추가하기
이 Terraform 구성은 grafana_dashboard (Resource)를 사용해 위에서 만든 폴더 안에 대시보드를 만들어요.
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
}
- 다음 필드 값을 바꾸세요. 대시보드는 JSON 소스 코드로 표현되며
config_json매개변수에서 참조돼요.<file-name>을 대시보드의 소스 코드가 들어 있는 JSON 파일 이름으로 바꾸세요.
Terraform 구성 적용하기
터미널에서 모든 구성 파일이 있는 디렉터리에서 다음 명령을 실행하세요.
- Terraform 구성 파일이 포함된 작업 디렉터리를 초기화해요:
terraform init
- Terraform이 만들 변경 사항을 미리 보아요:
terraform plan
- 구성 파일을 적용해요:
terraform apply
검증
Terraform 구성의 변경 사항을 적용했다면 다음을 확인할 수 있어야 해요:
- 새 Grafana 스택이 만들어져 Cloud Portal에 표시되는지:
- Grafana 인스턴스에 서비스 계정 키 토큰이 추가되었는지. 아래 이미지에서 "terraform serviceaccount key"라는 이름의 서비스 계정 키 토큰이 grafana_cloud_stack_service_account_token (Resource)에 의해 추가되었어요.
- Grafana 인스턴스에 새 데이터 소스(이 예제에서는 InfluxDB)가 표시되는지.
- Grafana에 새 폴더가 생겼는지. 아래 이미지에서 "Demos"라는 이름의 폴더가 grafana_folder (Resource)에 의해 추가되었어요.
- Grafana 인스턴스에 새 대시보드가 생겼는지. 아래 이미지에서 "InfluxDB Cloud Demos"라는 이름의 대시보드가 "Demos" 폴더 안에 만들어졌어요.
요약
이 가이드에서는 Terraform을 사용해 JSON 파일에서 가져온 데이터 소스, 폴더, 대시보드와 함께 Grafana Cloud 스택을 만들었어요.
Terraform으로 Grafana Cloud를 관리하는 방법을 더 배우려면 Grafana provider 문서를 참고하세요.