생성한 Amazon EventBridge 규칙이 AWS Lambda 함수를 호출하지 않는 문제를 해결하고 싶습니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
Amazon CloudWatch 지표에서 EventBridge 규칙 검토
다음 단계를 완료합니다.
- CloudWatch 콘솔을 엽니다.
- 탐색 창의 지표에서 모든 지표를 선택합니다.
- AWS/Events 네임스페이스를 선택합니다.
- 규칙에 대해 TriggeredRules, Invocations, FailedInvocations 지표를 선택합니다. 필요한 경우 SUM 통계를 통해 이 지표를 확인합니다.
참고: 지표에 FailedInvocations 데이터 포인트가 포함되어 있으면 규칙이 대상 간접 호출에 실패한 것일 수 있습니다. 자세한 내용은 EventBridge 지표를 참조하십시오.
Lambda 함수 리소스 정책에 적절한 권한이 있는지 확인
EventBridge 콘솔을 사용해 규칙을 생성하면 콘솔이 함수 리소스 기반 정책에 자동으로 적절한 권한을 추가합니다. AWS CLI, AWS SDK, AWS CloudFormation을 사용해 규칙을 생성할 때는 리소스 기반 정책에서 권한을 수동으로 적용해야 합니다. 권한을 부여하면 EventBridge 서비스가 Lambda 함수를 간접적으로 호출할 수 있습니다.
대상 Lambda 함수와 관련된 권한 검토
다음 단계를 완료합니다.
- Lambda 콘솔을 엽니다.
- 대상 Lambda 함수를 선택합니다.
- 구성 탭을 선택하고 권한을 선택합니다.
- 리소스 기반 정책 섹션에서 정책 문서를 검토합니다.
참고: 또는 Lambda 함수 리소스 정책을 검색하려면 적절한 입력을 포함해 GetPolicy API나 get-policy AWS CLI 명령을 사용합니다.
다음 리소스 정책 예시에서는 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"
}
참고: Resource를 Lambda 함수 ARN으로, SourceArn을 규칙 ARN으로 바꾸십시오.
리소스 정책 업데이트
다음 단계를 완료합니다.
- Lambda 콘솔을 엽니다.
- 대상 Lambda 함수를 선택합니다.
- 구성 탭을 선택하고 권한을 선택합니다.
- 리소스 기반 정책 섹션에서 권한 추가를 선택합니다.
- AWS 서비스 - EventBridge를 선택합니다.
- 정책 설명에 사용할 수 있는 식별자 옵션으로 문 ID를 입력합니다.
- 보안 주체에 events.amazonaws.com을 사용합니다.
- 소스 ARN에 EventBridge 규칙 ARN을 사용합니다.
- 작업에는 드롭다운 목록에서 lambda:InvokeFunction를 선택합니다.
- 저장을 선택합니다.
정책을 업데이트하기 위해 AddPermission API를 사용할 수도 있습니다. 또는 다음 예시와 비슷하게 add-permission AWS CLI 명령을 실행합니다.
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의 대상에 DLQ 추가
EventBridge에서는 Amazon Simple Queue Service(Amazon SQS)의 Dead Letter Queue(DLQ)를 사용해 대상으로 전송하지 못하 이벤트를 저장합니다. FailedInvocations를 보고하는 대상에 SQS DLQ를 연결합니다. DLQ에서 이벤트를 검색하면 문제에 대한 추가 컨텍스트를 얻을 수 있습니다. 실패한 이벤트를 대상으로 다시 전송하여 처리할 수 있습니다.
다음 단계를 완료합니다.
- EventBridge 콘솔에서 관련 규칙을 엽니다.
- 대상에서 편집을 선택하고 추가 설정 섹션을 확장합니다.
- **DLQ(Dead Letter Queue)**에서 현재 AWS 계정에서 DLQ(Dead Letter Queue)로 사용할 Amazon SQS 대기열 선택을 클릭합니다.
- DLQ로 사용할 SQS 대기열을 선택합니다.
- DLQ를 할당한 후 변경 사항을 검토 및 저장합니다.
관련 정보
규칙이 실행되었지만 Lambda 함수가 호출되지 않았음
AWS Lambda 권한
Dead Letter Queue(DLQ)를 사용하여 EventBridge에서 전달되지 않은 이벤트를 처리
Amazon EventBridge의 장애 복구 개선