APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【Datadog】GoogleフォームでDatadogユーザー作成を自動化してみた

目次


当社では、Datadogの導入支援から運用サポートまでをトータルでご支援するサービスを提供しています。

初期設計・エージェント展開・モニタリング設定・ダッシュボード構築まで、お客様のニーズに合わせた支援が可能です。

「自社だけでの導入が不安」「もっと効率的に監視環境を整えたい」という方は、ぜひお気軽にご相談ください。

www.ap-com.co.jp


はじめに

社内でDatadogの推進をしていると検証環境のユーザーを作成を依頼されることが多くあります。
「Googleフォームで情報を入力したら、自動でDatadogユーザーが作成される仕組みがあったらいいなあ」と思い、実際に作ってみた話です。

課題設定

現状の問題点:
- 依頼が来るたびに手動でDatadogユーザー作成
- メールアドレスや名前の入力ミス
- ロール設定の統一性がない
- 担当者が技術的な作業をする必要がある

理想の状態:
- Googleフォームに入力するだけで自動でユーザー作成
- 統一されたロール(Datadog Standard Role)を自動付与
- 非エンジニアでも簡単に操作可能

アプローチ検討

最初は「スプレッドシートでユーザー一覧を管理して、削除検知もして...」という複雑なシステムを考えていました。
しかし、要件を整理すると実はシンプルでした:

「フォーム送信 → Datadog API叩く」だけ

過度な設計は不要と判断し、最小限の機能に絞りました。

前提条件

ユーザ作成が可能なAPIKey、ApplicationKeyがあること

実装方法

1. システム構成

Googleフォーム → Google Apps Script → Datadog API

使用技術:
- Googleフォーム: UI
- Google Apps Script: サーバーレス実行環境
- Datadog Users API v2: ユーザー作成

2. Googleフォームの準備

必要なフィールドを作成:
- メールアドレス(必須)
- 名前(必須)
- 役職・部署(任意)
回答先をGoogleスプレッドシートに設定します。

3. Google Apps Scriptの実装

メインのロジック:

function onFormSubmit(e) {
  const responses = e.values;
  const name = responses[1];    // 名前
  const email = responses[2];     // メールアドレス
  const role = responses[3];     // 役職
  
  createDatadogUser(email, name, role);
}

function createDatadogUser(email, name, role) {
  const API_KEY = PropertiesService.getScriptProperties().getProperty('DATADOG_API_KEY');
  const APP_KEY = PropertiesService.getScriptProperties().getProperty('DATADOG_APP_KEY');
  const SITE = PropertiesService.getScriptProperties().getProperty('DATADOG_SITE') || 'datadoghq.com';
  const STANDARD_ROLE_ID = PropertiesService.getScriptProperties().getProperty('DATADOG_STANDARD_ROLE_ID');
  
  const url = `https://api.${SITE}/api/v2/users`;
  
  const payload = {
    data: {
      type: 'users',
      attributes: {
        email: email,
        name: name,
        title: role
      },
      relationships: {
        roles: {
          data: [
            {
              type: 'roles',
              id: STANDARD_ROLE_ID  // Datadog Standard Role
            }
          ]
        }
      }
    }
  };
  
  const options = {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'DD-API-KEY': API_KEY,
      'DD-APPLICATION-KEY': APP_KEY
    },
    payload: JSON.stringify(payload)
  };
  
  try {
    const response = UrlFetchApp.fetch(url, options);
    const responseCode = response.getResponseCode();
    
    if (responseCode === 201) {
      const userData = JSON.parse(response.getContentText());
      console.log(`✅ User created: ${email} (ID: ${userData.data.id})`);
    } else {
      console.error(`❌ Failed: ${responseCode} - ${response.getContentText()}`);
    }
  } catch (error) {
    console.error(`❌ Error: ${error.toString()}`);
  }
}

4. セキュリティ設定

APIキーはスクリプトプロパティで管理:

Google Apps Script → プロジェクトの設定 → スクリプト プロパティ

  • DATADOG_API_KEY: DatadogのAPIキー
  • DATADOG_APP_KEY: DatadogのApplication Key
  • DATADOG_SITE: datadoghq.com
  • DATADOG_STANDARD_ROLE_ID: Standard RoleのUUID

5. トリガー設定

Google Apps Script → トリガー → 新規作成
- 関数: onFormSubmit
- イベントソース: スプレッドシートから
- イベントタイプ: フォーム送信時

つまずいたポイント

1. 403 Forbidden エラー

原因: APIキーの権限不足

解決策:
- Datadog Admin権限を持つユーザーでApplication Keyを作成
- user_access_invite権限が必要

2. ロールの指定方法

最初はロール名で指定しようとしましたが、UUIDが必要でした。

間違い:

relationships: {
  roles: {
    data: [{ type: 'roles', id: 'Datadog Standard Role' }]  // NG
  }
}

正解:

relationships: {
  roles: {
    data: [{ type: 'roles', id: '4cde62c4-6e85-11ef-ad41-da7ad0900002' }]  // OK
  }
}

ロールUUIDはDatadog UI、またはRoles APIで取得できます。

3. エラーハンドリング

muteHttpExceptions: trueを使って詳細なエラー情報を取得:

const options = {
  method: 'POST',
  headers: { /* ... */ },
  payload: JSON.stringify(payload),
  muteHttpExceptions: true  // これ重要!
};

デバッグ機能の実装

本番運用前に設定をテストする機能も作りました:

function testConfiguration() {
  // APIキー有効性チェック
  // Application Key権限チェック
  // ロールID存在確認
  // 詳細ログ出力
}

これで403エラーなどの原因を特定しやすくなりました。

最終的なワークフロー

  1. 担当者: Googleフォームに情報を入力
  2. システム: 自動でDatadogユーザー作成(Standard Role付き)
  3. 依頼者: Datadogから招待メールが届く
  4. 完了: すぐにDatadogを利用開始

効果と改善点

効果

  • 作業時間: 5分 → 30秒(90%削減)
  • ミス減少: 手動入力ミスがゼロに
  • 標準化: 全員が同じロールで統一
  • 自動化: 担当者だけで完結

今後の改善案

  • 通知機能: 作成成功・失敗の自動通知
  • バッチ処理: 複数ユーザーの一括作成
  • ログ管理: 作成履歴の記録
  • エラー復旧: 失敗時の自動リトライ

まとめ

「複雑な機能を作ろう」と思いがちですが、要件を整理すると意外とシンプルでした。
Google Apps Scriptの手軽さと、Datadog APIの充実により、わずか50行程度のコードで実用的な自動化が実現できました。

学んだこと:
- 過度な設計より、まずは動くものを作る
- APIキーの権限確認は最初にやる
- エラーハンドリングとデバッグ機能は必須
- セキュリティ(スクリプトプロパティ)は妥協しない

似たような課題を抱えている方の参考になれば幸いです!


関連リンク:
- Datadog Users API Documentation
- Google Apps Script Documentation



お知らせ

当社では、Datadogの導入支援から運用サポートまでをトータルでご支援するサービスを提供しています。

初期設計・エージェント展開・モニタリング設定・ダッシュボード構築まで、お客様のニーズに合わせた支援が可能です。

「自社だけでの導入が不安」「もっと効率的に監視環境を整えたい」という方は、ぜひお気軽にご相談ください。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: かとりょー
主にクラウド・オブザーバビリティについて発信していきます!