このリポジトリには、一般的なECサイトを想定したPagerDuty環境をセットアップするためのTerraformサンプルコードが含まれています。
| サービス | 説明 | エスカレーションポリシー |
|---|---|---|
| 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 |
| ビジネスサービス | 説明 | 担当チーム |
|---|---|---|
| Customer Web Application | 顧客向けECサイトWebアプリケーション | Frontend Team |
| Admin Web Application | 社内管理者向けWebアプリケーション | Backend Team |
| Customer Mobile Application | 顧客向けECサイトMobileアプリ(iOS/Android) | Frontend Team |
- 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
- 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のオンコールスケジュール(週次ローテーション)が設定されています。
- Terraform >= 1.0
- PagerDuty アカウント
- PagerDuty API トークン
- PagerDutyにログイン
- Integrations → API Access Keys に移動
- Create New API Key をクリック
- 説明を入力し、Read/Write権限を付与
- 生成されたトークンをコピー
参考: https://support.pagerduty.com/docs/api-access-keys
# リポジトリをクローン
cd /path/to/this/directory
# terraform.tfvarsファイルを作成
cp terraform.tfvars.example terraform.tfvars
# terraform.tfvarsを編集してAPIトークンを設定
# pagerduty_token = "your-actual-api-token-here"users.tf ファイルを編集して、サンプルのメールアドレスを実際のチームメンバーのメールアドレスに変更してください。
resource "pagerduty_user" "frontend_primary" {
name = "山田 太郎"
email = "yamada.taro@yourcompany.com"
role = "user"
}# 初期化
terraform init
# プランの確認
terraform plan
# 適用
terraform applyterraform.tfvars で変更可能:
timezone = "America/New_York" # デフォルト: Asia/Tokyoterraform.tfvars で変更可能:
business_hours_start = "08:00:00" # デフォルト: 09:00:00
business_hours_end = "17:00:00" # デフォルト: 18:00:00schedules.tf で rotation_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"
}
}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
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.tf の pagerduty_service_dependency リソースで管理されています。
Terraform適用後、以下の情報を確認できます:
# すべてのサービスIDを表示
terraform output
# 特定のサービスの詳細を表示
terraform state show pagerduty_service.frontendterraform.tfvarsは.gitignoreに追加してください- APIトークンは絶対にコミットしないでください
- 本番環境では、環境変数やシークレット管理ツールを使用することを推奨します
# 環境変数での設定例
export TF_VAR_pagerduty_token="your-token-here"
terraform apply問題が発生した場合:
terraform planを実行して構文エラーを確認- PagerDuty Web UIで手動で作成された既存のリソースとの競合を確認
- Terraformのログを確認:
export TF_LOG=DEBUG
このコードはサンプルとして提供されています。必要に応じてカスタマイズしてご利用ください。
