View a markdown version of this page

Webhook による DevOps エージェントの呼び出し - AWS DevOps エージェント

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Webhook による DevOps エージェントの呼び出し

Webhook を使用すると、外部システムが AWS DevOps エージェント調査を自動的にトリガーできます。これにより、インシデントが発生したときに HTTP リクエストを送信できるチケットシステム、モニタリングツール、およびその他のプラットフォームとの統合が可能になります。

前提条件

ウェブフックアクセスを設定する前に、以下があることを確認してください。

  • AWS DevOps エージェントで設定されたエージェントスペース

  • AWS DevOps エージェントコンソールへのアクセス

  • ウェブフックリクエストを送信する外部システム

ウェブフックタイプ

AWS DevOps エージェントは、次のタイプのウェブフックをサポートしています。

  • 統合固有のウェブフック – Dynatrace、Splunk、Datadog、New Relic、ServiceNow、Slack などのサードパーティー統合を設定すると自動的に生成されます。これらのウェブフックは特定の統合に関連付けられ、統合タイプによって決定される認証方法を使用します。

  • 汎用ウェブフック – 特定の統合の対象ではないソースから調査をトリガーするために手動で作成できます。汎用ウェブフックは現在 HMAC 認証を使用しています (ベアラートークンは現在利用できません)。

  • Grafana アラートウェブフック – Grafana は、ウェブフックのコンタクトポイントを通じてアラート通知を AWS DevOps エージェントに直接送信できます。カスタム通知テンプレートを含むセットアップ手順については、「Grafana の接続」を参照してください。

Webhook 認証方法

ウェブフックの認証方法は、関連付けられている統合によって異なります。

HMAC 認証 – 以下によって使用されます。

  • Dynatrace 統合ウェブフック

  • 一般的なウェブフック (特定のサードパーティー統合にリンクされていない)

ベアラートークン認証 – 以下によって使用されます。

  • Splunk 統合ウェブフック

  • Datadog 統合ウェブフック

  • New Relic 統合ウェブフック

  • ServiceNow 統合ウェブフック

  • Slack 統合ウェブフック

ウェブフックアクセスの設定

ステップ 1: ウェブフック設定に移動する

  1. AWS マネジメントコンソールにサインインし、 AWS DevOps エージェントコンソールに移動します。

  2. エージェントスペースを選択する

  3. 機能タブに移動する

  4. Webhook セクションで、Configure をクリックします。

ステップ 2: ウェブフック認証情報を生成する

統合固有のウェブフックの場合:

サードパーティー統合の設定を完了すると、ウェブフックが自動的に生成されます。ウェブフックエンドポイント URL と認証情報は、統合セットアッププロセスの最後に提供されます。

汎用ウェブフックの場合:

  1. ウェブフックの生成 をクリックします。

  2. システムは HMAC キーペアを生成します

  3. 生成されたキーとシークレットを安全に保存する - 再度取得することはできません

  4. 提供されたウェブフックエンドポイント URL をコピーする

ステップ 3: 外部システムを設定する

ウェブフックエンドポイント URL と認証情報を使用して、 AWS DevOps エージェントにリクエストを送信するように外部システムを設定します。特定の設定手順は、外部システムによって異なります。

ウェブフック認証情報の管理

認証情報の削除 – ウェブフック認証情報を削除するには、ウェブフック設定セクションに移動し、削除をクリックします。認証情報を削除すると、ウェブフックエンドポイントは新しい認証情報を生成するまでリクエストを受け入れなくなります。

認証情報の再生成 – 新しい認証情報を生成するには、まず既存の認証情報を削除してから、新しいキーペアまたはトークンを生成します。

ウェブフックの使用

Webhook リクエスト形式

調査をトリガーするには、外部システムがウェブフックエンドポイント URL に HTTP POST リクエストを送信する必要があります。

バージョン 1 (HMAC 認証):

ヘッダー。

  • Content-Type: application/json

  • x-amzn-event-signature: <HMAC signature>

  • x-amzn-event-timestamp: <+%Y-%m-%dT%H:%M:%S.000Z>

HMAC 署名は、SHA-256 を使用してシークレットキーでリクエスト本文に署名することで生成されます。

バージョン 2 (ベアラートークン認証):

ヘッダー。

  • Content-Type: application/json

  • Authorization: Bearer <your-token>

リクエスト本文:

リクエスト本文には、インシデントに関する情報を含める必要があります。

json { "title": "Incident title", "severity": "high", "affectedResources": ["resource-id-1", "resource-id-2"], "timestamp": "2025-11-23T18:00:00Z", "description": "Detailed incident description", "data": { "metadata": { "region": "us-east-1", "environment": "production" } } }

コードの例

バージョン 1 (HMAC 認証) - JavaScript:

const crypto = require('crypto'); // Webhook configuration const webhookUrl = 'https://your-webhook-endpoint.amazonaws.com/invoke'; const webhookSecret = 'your-webhook-secret-key'; // Incident data const incidentData = { eventType: 'incident', incidentId: 'incident-123', action: 'created', priority: "HIGH", title: 'High CPU usage on production server', description: 'High CPU usage on production server host ABC in AWS account 1234 region us-east-1', timestamp: new Date().toISOString(), service: 'MyTestService', data: { metadata: { region: 'us-east-1', environment: 'production' } } }; // Convert data to JSON string const payload = JSON.stringify(incidentData); const timestamp = new Date().toISOString(); const hmac = crypto.createHmac("sha256", webhookSecret); hmac.update(`${timestamp}:${payload}`, "utf8"); const signature = hmac.digest("base64"); // Send the request fetch(webhookUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-amzn-event-timestamp': timestamp, 'x-amzn-event-signature': signature }, body: payload }) .then(res => { console.log(`Status Code: ${res.status}`); return res.text(); }) .then(data => { console.log('Response:', data); }) .catch(error => { console.error('Error:', error); });

バージョン 1 (HMAC 認証) - cURL:

#!/bin/bash # Configuration WEBHOOK_URL="https://event-ai.us-east-1.api.aws/webhook/generic/YOUR_WEBHOOK_ID" SECRET="YOUR_WEBHOOK_SECRET" # Create payload TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S.000Z) INCIDENT_ID="test-alert-$(date +%s)" PAYLOAD=$(cat <<EOF { "eventType": "incident", "incidentId": "$INCIDENT_ID", "action": "created", "priority": "HIGH", "title": "Test Alert", "description": "Test alert description", "service": "TestService", "timestamp": "$TIMESTAMP" } EOF ) # Generate HMAC signature SIGNATURE=$(echo -n "${TIMESTAMP}:${PAYLOAD}" | openssl dgst -sha256 -hmac "$SECRET" -binary | base64) # Send webhook curl -X POST "$WEBHOOK_URL" \ -H "Content-Type: application/json" \ -H "x-amzn-event-timestamp: $TIMESTAMP" \ -H "x-amzn-event-signature: $SIGNATURE" \ -d "$PAYLOAD"

バージョン 2 (ベアラートークン認証) - JavaScript:

function sendEventToWebhook(webhookUrl, secret) { const timestamp = new Date().toISOString(); const payload = { eventType: 'incident', incidentId: 'incident-123', action: 'created', priority: "HIGH", title: 'Test Alert', description: 'Test description', timestamp: timestamp, service: 'TestService', data: {} }; fetch(webhookUrl, { method: "POST", headers: { "Content-Type": "application/json", "x-amzn-event-timestamp": timestamp, "Authorization": `Bearer ${secret}`, // Fixed: template literal }, body: JSON.stringify(payload), }); }

バージョン 2 (ベアラートークン認証) - cURL:

#!/bin/bash # Configuration WEBHOOK_URL="https://event-ai.us-east-1.api.aws/webhook/generic/YOUR_WEBHOOK_ID" SECRET="YOUR_WEBHOOK_SECRET" # Create payload TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S.000Z) INCIDENT_ID="test-alert-$(date +%s)" PAYLOAD=$(cat <<EOF { "eventType": "incident", "incidentId": "$INCIDENT_ID", "action": "created", "priority": "HIGH", "title": "Test Alert", "description": "Test alert description", "service": "TestService", "timestamp": "$TIMESTAMP" } EOF ) # Send webhook curl -X POST "$WEBHOOK_URL" \ -H "Content-Type: application/json" \ -H "x-amzn-event-timestamp: $TIMESTAMP" \ -H "Authorization: Bearer $SECRET" \ -d "$PAYLOAD"

ウェブフックのトラブルシューティング

200 を受信しない場合

200 とウェブフックが受信したメッセージは、認証に合格し、システムが確認および処理するためにメッセージがキューに入れられたことを示します。200 ではなく 4xx を取得する場合、認証またはヘッダーに問題がある可能性があります。認証のデバッグに役立つ curl オプションを使用して手動で送信してみてください。

200 を受信しても調査が開始されない場合

原因として、ペイロードの変形が考えられます。

  1. タイムスタンプとインシデント ID の両方が更新され、一意であることを確認します。重複するメッセージは重複排除されます。

  2. メッセージが有効な JSON であることを確認します。

  3. 形式が正しいことを確認する

200 を受け取り、調査が直ちにキャンセルされた場合

ほとんどの場合、その月の上限に達しています。必要に応じて AWS 、連絡先に連絡してレート制限の変更を依頼してください。