View a markdown version of this page

Invocar al DevOps agente a través de Webhook - AWS DevOps Agente

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Invocar al DevOps agente a través de Webhook

Los webhooks permiten que los sistemas externos AWS DevOps activen automáticamente las investigaciones de los agentes. Esto permite la integración con sistemas de emisión de tickets, herramientas de monitoreo y otras plataformas que pueden enviar solicitudes HTTP cuando se producen incidentes.

Requisitos previos

Antes de configurar el acceso a los webhooks, asegúrate de tener:

  • Un espacio de agente configurado en AWS DevOps Agent

  • Acceso a la consola del AWS DevOps agente

  • El sistema externo que enviará las solicitudes de webhook

Tipos de webhook

AWS DevOps El agente admite los siguientes tipos de webhooks:

  • Webhooks específicos para la integración: se generan automáticamente al configurar integraciones de terceros, como Dynatrace, Splunk, Datadog, New Relic o Slack. ServiceNow Estos webhooks están asociados a la integración específica y utilizan métodos de autenticación determinados por el tipo de integración

  • Webhooks genéricos: se pueden crear manualmente para iniciar investigaciones desde cualquier fuente que no esté incluida en una integración específica. Los webhooks genéricos utilizan actualmente la autenticación HMAC (el token portador no está disponible actualmente).

  • Webhooks de alertas de Grafana: Grafana puede enviar notificaciones de alerta directamente al AWS DevOps agente a través de los puntos de contacto de webhook. Para obtener instrucciones de configuración que incluyen una plantilla de notificación personalizada, consulte Conectar Grafana.

Métodos de autenticación de Webhook

El método de autenticación de tu webhook depende de la integración a la que esté asociado:

Autenticación HMAC: utilizada por:

  • Webhooks de integración con Dynatrace

  • Webhooks genéricos (no vinculados a una integración específica de terceros)

Autenticación mediante token de portador: utilizada por:

  • Webhooks de integración con Splunk

  • Webhooks de integración de Datadog

  • Webhooks de integración de New Relic

  • ServiceNow webhooks de integración

  • Webhooks de integración de Slack

Configurar el acceso a los webhooks

Paso 1: Navega hasta la configuración del webhook

  1. Inicie sesión en la consola AWS de administración y navegue hasta la consola del AWS DevOps agente

  2. Seleccione su espacio de agente

  3. Ve a la pestaña Capacidades

  4. En la sección Webhook, haga clic en Configurar

Paso 2: Generar las credenciales del webhook

Para webhooks específicos de la integración:

Los webhooks se generan automáticamente al completar la configuración de una integración de terceros. La URL y las credenciales del punto final del webhook se proporcionan al final del proceso de configuración de la integración.

Para los webhooks genéricos:

  1. Haz clic en Generar webhook

  2. El sistema generará un key pair HMAC

  3. Guarde de forma segura la clave y el secreto generados; no podrá volver a recuperarlos

  4. Copia la URL del punto de conexión del webhook proporcionada

Paso 3: Configura tu sistema externo

Utilice la URL y las credenciales del punto de conexión del webhook para configurar su sistema externo y enviar solicitudes al AWS DevOps agente. Los pasos de configuración específicos dependen del sistema externo.

Administrar las credenciales de webhook

Eliminar credenciales: para eliminar las credenciales del webhook, vaya a la sección de configuración del webhook y haga clic en Eliminar. Tras eliminar las credenciales, el punto final del webhook ya no aceptará solicitudes hasta que generes nuevas credenciales.

Regeneración de credenciales: para generar nuevas credenciales, elimine primero las credenciales existentes y, a continuación, genere un nuevo key pair o token.

Uso del webhook

Formato de solicitud de webhook

Para iniciar una investigación, tu sistema externo debe enviar una solicitud HTTP POST a la URL del punto final del webhook.

Para la versión 1 (autenticación HMAC):

Encabezados:

  • Content-Type: application/json

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

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

La firma HMAC se genera al firmar el cuerpo de la solicitud con tu clave secreta mediante el SHA-256.

Para la versión 2 (autenticación con token de portador):

Encabezados:

  • Content-Type: application/json

  • Authorization: Bearer <your-token>

Cuerpo de la solicitud:

El organismo solicitante debe incluir información sobre el incidente:

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

Código de ejemplo

Versión 1 (autenticación 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); });

Versión 1 (autenticación 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"

Versión 2 (autenticación con token de portador) -: 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), }); }

Versión 2 (autenticación por token de portador) - 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"

Solución de problemas de webhooks

Si no recibes un 200

Un 200 y un mensaje como el webhook recibido indican que la autenticación se ha aprobado y que el mensaje se ha puesto en cola para que el sistema lo verifique y procese. Si no obtienes un 200 sino un 4xx, lo más probable es que haya algún problema con la autenticación o los encabezados. Intenta enviarlo manualmente usando las opciones curl para ayudar a depurar la autenticación.

Si recibes un 200 pero no se inicia una investigación

La causa probable es una carga mal formateada.

  1. Compruebe que tanto la marca de tiempo como el identificador del incidente estén actualizados y sean únicos. Los mensajes duplicados se deduplican.

  2. Comprueba que el mensaje es un JSON válido

  3. Comprueba que el formato es correcto

Si recibes un 200$ y la investigación se cancela inmediatamente

Lo más probable es que hayas alcanzado el límite del mes. Hable con su persona de AWS contacto para solicitar un cambio en el límite de la tarifa, si es necesario.