View a markdown version of this page

Invocation de DevOps l'agent via Webhook - AWS DevOps Agent

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Invocation de DevOps l'agent via Webhook

Les webhooks permettent aux systèmes externes de déclencher automatiquement les investigations des AWS DevOps agents. Cela permet l'intégration aux systèmes de billetterie, aux outils de surveillance et à d'autres plateformes qui peuvent envoyer des requêtes HTTP en cas d'incident.

Conditions préalables

Avant de configurer l'accès au webhook, assurez-vous d'avoir :

  • Un espace d'agent configuré dans AWS DevOps l'agent

  • Accès à la console de AWS DevOps l'agent

  • Le système externe qui enverra les demandes de webhook

Types de webhooks

AWS DevOps L'agent prend en charge les types de webhooks suivants :

  • Webhooks spécifiques à l'intégration : générés automatiquement lorsque vous configurez des intégrations tierces telles que Dynatrace, Splunk, Datadog, New Relic ou Slack. ServiceNow Ces webhooks sont associés à l'intégration spécifique et utilisent des méthodes d'authentification déterminées par le type d'intégration.

  • Webhooks génériques : ils peuvent être créés manuellement pour déclencher des enquêtes à partir de n'importe quelle source non couverte par une intégration spécifique. Les webhooks génériques utilisent actuellement l'authentification HMAC (le jeton porteur n'est pas disponible actuellement).

  • Webhooks d'alerte Grafana — Grafana peut envoyer des notifications d'alerte directement à l' AWS DevOps agent via les points de contact des webhooks. Pour les instructions de configuration, y compris un modèle de notification personnalisé, voir Connecting Grafana.

Méthodes d'authentification Webhook

La méthode d'authentification de votre webhook dépend de l'intégration à laquelle il est associé :

Authentification HMAC — Utilisée par :

  • Webhooks d'intégration de Dynatrace

  • Webhooks génériques (non liés à une intégration tierce spécifique)

Authentification par jeton au porteur : utilisée par :

  • Webhooks d'intégration Splunk

  • Webhooks d'intégration à Datadog

  • Webhooks d'intégration New Relic

  • ServiceNow webhooks d'intégration

  • Webhooks d'intégration à Slack

Configuration de l'accès au webhook

Étape 1 : Accédez à la configuration du webhook

  1. Connectez-vous à la console AWS de gestion et accédez à la console de l' AWS DevOps agent

  2. Sélectionnez votre espace d'agent

  3. Accédez à l'onglet Fonctionnalités

  4. Dans la section Webhook, cliquez sur Configurer

Étape 2 : générer les informations d'identification du webhook

Pour les webhooks spécifiques à l'intégration :

Les webhooks sont automatiquement générés lorsque vous terminez la configuration d'une intégration tierce. L'URL et les informations d'identification du point de terminaison du webhook sont fournies à la fin du processus de configuration de l'intégration.

Pour les webhooks génériques :

  1. Cliquez sur Générer un webhook

  2. Le système générera une paire de clés HMAC

  3. Stockez en toute sécurité la clé et le secret générés, vous ne pourrez plus les récupérer

  4. Copiez l'URL du point de terminaison du webhook fournie

Étape 3 : Configuration de votre système externe

Utilisez l'URL et les informations d'identification du point de terminaison du webhook pour configurer votre système externe afin d'envoyer des demandes à l' AWS DevOps agent. Les étapes de configuration spécifiques dépendent de votre système externe.

Gestion des informations d'identification du webhook

Suppression des informations d'identification : pour supprimer les informations d'identification du webhook, accédez à la section de configuration du webhook et cliquez sur Supprimer. Après avoir supprimé les informations d'identification, le point de terminaison du webhook n'acceptera plus les demandes tant que vous n'aurez pas généré de nouvelles informations d'identification.

Régénération des informations d'identification : pour générer de nouvelles informations d'identification, supprimez d'abord les informations d'identification existantes, puis générez une nouvelle paire de clés ou un nouveau jeton.

Utilisation du webhook

Format de demande de webhook

Pour déclencher une enquête, votre système externe doit envoyer une requête HTTP POST à l'URL du point de terminaison du webhook.

Pour la version 1 (authentification HMAC) :

En-têtes :

  • Content-Type: application/json

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

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

La signature HMAC est générée en signant le corps de la demande avec votre clé secrète en utilisant SHA-256.

Pour la version 2 (authentification par jeton porteur) :

En-têtes :

  • Content-Type: application/json

  • Authorization: Bearer <your-token>

Corps de la demande :

Le corps de la demande doit inclure des informations sur l'incident :

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" } } }

Exemple de code

Version 1 (authentification 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); });

Version 1 (authentification 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"

Version 2 (authentification par jeton porteur) - : 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), }); }

Version 2 (authentification par jeton porteur) - 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"

Résolution des problèmes liés aux webhooks

Si vous ne recevez pas de 200

Un 200 et un message tel que webhook reçus indiquent que l'authentification a été réussie et que le message a été mis en file d'attente pour que le système le vérifie et le traite. Si vous n'obtenez pas un 200 mais un 4xx, il y a probablement un problème avec l'authentification ou les en-têtes. Essayez d'envoyer manuellement à l'aide des options curl pour aider à débuguer l'authentification.

Si vous recevez un 200 mais qu'une enquête ne démarre pas

La cause probable est une charge utile mal formatée.

  1. Vérifiez que l'horodatage et l'identifiant de l'incident sont à jour et uniques. Les messages dupliqués sont dédupliqués.

  2. Vérifiez que le message est valide au format JSON

  3. Vérifiez que le format est correct

Si vous recevez un 200$ et que l'enquête est immédiatement annulée

Vous avez probablement atteint la limite du mois. Adressez-vous à votre AWS contact pour demander une modification de la limite de taux, le cas échéant.