Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

PagerDuty Terraform Example for EC Site

このリポジトリには、一般的なECサイトを想定したPagerDuty環境をセットアップするためのTerraformサンプルコードが含まれています。

📋 構成概要

Technical Services (10サービス)

サービス 説明 エスカレーションポリシー
Frontend Service Webアプリケーション・顧客向けUI Frontend Team
Admin Frontend Service Webアプリケーション・管理者向けUI Frontend Team
Backend API Service APIサーバー・ビジネスロジック Backend Team
Mobile Application Service iOS/Androidモバイルアプリ Frontend Team
Database Service PostgreSQL/MySQLデータベース Critical 24x7
Payment Service 決済処理システム Critical 24x7
Inventory Service 在庫管理システム Backend Team
Search & Catalog Service 商品検索・カタログ Backend Team
Notification Service メール・プッシュ通知 Business Hours
Cache & CDN Service キャッシュ・CDN Infrastructure Team

Business Services (3サービス)

ビジネスサービス 説明 担当チーム
Customer Web Application 顧客向けECサイトWebアプリケーション Frontend Team
Admin Web Application 社内管理者向けWebアプリケーション Backend Team
Customer Mobile Application 顧客向けECサイトMobileアプリ(iOS/Android) Frontend Team

Escalation Policies

  • Critical 24x7 - クリティカルサービス用(Database、Payment)
    • 10分後にInfra Primary → 10分後にInfra Secondary → 15分後にDevOps Primary
  • Frontend Team Escalation - Frontendチーム用
    • 15分後にFrontend Primary → 15分後にFrontend Secondary → 20分後にDevOps Primary
  • Backend Team Escalation - Backendチーム用
    • 15分後にBackend Primary → 15分後にBackend Secondary → 20分後にDevOps Primary
  • Infrastructure Team Escalation - Infraチーム用
    • 10分後にInfra Primary → 10分後にInfra Secondary → 15分後にDevOps Primary
  • Database Team Escalation - Infraチーム用
    • 10分後にDatabase Primary → 10分後にDatabase Secondary → 15分後にDevOps Primary
  • Business Hours - 営業時間用(平日9-18時)
    • 15分後にDevOps Primary → 15分後にDevOps Secondary
  • After Hours - 営業時間外用
    • 20分後にDevOps Primary → 20分後にDevOps Secondary

Teams & On-call Schedules

  • Frontend Team - Frontend Primary, Frontend Secondary
  • Backend Team - Backend Primary, Backend Secondary
  • Infrastructure Team - Infrastructure Primary, Infrastructure Secondary
  • Database Team - Database Primary, Database Secondary
  • DevOps Team - DevOps Primary, DevOps Secondary

各チームにPrimaryとSecondaryのオンコールスケジュール(週次ローテーション)が設定されています。

🚀 セットアップ手順

1. 前提条件

  • Terraform >= 1.0
  • PagerDuty アカウント
  • PagerDuty API トークン

2. PagerDuty APIトークンの取得

  1. PagerDutyにログイン
  2. IntegrationsAPI Access Keys に移動
  3. Create New API Key をクリック
  4. 説明を入力し、Read/Write権限を付与
  5. 生成されたトークンをコピー

参考: https://support.pagerduty.com/docs/api-access-keys

3. Terraform設定

# リポジトリをクローン
cd /path/to/this/directory

# terraform.tfvarsファイルを作成
cp terraform.tfvars.example terraform.tfvars

# terraform.tfvarsを編集してAPIトークンを設定
# pagerduty_token = "your-actual-api-token-here"

4. ユーザー情報の更新(本番環境の場合)

users.tf ファイルを編集して、サンプルのメールアドレスを実際のチームメンバーのメールアドレスに変更してください。

resource "pagerduty_user" "frontend_primary" {
  name  = "山田 太郎"
  email = "yamada.taro@yourcompany.com"
  role  = "user"
}

5. Terraformの実行

# 初期化
terraform init

# プランの確認
terraform plan

# 適用
terraform apply

📝 カスタマイズ

タイムゾーンの変更

terraform.tfvars で変更可能:

timezone = "America/New_York"  # デフォルト: Asia/Tokyo

営業時間の変更

terraform.tfvars で変更可能:

business_hours_start = "08:00:00"  # デフォルト: 09:00:00
business_hours_end   = "17:00:00"  # デフォルト: 18:00:00

オンコールローテーション期間の変更

schedules.tfrotation_turn_length_seconds を変更:

rotation_turn_length_seconds = 604800  # 1週間(デフォルト)
# 604800 = 1週間
# 86400 = 1日
# 1209600 = 2週間

サービスの追加

新しいサービスを追加する場合は、services.tf に以下のようなリソースを追加:

resource "pagerduty_service" "your_service" {
  name                    = "Your Service Name"
  description             = "Service description"
  auto_resolve_timeout    = 14400
  acknowledgement_timeout = 1800
  escalation_policy       = pagerduty_escalation_policy.backend.id
  alert_creation          = "create_alerts_and_incidents"

  incident_urgency_rule {
    type = "constant"
    urgency = "high"
  }
}

🔧 サービス依存関係

Service Graph

Technical Service間の依存関係

Frontend Service
  ├─→ Backend API Service
  └─→ Cache & CDN Service

Mobile Application Service
  ├─→ Backend API Service
  └─→ Cache & CDN Service

Backend API Service
  ├─→ Database Service
  ├─→ Cache & CDN Service
  ├─→ Payment Service
  ├─→ Inventory Service
  ├─→ Search & Catalog Service
  └─→ Notification Service

Payment Service
  └─→ Database Service

Inventory Service
  └─→ Database Service

Search & Catalog Service
  └─→ Database Service

Business Service → Technical Serviceの依存関係

Customer Web Application (Business Service)
  ├─→ Frontend Service
  ├─→ Backend API Service
  └─→ Payment Service

Admin Web Application (Business Service)
  ├─→ Admin Frontend Service
  ├─→ Backend API Service
  └─→ Database Service

Customer Mobile Application (Business Service)
  ├─→ Mobile Application Service
  ├─→ Backend API Service
  └─→ Payment Service

これらは services.tfpagerduty_service_dependency リソースで管理されています。

📊 出力情報

Terraform適用後、以下の情報を確認できます:

# すべてのサービスIDを表示
terraform output

# 特定のサービスの詳細を表示
terraform state show pagerduty_service.frontend

🔒 セキュリティ

  • terraform.tfvars.gitignore に追加してください
  • APIトークンは絶対にコミットしないでください
  • 本番環境では、環境変数やシークレット管理ツールを使用することを推奨します
# 環境変数での設定例
export TF_VAR_pagerduty_token="your-token-here"
terraform apply

📚 参考リンク

🤝 サポート

問題が発生した場合:

  1. terraform plan を実行して構文エラーを確認
  2. PagerDuty Web UIで手動で作成された既存のリソースとの競合を確認
  3. Terraformのログを確認: export TF_LOG=DEBUG

📄 ライセンス

このコードはサンプルとして提供されています。必要に応じてカスタマイズしてご利用ください。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages