내용으로 건너뛰기

EventBridge 규칙 관련 문제를 해결하려면 어떻게 해야 합니까?

4분 분량
0

대상을 트리거하지 않는 Amazon EventBridge 규칙을 해결하고 싶습니다.

간략한 설명

대상을 트리거하지 않는 EventBridge 규칙을 해결하려면 다음 단계를 완료하십시오.

  1. 관련 이벤트가 발생했는지 확인합니다.
  2. 이벤트가 규칙 이벤트 패턴과 일치하는지 확인합니다.
  3. 대상이 이벤트를 성공적으로 처리했는지 확인합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

관련 이벤트가 발생했는지 확인

다음 작업을 수행하십시오.

  • AWS CloudTrail이 이벤트를 캡처한 경우 CloudTrail 로그를 분석합니다. API 직접 호출이 예상 시간에 발생했고 이벤트 패턴의 모든 필드와 일치하는지 확인합니다.
    참고: 일부 AWS 서비스는 us-east-1 리전에서만 사용할 수 있습니다. 예를 들어 AWS Identity and Access Management(IAM) API 직접 호출us-east-1 AWS 리전에만 게시됩니다. 다른 리전에서 규칙을 생성한 경우 이러한 이벤트가 EventBridge로 전달되지 않으며 규칙이 트리거되지 않습니다.
  • EventBridge 콘솔은 예제 AWS 및 파트너 이벤트가 포함된 샌드박스 도구를 제공합니다. 도구를 사용하여 이벤트 패턴을 AWS, 파트너 및 사용자 지정 이벤트와 일치시킵니다. 또는 TestEventPattern API를 사용하여 이벤트 패턴과 이벤트 간의 일치를 확인합니다.
  • EventBridge는 성공적으로 일치된 이벤트에 대한 규칙을 보고하는 TriggeredRules 지표를 제공합니다. TriggeredRules 지표의 타임스탬프를 사용하여 이벤트 발생 시기를 검토할 수 있습니다.

CloudWatch 지표 검토

EventBridge 규칙의 Amazon CloudWatch 지표를 검토하려면 다음 단계를 완료하십시오.

  1. CloudWatch 콘솔을 엽니다.
  2. 모든 지표를 선택합니다.
  3. AWS/Events 네임스페이스를 선택합니다.
  4. 규칙에 대해 TriggeredRules, Invocations, FailedInvocations 지표를 선택합니다.
    참고: SUM 통계를 통해 이러한 지표를 볼 수 있습니다.

이벤트가 규칙 이벤트 패턴과 일치하는지 확인

이벤트를 일치시키려면 이벤트 패턴의 모든 필드가 일치해야 합니다. 샌드박스 도구를 사용하여 몇 개의 필드가 있는 이벤트 패턴에 대해 이벤트를 테스트합니다. 다음과 같은 간단한 이벤트 패턴을 사용하십시오.

{    "source": ["aws.s3"]
}

성공적으로 일치하는 경우 이벤트 패턴의 복잡성이 증가합니다. 이벤트 패턴에 추가된 각 필드는 일치하는 이벤트를 필터링하고 포커스를 줄입니다. 정확한 패턴을 가져오기 위해 사용자는 CloudWatch Logs 그룹 대상 또는 Amazon Simple Notification Service(Amazon SNS) 주제를 임시로 연결할 수 있습니다. 이 작업은 대상으로 전달된 이벤트를 캡처하거나 대상의 잘못된 구성을 격리합니다. 또한 이벤트가 대상으로 전달되었고 입력 트랜스포머가 올바르게 구성되었는지도 확인합니다.

대상에 전달된 이벤트를 기반으로 사용자 요구 사항에 맞게 패턴을 다시 작성합니다. 다음은 이벤트 패턴의 예입니다.

{  "source": [
    "aws.s3"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventName": [
      "PutObject",
      "DeleteObject",
      "DeleteObjects"
    ],
    "requestParameters": {
      "bucketName": [
        "123456789012-prod-app1"
      ],
      "key": [
        {
          "prefix": "feature1/"
        },
        {
          "prefix": "feature2/"
        }
      ]
    }
  }
}

참고: 패턴은 feature1 또는 feature2 중 하나로 시작하는 객체의 특정 버킷에 대한 Amazon Simple Storage Service(Amazon S3) API 직접 호출 목록과 일치합니다.

필드를 점진적으로 추가하여 이벤트와 일치하지 않는 필드를 격리할 수 있습니다.

대상이 이벤트를 성공적으로 처리했는지 확인

간접 호출 지표는 규칙이 대상에 이벤트를 전달할 때 데이터 포인트를 게시하고, 성공하거나 실패한 간접 호출을 보여줍니다. EventBridge는 대상을 간접적으로 호출하는 데 영구적으로 실패할 때 FailedInvocations 데이터포인트를 실행합니다. 이 데이터포인트는 대상 구성과 관련된 문제 또는 부적절한 권한과 관련된 문제를 나타냅니다.

EventBridge에는 대상을 간접적으로 호출하는 데 필요한 권한이 있어야 합니다. IAM 역할 또는 리소스 정책은 대상에 대한 권한을 부여할 수 있습니다. EventBridge를 사용하여 규칙을 생성하면 콘솔이 관련 리소스에 필요한 권한을 자동으로 추가합니다.

참고: AWS SDK, AWS Command Line Interface(AWS CLI) 또는 AWS CloudFormation을 사용하여 규칙을 배포하는 경우 권한을 구성하십시오.

FailedInvocations 데이터포인트가 없으면 EventBridge가 대상에 이벤트를 성공적으로 전달한 것입니다. 그러나 대상이 올바르게 작동하지 않을 수 있습니다. 예를 들어, AWS Lambda 대상이 실행되거나 제한될 때 오류가 발생할 수 있습니다. 자세한 내용을 보려면 대상의 CloudWatch 지표 및 관련 로그를 검토하십시오.

FailedInvocations의 원인을 식별하려면 Amazon Simple Queue Service(Amazon SQS) Dead Letter Queue(DLQ)를 대상과 연결하십시오.

대상에서 DLQ를 구성하려면 다음 단계를 완료하십시오.

  1. SQS 대기열을 생성합니다.
  2. 이벤트 규칙을 선택한 후 편집을 선택합니다.
  3. 대상 탭을 선택한 후 편집을 선택합니다.
  4. 재시도 정책을 설정하려는 대상의 추가 설정 탭을 확장합니다.
  5. Dead Letter Queue(DLQ) 섹션에서 SQS DLQ가 동일한 계정에 있는지 또는 서로 다른 계정에 있는지에 따라 옵션을 선택합니다.
  6. 현재 AWS 계정에서 Dead Letter Queue(DLQ)로 사용할 Amazon SQS 대기열 선택을 선택한 다음 SQS 대기열의 이름을 선택합니다.
  7. 업데이트를 선택합니다.

규칙 간접 호출에 실패한 경우 DLQ는 오류 메시지를 기록합니다. 이 오류를 검토하려면 다음 단계를 완료합니다.

  1. SQS 대기열에서 메시지 보내기 및 받기를 선택합니다.
  2. 메시지 폴링을 선택합니다.
  3. 오류 메시지를 선택한 다음 속성 섹션으로 이동합니다.

다음은 EventBridge에 Lambda 대상을 간접적으로 호출하는 데 필요한 권한이 없음을 보여주는 DLQ 메시지의 예입니다.

"MessageAttributes": {                "ERROR_CODE": {
                    "StringValue": "NO_PERMISSIONS",
                    "DataType": "String"
                },
                "ERROR_MESSAGE": {
                    "StringValue": "User: events.amazonaws.com is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-east-1:123456789012:function:Hello_World because no resource-based policy allows the lambda:InvokeFunction action (Service: AWSLambdaInternal; Status Code: 403;
Error Code: AccessDeniedException; Request ID: 6635c4c4-9c54-416e-bc40-ef25bad0aca5; Proxy: null)",
                    "DataType": "String"
                },

관련 정보

Amazon EventBridge 문제 해결

Lambda 함수가 EventBridge 규칙에 따라 트리거되지 않은 이유는 무엇입니까?

EventBridge Scheduler 오류를 해결하려면 어떻게 해야 합니까?

Dead Letter Queue(DLQ)를 사용하여 EventBridge에서 전달되지 않은 이벤트 처리

AWS 공식업데이트됨 8달 전