기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Webhook를 통해 DevOps 에이전트 호출
Webhook를 사용하면 외부 시스템이 자동으로 AWS DevOps 에이전트 조사를 트리거할 수 있습니다. 이를 통해 티켓팅 시스템, 모니터링 도구 및 인시던트 발생 시 HTTP 요청을 보낼 수 있는 기타 플랫폼과 통합할 수 있습니다.
사전 조건
웹후크 액세스를 구성하기 전에 다음을 갖추어야 합니다.
in AWS DevOps 에이전트에 구성된 에이전트 공간
AWS DevOps 에이전트 콘솔에 대한 액세스
Webhook 요청을 전송할 외부 시스템
Webhook 유형
AWS DevOps Agent는 다음과 같은 유형의 웹후크를 지원합니다.
통합별 웹후크 - Dynatrace, Splunk, Datadog, New Relic, ServiceNow 또는 Slack과 같은 타사 통합을 구성할 때 자동으로 생성됩니다. 이러한 웹후크는 특정 통합과 연결되며 통합 유형에 따라 결정되는 인증 방법을 사용합니다.
일반 웹후크 - 특정 통합에서 다루지 않는 소스에서 조사를 트리거하기 위해 수동으로 생성할 수 있습니다. 일반 웹후크는 현재 HMAC 인증을 사용합니다(베어러 토큰은 현재 사용할 수 없음).
Grafana 알림 웹후크 - Grafana는 웹후크 연락 지점을 통해 AWS DevOps 에이전트에 직접 알림 알림을 보낼 수 있습니다. 사용자 지정 알림 템플릿을 포함한 설정 지침은 Grafana 연결을 참조하세요.
Webhook 인증 방법
웹후크의 인증 방법은 연결된 통합에 따라 다릅니다.
HMAC 인증 - 다음에서 사용:
Dynatrace 통합 웹후크
일반 웹후크(특정 타사 통합에 연결되지 않음)
베어러 토큰 인증 - 다음에서 사용:
Splunk 통합 웹후크
Datadog 통합 웹후크
New Relic 통합 웹후크
ServiceNow 통합 웹후크
Slack 통합 웹후크
웹후크 액세스 구성
1단계: Webhook 구성으로 이동
AWS Management Console에 로그인하고 AWS DevOps 에이전트 콘솔로 이동합니다.
에이전트 스페이스 선택
기능 탭으로 이동
Webhook 섹션에서 구성을 클릭합니다.
2단계: Webhook 자격 증명 생성
통합별 웹후크의 경우:
타사 통합 구성을 완료하면 Webhook가 자동으로 생성됩니다. Webhook 엔드포인트 URL 및 자격 증명은 통합 설정 프로세스가 끝날 때 제공됩니다.
일반 웹후크의 경우:
웹후크 생성을 클릭합니다.
시스템에서 HMAC 키 페어를 생성합니다.
생성된 키와 보안 암호를 안전하게 저장합니다. 다시 검색할 수 없습니다.
제공된 웹후크 엔드포인트 URL 복사
3단계: 외부 시스템 구성
Webhook 엔드포인트 URL 및 자격 증명을 사용하여 외부 시스템이 AWS DevOps Agent에 요청을 보내도록 구성합니다. 특정 구성 단계는 외부 시스템에 따라 다릅니다.
Webhook 자격 증명 관리
자격 증명 제거 - 웹후크 자격 증명을 삭제하려면 웹후크 구성 섹션으로 이동하여 제거를 클릭합니다. 자격 증명을 제거한 후에는 새 자격 증명을 생성할 때까지 웹후크 엔드포인트가 더 이상 요청을 수락하지 않습니다.
자격 증명 재생성 - 새 자격 증명을 생성하려면 먼저 기존 자격 증명을 제거한 다음 새 키 페어 또는 토큰을 생성합니다.
Webhook 사용
Webhook 요청 형식
조사를 트리거하려면 외부 시스템이 HTTP POST 요청을 웹후크 엔드포인트 URL로 보내야 합니다.
버전 1(HMAC 인증)의 경우:
헤더:
Content-Type: application/jsonx-amzn-event-signature: <HMAC signature>x-amzn-event-timestamp: <+%Y-%m-%dT%H:%M:%S.000Z>
HMAC 서명은 SHA-256을 사용하여 보안 키로 요청 본문에 서명하여 생성됩니다.
버전 2(베어러 토큰 인증)의 경우:
헤더:
Content-Type: application/jsonAuthorization: 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을 수신했지만 조사가 시작되지 않는 경우
잘못된 페이로드가 원인일 수 있습니다.
타임스탬프와 인시던트 ID가 모두 업데이트되고 고유한지 확인합니다. 중복 메시지는 중복 제거됩니다.
메시지가 유효한 JSON인지 확인합니다.
형식이 올바른지 확인합니다.
200을 수신하고 조사가 즉시 취소되는 경우
해당 월의 한도에 도달했을 가능성이 높습니다. 해당하는 경우 AWS 연락처에 문의하여 속도 제한 변경을 요청하십시오.