Terraform을 통해 Grafana Cloud에서 AWS Billing 지표를 설정하는 방법

10041 단어 grafanaterraformaws

왜 테라폼인가?



여기서는 Grafana Cloud에서 AWS Billing 지표를 표시하는 방법을 설명했습니다. 따라서 데이터 소스와 대시보드를 수동으로 생성해야 했습니다. Terraform을 사용하면 설정을 코드로 설명하고 IaC 의 모든 이점을 활용할 수 있습니다.

테라포밍



Terraform은 코드형 인프라를 위한 도구이며 다양한 provider과 함께 작동합니다. Terraform은 배포를 위한 CLI와 함께 제공됩니다.

Grafana 공급자 및 대시보드 선언



이 사용 사례의 경우 Grafana 데이터 원본과 Grafana 대시보드가 ​​필요합니다. 이러한 구성은 다음과 같은 .tf 파일에서 정의해야 합니다one.

처음에는 provider .

provider "grafana" {
  url = var.grafana_url
  auth = var.grafana_api_key
}


그런 다음 data sourcedashboard . 대시보드 섹션이 파일dashboards/aws-billing.json에 연결됩니다.

resource "grafana_data_source" "cloudwatch" {
  type = "cloudwatch"
  name = "CloudWatch"

  json_data {
    default_region = var.region
    auth_type = "keys"
  }

  secure_json_data {
    access_key = var.access_key_grafana
    secret_key = var.secret_key_grafana
  }
}

resource "grafana_dashboard" "metrics" {
  config_json = file("dashboards/aws-billing.json")
}


보안상의 이유와 템플릿의 유연한 공유를 위해 지역과 같은 비밀 및 변수에 대한 매개 변수는 .env 파일에 있습니다. 이것이 바로 template입니다.

# The URL of the Grafana instance
export TF_VAR_grafana_url=
# The API key of the Grafana instance
export TF_VAR_grafana_api_key=
# IAM user like described here: https://grafana.com/docs/grafana/latest/datasources/cloudwatch/#iam-policies
export TF_VAR_access_key_grafana=
export TF_VAR_secret_key_grafana=
# Default region of the data source
export TF_VAR_region=


Terraform 변수 선언은 다음과 같습니다.

variable "grafana_url" {}
variable "grafana_api_key" {}
variable "access_key_grafana" {}
variable "secret_key_grafana" {}
variable "region" {}


이 경우 설명된 variable.tf과 같은 파일here에 있습니다.

Grafana API 키



Terraform은 API 키를 통해 Grafana와 "통신"할 수 있습니다. 이 URL "https://«Grafana instance»/org/apikeys"로 이동하고 "Admin"역할로 생성합니다.



API 키를 .env 파일에 넣습니다.

env 파일의 사용



S3 백엔드 생성 및 배포 전에 명령source .env을 실행하십시오.

Terraform AWS S3 백엔드



이 설정은 지금까지 첫 번째 배포에 대해 작동합니다. 리소스가 이미 존재하기 때문에 변경 및 재배포로 인해 오류가 발생합니다. 따라서 Terraform backend으로 설정을 확장해야 합니다. 이 예에서는 S3 backend 입니다.

아쉽게도 여기에서는 변수를 사용할 수 없습니다. 이 문제는 몇 가지 해결 방법과 함께 이 문서issue에서 논의됩니다. 나는 이것을 one 다소간 사용합니다.

콘크리트 나는 terraform init 명령 주위에 script을 넣었습니다. 이 스크립트는 환경 변수를 사용하고 백엔드용 terraform 파일을 생성할 수 있습니다.

#!/bin/sh
cat > ./backend.tf << EOF
terraform {
  backend "s3" {
    bucket = "${TF_VAR_s3_bucket_name}"
    key = "${TF_VAR_backend_key}"
    region = "${TF_VAR_region}"
  }
}
EOF

terraform init -input=false


이것은script 버킷을 생성합니다.

#!/bin/sh

aws s3api create-bucket --bucket $TF_VAR_s3_bucket_name --region $TF_VAR_region


백엔드의 경우 IAM 사용자가 필요합니다. 이script는 사용자를 생성하고 액세스 및 비밀 키를 반환합니다. .env 파일에 넣으십시오.

# Name of the Terrafrom S3 backend for state handling
export TF_VAR_s3_bucket_name=
# Name of the state file
export TF_VAR_backend_key=terraform.tfstate
# IAM user credentials to access S3 and write the state file
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=


#!/bin/sh

aws iam create-user --user-name terraform_state

aws iam create-access-key --user-name terraform_state


이것은script 누락된 정책을 생성하고 연결합니다.

#!/bin/bash

cat > ./scripts/policy << EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::${TF_VAR_s3_bucket_name}"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3:::${TF_VAR_s3_bucket_name}/*"
    }
  ]
}
EOF

aws iam create-policy --policy-name terraform_state --policy-document file://scripts/policy

ARN=$(aws iam list-policies --query 'Policies[?PolicyName==`terraform_state`].Arn' --output text)

aws iam attach-user-policy --policy-arn $ARN --user-name terraform_state


배포 명령



S3 백엔드가 생성되면 배포에서 몇 가지 명령만 있으면 됩니다.

처음에는 스크립트에 래핑된 Terraform의 초기화입니다.
sh scripts/terraformInit.sh
다음 명령의 경우 Terraform CLI로 충분합니다.

validate: terraform validate
plan: terraform plan
apply: terraform apply

Grafana 대시보드 변경 사항



이제 대시보드 폴더의 JSON 파일을 통해 대시보드를 직접 변경할 수 있습니다. 더 쉬운 방법은 Grafana에서 수동으로 수행하고 공유 기능을 통해 변경된 JSON을 복사하는 것입니다.





aws-billing.json 파일을 Grafana의 JSON으로 덮어쓰고 다시 배포합니다.

CI/CD 파이프라인



CI/CD 파이프라인을 사용하여 로컬 배포도 가능합니다. this example에서는 GitHub 작업을 사용합니다. .env 파일 대신 GitHub 비밀에서 오는 변수 및 자격 증명.

암호




JohannesKonings / aws-grafana-청구-대시보드


Terraform을 통해 배포할 수 있는 AWS 청구 지표용 Grafana 대시보드





aws-grafana-청구-대시보드



Terraform을 통해 배포할 수 있는 AWS 청구 지표용 Grafana 대시보드.

환경 변수


파일.env_template의 이름을 .env로 바꾸고 env 변수의 값을 입력합니다.
명령 실행보다source .env

Terraform S3 백엔드


스크립트sh scripts/createS3BackendBucket.sh를 실행하여 Terraform의 상태를 저장할 S3 버킷을 생성합니다.
해당 버킷의 경우 액세스 및 비밀 키가 필요한 사용자입니다. sh scripts/createUser4S3BackendBucket.sh 스크립트로 생성됩니다.
스크립트 응답의 자격 증명을 .env 파일에 넣어야 합니다.

로컬 프로비저닝


Terraform 명령을 실행합니다.

테라포밍

sh scripts/terraformInit.shterraform validateterraform planterraform apply

View on GitHub

좋은 웹페이지 즐겨찾기