Lambda 함수에서 EventBridge 규칙을 트리거하지 않는 이유는 무엇인가요?

최종 업데이트 날짜: 2022년 2월 15일

AWS Command Line Interface(AWS CLI), API 또는 AWS CloudFormation을 사용하여 Amazon EventBridge 규칙을 생성했습니다. 하지만 대상 AWS Lambda 함수가 호출되지 않습니다. AWS 관리 콘솔을 통해 동일한 EventBridge 규칙을 생성하거나 업데이트하면 규칙이 올바르게 작동합니다. 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

EventBridge 콘솔을 사용하여 Lambda 함수를 대상으로 하는 EventBridge 규칙을 생성할 때는 적절한 권한이 함수의 리소스 정책에 자동으로 추가됩니다. 하지만 AWS CLI, SDK 또는 AWS CloudFormation을 통해 동일한 규칙을 생성한 경우에는 리소스 정책에서 권한을 수동으로 적용해야 합니다. 권한은 Amazon EventBridge 서비스에 Lambda 함수를 호출할 수 있는 액세스 권한을 부여합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

EventBridge 규칙에 대한 CloudWatch 지표 검토

  1. CloudWatch 콘솔을 엽니다.
  2. 왼쪽 탐색 창의 지표(Metrics) 아래에서 모든 지표(All Metrics)를 선택합니다.
  3. AWS/이벤트(AWS/Events) 네임스페이스를 선택합니다.
  4. 검토 중인 규칙에 대해 InvocationsFailedInvocations 지표를 선택합니다.

Invocations 데이터 포인트는 규칙에 의해 대상이 호출되었음을 나타냅니다. FailedInvocations 데이터 포인트가 있으면 대상을 호출하는 데 문제가 있는 것입니다. FailedInvocations는 영구적인 실패를 나타내며 잘못된 권한 또는 대상의 잘못된 구성으로 인해 발생할 수 있습니다.

Lambda 함수 리소스 정책에서 적절한 권한 확인

  1. AWS Lambda 콘솔을 엽니다.
  2. 대상 함수를 선택합니다.
  3. 구성(Configuration) 탭을 선택한 다음 권한(Permissions)을 선택합니다.
  4. 리소스 기반 정책(Resource-based policy) 섹션에서 정책 문서를 검토합니다.

다음은 EventBridge가 Lambda 함수를 호출하도록 허용하는 샘플 리소스 정책입니다.

{
  "Effect": "Allow",
  "Action": "lambda:InvokeFunction",
  "Resource": "arn:aws:lambda:region:account-id:function:function-name",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Condition": {
    "ArnLike": {
      "AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
    }
  },
  "Sid": "InvokeLambdaFunction"
}

참고: 배포하기 전에 ARN을 적절한 리전, 계정 ID 및 리소스 이름으로 교체하세요.

또는 GetPolicy API를 사용하여 Lambda 함수의 리소스 정책을 검색할 수 있습니다.

기존 리소스 정책에 필요한 권한이 없는 경우 이전 단계를 참조하여 정책을 업데이트합니다. AWS CLI에서 AddPermission 명령을 사용하여 정책을 업데이트할 수도 있습니다. 다음은 AddPermission 명령의 예입니다.

aws lambda add-permission \
--function-name MyFunction \
--statement-id MyId \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule

대상에 Amazon SQS 배달 못한 편지 대기열 추가

EventBridge는 Amazon Simple Queue Service(Amazon SQS) DLQ를 사용하여 대상으로 전달할 수 없는 이벤트를 저장합니다. FailedInvocations를 보고하는 대상에 SQS DLQ를 연결할 수 있습니다. DLQ에서 이벤트를 검색하고 분석하여 문제에 대한 자세한 컨텍스트를 얻을 수 있습니다. 수정이 완료된 후, 이전에 실패한 이벤트를 대상에 다시 전송하여 처리할 수 있습니다.

  1. EventBridge 콘솔에서 관련 규칙을 엽니다.
  2. 대상 선택(Select targets)에서 정책 및 배달 못한 편지 대기열 재시도(Retry policy and dead-letter queue)를 선택합니다.
  3. DLQ로 사용할 SQS 대기열 선택