【入門編】TerraformでDatadogを完全コード管理!IaCで監視設計を自動化するベストプラクティス – 運用監視・オブザーバビリティ活用バイブル

こんにちは!プロダクトの成長とともに増えていく「監視設定のジャングル」に、一人で迷い込んでため息をついていませんか?

「ダッシュボードをポチポチ手動で作ったけれど、誰が何の目的で作ったか分からない…」
「ステージング環境と本番環境でモニターの設定が微妙にズレていて、本番障害を見逃した…」

そんな地獄のような運用からあなたを救い出すのが、TerraformによるDatadogの完全コード管理(IaC)です。

これをマスターすれば、監視の変更もすべてPull Request(PR)のレビュー経由で行えるようになり、毎日の作業が劇的に楽になりますよ。今日は、現場で即効性のあるベストプラクティスを、優しく丁寧に紐解いていきましょう。

—

1. なぜDatadogをTerraformで管理すべきなのか?

まず前提として、DatadogのUIからポチポチとモニターやダッシュボードを作るのは、小規模なうちは手軽で良いのですが、システムがスケールするにつれて以下の「技術的負債」を生みます。

  • ブラックボックス化: 「なぜこのアラート閾値になっているのか」のコンテキストが消える。
  • 環境間のドリフト: 本番と検証で設定が異なり、テストの意味がなくなる。
  • 復旧の困難さ: 障害時にうっかり設定を消してしまった場合、手動での復旧はヒューマンエラーの元。

コード(Terraform)で管理すれば、「監視のバージョン管理」「レビュー文化の適用」「環境の複製(マルチテナント・マルチリージョン対応)」が一気に手に入ります。オブザーバビリティの信頼性は、監視基盤自体の信頼性の上にしか成り立たないのです。

—

2. 準備:Datadog Providerの基本セットアップ

まずは、TerraformからDatadogを操作するための認証設定を行います。
Datadog側で以下の2つのキーを発行しておいてください。
1. API Key: Datadogにデータを送ったり設定を操作したりするため。
2. App Key: DatadogのAPIを通じてリソース(モニターやダッシュボード)を読み書きするため。

ディレクトリ構成のベストプラクティス

大規模化しても破綻しない、モジュール化を見据えた王道のディレクトリ構成はこれです。

terraform-datadog/
├── modules/
│ ├── monitor_http/ # 再利用可能なHTTP監視モジュール
│ └── dashboard_app/ # アプリケーション用ダッシュボードモジュール
├── environments/
│ ├── stg/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── terraform.tfvars
│ └── prd/
│ ├── main.tf
│ ├── variables.tf
│ └── terraform.tfvars
└── versions.tf # プロバイダーのバージョン固定

基本のプロバイダー設定 (`versions.tf`)

まずはTerraformとDatadog Providerのバージョンを固定します。ここをサボると、将来のアップデートで突然Applyが通らなくなる事故が起きるので必ず書きましょう。

versions.tf
terraform {
required_version = “>= 1.5.0”
required_providers {
datadog = {
source – “DataDog/datadog”
version = “~> 3.30.0”
}
}
}

provider “datadog” {
# APIキーとAppキーは環境変数(DATADOG_API_KEY, DATADOG_APP_KEY)から自動読み込みさせます
# ベアの文字列をここに直書きするのは絶対にNGですよ!
api_url = “https://api.datadoghq.com/” # 欧州リージョンの場合は .eu に変更
}

—

3. HelloWorld:モニターとダッシュボードをコード化する

それでは、実際に最も重要で基礎的なセットアップとして、「HTTPステータスコードエラーを検知するモニター」と「最低限のサービス概要ダッシュボード」をコード化してみましょう。

`environments/stg/main.tf` に以下のように記述します。

environments/stg/main.tf

1. 接続断や5xxエラーを検知するモニターの定義
resource “datadog_monitor” “http_check_fail” {
name = “[Stg] API Gateway HTTP Error Rate is High”
type = “metric alert”
message = <4. 現場で使える!CI/CDパイプラインによる自動化の極意

ローカルで動くだけではまだプロの仕事とは言えません。チーム全員で安全に監視をアップデートするために、GitHub Actionsを使ったCI/CDパイプラインを組みましょう。

ここで重要なのは、「PR作成時に `terraform plan` の結果をコメントで自動投稿させ、マージされたら自動で `terraform apply` する」というフローです。

.github/workflows/terraform-datadog.yml
name: “Datadog Terraform CI/CD”

on:
push:
branches:

  • main

paths:

  • ‘environments/prd/’

pull_request:
branches:

  • main

paths:

  • ‘environments/prd/’

jobs:
terraform:
name: “Terraform Apply / Plan”
runs-on: ubuntu-latest
defaults:
run:
working-directory: environments/prd

steps:

  • name: Checkout Code

uses: actions/checkout@v3

  • name: Setup Terraform

uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.5.0

  • name: Terraform Init

env:
DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }}
DATADOG_APP_KEY: ${{ secrets.DATADOG_APP_KEY }}
run: terraform init

  • name: Terraform Plan

id: plan
env:
DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }}
DATADOG_APP_KEY: ${{ secrets.DATADOG_APP_KEY }}
run: terraform plan -no-color
continue-on-error: false

# PRの場合は、Planの結果をコメントしてレビューしやすくする

  • name: Comment Plan to PR

uses: actions/github-script@v6
if: github.event_name == ‘pull_request’
with:
script: |
const output = `

Terraform Plan 📝\`${{ steps.plan.outcome }}\`

Show Plan

\`\`\`hcl\n
${{ steps.plan.outputs.stdout }}
\`\`\`

`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})

  • name: Terraform Apply

if: github.ref == ‘refs/heads/main’ && github.event_name == ‘push’
env:
DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }}
DATADOG_APP_KEY: ${{ secrets.DATADOG_APP_KEY }}
run: terraform apply -auto-approve

このパイプラインを導入すれば、「誰がいつ監視アラートの閾値を変更したか」がGitの履歴として完全に残り、コードレビューという安全網を通すことができます。

—

先輩エンジニアからのアドバイス:さらなる高みを目指すあなたへ

TerraformによるDatadog管理に慣れてきたら、次のステップとして「モジュール化(`modules/` の活用)」に挑戦してください。
例えば、「どのマイクロサービスでも共通して持たせるべき標準モニター(CPU高騰、メモリ高騰、HTTP 5xxエラー)」をモジュール化しておけば、新しいサービスを生み出すときはたった数行のコードを呼び出すだけで、全社基準の高品質なオブザーバビリティが即座に担保できるようになります。

監視設計をコード化することは、チームの心理的安全性を高める最高の投資です。
今日からあなたのプロジェクトでも、ポチポチ作業を卒業して、美しいIaCの世界へ踏み出してみませんか?応援しています!

タイトルとURLをコピーしました