

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon EventBridge 문제 해결
<a name="eb-troubleshooting"></a>

이 섹션의 주제를 사용하여 Amazon EventBridge 문제를 해결할 수 있습니다.

**작은 정보**  
이벤트 패턴이 예상 이벤트와 일치하는지 확인하려면 EventBridge 샌드박스를 사용하여 샘플 이벤트에 대해 이벤트 패턴을 테스트할 수 있습니다. 자세한 내용은 [EventBridge 샌드박스를 사용한 이벤트 패턴 테스트](eb-event-pattern-sandbox.md) 단원을 참조하십시오.

**Topics**
+ [규칙이 실행되었지만 Lambda 함수가 간접 호출되지 않음](#eb-lam-function-not-invoked)
+ [방금 규칙을 생성 또는 수정했지만, 테스트 이벤트와 일치하지 않음](#eb-rule-does-not-match)
+ [`ScheduleExpression`에 지정한 시간에 내 규칙이 실행되지 않음](#eb-rule-did-not-trigger)
+ [내 규칙이 예상된 시간에 실행되지 않음](#eb-rule-did-not-trigger-on-time)
+ [규칙이 AWS 글로벌 서비스 API 호출과 일치하지만 실행되지 않음](#eb-rule-did-not-trigger-iam)
+ [규칙이 실행될 때 내 규칙과 연관된 IAM 역할이 무시됨](#eb-iam-role-ignored)
+ [내 규칙에는 리소스와 일치해야 하는 이벤트 패턴이 있지만 일치하는 이벤트가 없음](#eb-events-do-not-match-rule)
+ [내 이벤트를 대상에 전달할 때 지연됨](#eb-delayed-event-delivery)
+ [일부 이벤트가 내 대상으로 전달되지 않음](#eb-never-delivered-to-target)
+ [한 개의 이벤트에 응답하기 위해 내 규칙이 한 번 이상 실행됨](#eb-rule-triggered-more-than-once)
+ [무한 루프 방지](#eb-prevent-infinite-loops)
+ [내 이벤트가 대상 Amazon SQS 대기열에 전달되지 않음](#eb-sqs-encrypted)
+ [내 규칙이 실행되지만 내 Amazon SNS 주제에 어떤 메시지도 게시되지 않음](#eb-no-messages-published-sns)
+ [Amazon SNS 주제와 연관된 규칙을 삭제했는데도 내 Amazon SNS 주제가 여전히 EventBridge에 대한 권한을 가지고 있음](#eb-sns-permissions-persist)
+ [EventBridge와 함께 사용할 수 있는 IAM 조건 키](#eb-supported-access-policies)
+ [EventBridge 규칙 위반 시 이를 알아챌 수 있는 방법](#eb-create-alarm-broken-event-rules)

## 규칙이 실행되었지만 Lambda 함수가 간접 호출되지 않음
<a name="eb-lam-function-not-invoked"></a>

Lambda 함수가 실행되지 않는 한 가지 이유는 적절한 권한이 없는 경우입니다.

**Lambda 함수에 대한 권한을 확인하려면**

1. 를 사용하여 함수 및 리전에서 다음 명령을 AWS CLI실행합니다. AWS 

   ```
   aws lambda get-policy --function-name MyFunction --region us-east-1
   ```

   다음과 같이 출력되어야 합니다.

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
   {
   "Condition": {
   "ArnLike": {
   "AWS:SourceArn": "arn:aws:events:us-east-1:123456789012:rule/rule-name"
   }
   },
   "Action": "lambda:InvokeFunction",
   "Resource": "arn:aws:lambda:us-east-1:123456789012:function:function-name",
   "Effect": "Allow",
   "Principal": {
   "Service": "events.amazonaws.com"
   },
   "Sid": "MyId"
   }
   ],
   "Id": "default"
   }
   ```

------

1. 다음과 같은 메시지가 나타나는 경우

   ```
   A client error (ResourceNotFoundException) occurred when calling the GetPolicy operation: The resource you requested does not exist.
   ```

   또는 이러한 출력 화면은 나타났지만 정책에서 신뢰할 수 있는 개체로서 events.amazonaws.com의 위치를 찾을 수 없는 경우에는 다음 명령을 실행합니다.

   ```
   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
   ```

1. 출력에 `SourceAccount` 필드가 포함되어 있으면 이를 제거해야 합니다. `SourceAccount` 설정으로 인해 EventBridge가 함수를 간접 호출할 수 없습니다.

**참고**  
정책이 올바르지 않은 경우에는 이를 제거하거나 규칙에 다시 추가하는 등 EventBridge 콘솔에서 [규칙](eb-rules.md)을 편집할 수 있습니다. 그러면 EventBridge 콘솔이 [대상](eb-targets.md)에 올바른 권한을 설정합니다.  
특정한 Lambda 별칭 또는 버전을 사용하고 있는 경우 다음 명령과 같이 `aws lambda get-policy` 및 `aws lambda add-permission` 명령에 `--qualifier` 파라미터를 추가합니다.  

```
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
--qualifier alias or version
```

## 방금 규칙을 생성 또는 수정했지만, 테스트 이벤트와 일치하지 않음
<a name="eb-rule-does-not-match"></a>

[규칙](eb-rules.md)이나 규칙의 [대상](eb-targets.md)을 변경한다고 수신 [이벤트](eb-events.md)가 즉시 새로운 규칙이나 업데이트된 규칙에 대한 매칭을 시작 또는 중지하지는 않습니다. 변경 사항이 적용될 때까지 잠시 기다리세요.

잠시 후에도 이벤트가 일치하지 않으면 규칙에 대한 CloudWatch 지표 `TriggeredRules`, `Invocations` 및 `FailedInvocations`를 확인합니다. 이러한 지표에 대한 자세한 내용은 [Amazon EventBridge 모니터링](eb-monitoring.md)을 참조하세요.

규칙이 AWS 서비스의 이벤트와 일치하도록 의도된 경우 다음 중 하나를 수행합니다.
+ `TestEventPattern` 작업을 사용하여 규칙의 이벤트 패턴이 테스트 이벤트와 일치하는지 테스트합니다. 자세한 내용은 *Amazon EventBridge API 참조*의 [TestEventPattern](https://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_TestEventPattern.html)을 참조하세요.
+ [EventBridge 콘솔](https://console.aws.amazon.com/events)의 **샌드박스**를 사용합니다.

## `ScheduleExpression`에 지정한 시간에 내 규칙이 실행되지 않음
<a name="eb-rule-did-not-trigger"></a>

UTC\$10 시간대에 [규칙](eb-rules.md)이 예약이 되어 있는지 확인합니다. `ScheduleExpression`이 올바르면 [방금 규칙을 생성 또는 수정했지만, 테스트 이벤트와 일치하지 않음](#eb-rule-does-not-match)의 단계를 따릅니다.

## 내 규칙이 예상된 시간에 실행되지 않음
<a name="eb-rule-did-not-trigger-on-time"></a>

EventBridge는 사용자가 설정한 시작 시간으로부터 1분 이내에 [규칙](eb-rules.md)을 실행합니다. 규칙이 생성되는 즉시 런타임에 대한 카운트다운이 시작됩니다.

**참고**  
예약된 규칙의 전송 유형은 `guaranteed`입니다. 즉, 예상 시간마다 이벤트가 한 번 이상 트리거됩니다.

cron 표현식을 사용하여 지정된 시간에 [대상](eb-targets.md)을 간접 호출할 수 있습니다. 4시간마다 0분에 실행되는 규칙을 만들려면 다음 중 하나를 수행합니다.
+ EventBridge 콘솔에서는 cron 표현식 `0 0/4 * * ? *`를 사용합니다.
+ 를 사용하여 표현식를 AWS CLI사용합니다`cron(0 0/4 * * ? *)`.

예를 들어를 사용하여 4시간마다 `TestRule` 실행되는 라는 규칙을 생성하려면 다음 명령을 AWS CLI사용합니다.

```
aws events put-rule --name TestRule --schedule-expression 'cron(0 0/4 * * ? *)'
```

5분마다 규칙을 실행하려면 다음 cron 표현식을 사용합니다.

```
aws events put-rule --name TestRule --schedule-expression 'cron(0/5 * * * ? *)'
```

cron 표현식을 사용하는 EventBridge 규칙을 가장 정밀하게 설정할 수 있는 단위는 1분입니다. 예약된 규칙은 지정한 시간(분) 이내에 실행되지만 정확한 초 단위로 실행되지는 않습니다.

EventBridge와 대상 서비스는 분산되기 때문에 예약된 규칙이 실행되는 시간과 대상 서비스가 대상 리소스에서 작업을 수행하는 시간 사이에 몇 초의 지연이 있을 수 있습니다.

## 규칙이 AWS 글로벌 서비스 API 호출과 일치하지만 실행되지 않음
<a name="eb-rule-did-not-trigger-iam"></a>

AWS IAM 및 Amazon Route 53과 같은 글로벌 서비스는 미국 동부(버지니아 북부) 리전에서만 사용할 수 있으므로 글로벌 서비스의 AWS API 호출 이벤트는 해당 리전에서만 사용할 수 있습니다. 자세한 내용은 [AWS 서비스의 이벤트](eb-events.md#eb-service-event) 단원을 참조하십시오.

## 규칙이 실행될 때 내 규칙과 연관된 IAM 역할이 무시됨
<a name="eb-iam-role-ignored"></a>

EventBridge는 [이벤트](eb-events.md)를 Kinesis 스트림으로 보내는 [규칙](eb-rules.md)에만 IAM 역할을 사용합니다. Lambda 함수 또는 Amazon SNS 주제를 간접 호출하는 규칙에 대해 [리소스 기반 권한](eb-use-resource-based.md)을 제공해야 합니다.

제공한 IAM 역할을 수임할 때 EventBridge가 사용할 수 있도록 리전 AWS STS 엔드포인트가 활성화되어 있는지 확인합니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 리전 AWS STS 에서 활성화 및 비활성화](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)를 참조하세요.

## 내 규칙에는 리소스와 일치해야 하는 이벤트 패턴이 있지만 일치하는 이벤트가 없음
<a name="eb-events-do-not-match-rule"></a>

의 대부분의 서비스는 Amazon 리소스 이름(ARNs)에서 콜론(:) 또는 슬래시(/)를 동일한 문자로 AWS 취급하지만 EventBridge는 [이벤트 패턴](eb-event-patterns.md) 및 [규칙](eb-rules.md)에서 정확한 일치를 사용합니다. 따라서 이벤트 패턴을 만들 때 일치시킬 [이벤트](eb-events.md)에서 ARN 구문과 일치하도록 정확한 ARN 문자를 사용해야 합니다.

CloudTrail의 AWS API 호출 이벤트와 같은 일부 이벤트는 리소스 필드에 아무것도 없습니다.

## 내 이벤트를 대상에 전달할 때 지연됨
<a name="eb-delayed-event-delivery"></a>

대상 리소스가 제한되는 시나리오를 제외하고 EventBridge에서는 최대 24시간 동안 [이벤트](eb-events.md)를 [대상](eb-targets.md)에 전달하려고 합니다. 이벤트가 이벤트 스트림에 도착하는 즉시 첫 번째 시도가 이루어집니다. 대상 서비스에 문제가 있는 경우에는 EventBridge가 또 다른 전달 일정을 자동으로 예약합니다. 이벤트가 도착한 후 24시간이 지나면 EventBridge는 이벤트 전달 시도를 중단하고 CloudWatch에 `FailedInvocations` 지표를 게시합니다. 대상에 성공적으로 전달하지 못한 이벤트를 저장하려면 DLQ를 설정하는 것이 좋습니다. 자세한 내용은 [Dead Letter Queue(DLQ)를 사용하여 EventBridge에서 배달되지 않은 이벤트 처리](eb-rule-dlq.md) 섹션을 참조하세요.

## 일부 이벤트가 내 대상으로 전달되지 않음
<a name="eb-never-delivered-to-target"></a>

EventBridge [규칙](eb-rules.md)의 [대상](eb-targets.md)이 장기간 제한되는 경우 EventBridge는 전달을 재시도하지 않을 수 있습니다. 예를 들어 대상이 수신 [이벤트](eb-events.md) 트래픽을 처리하도록 프로비저닝되어 있지 않으며 대상 서비스가 EventBridge에서 사용자를 대신하여 수행하는 요청을 제한하는 경우, EventBridge는 전달을 재시도하지 않을 수 있습니다.

## 한 개의 이벤트에 응답하기 위해 내 규칙이 한 번 이상 실행됨
<a name="eb-rule-triggered-more-than-once"></a>

드문 경우이지만, 단일 [이벤트](eb-events.md) 또는 예약된 시간에서 동일한 [규칙](eb-rules.md)을 한 번 이상 실행하거나 트리거된 특정 규칙에서 동일한 [대상](eb-targets.md)을 한 번 이상 간접 호출할 수 있습니다.

## 무한 루프 방지
<a name="eb-prevent-infinite-loops"></a>

EventBridge에서는 규칙이 반복 실행되는 무한 루프로 이어지는 [규칙](eb-rules.md)을 생성할 수 있습니다. 무한 루프를 유발하는 규칙이 있는 경우 규칙을 수행하는 작업이 동일한 규칙과 일치하지 않도록 규칙을 다시 작성하세요.

예를 들어 Amazon S3 버킷에서 ACL이 변경되었음을 감지한 다음, 소프트웨어를 실행하여 ACL을 새 상태로 변경하는 규칙은 무한 루프를 유발합니다. 이 문제를 해결하는 한 가지 방법은 잘못된 상태에 있는 ACL과만 일치하도록 규칙을 다시 작성하는 것입니다.

무한 루프는 예상보다 높은 요금을 빠르게 야기할 수 있습니다. 따라서 요금이 지정한 한도를 초과할 경우 이를 알려줄 수 있는 예산 관리를 사용하는 것이 좋습니다. 자세한 내용은 [예산을 통해 비용 관리](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/budgets-managing-costs.html) 단원을 참조하세요.

## 내 이벤트가 대상 Amazon SQS 대기열에 전달되지 않음
<a name="eb-sqs-encrypted"></a>

Amazon SQS 대기열이 암호화된 경우 고객 관리형 KMS 키를 생성하고 KMS 키 정책에 다음 권한 섹션을 포함해야 합니다. 자세한 내용은 [AWS KMS 권한 구성을](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#sqs-what-permissions-for-sse) 참조하세요.

```
{
  "Sid": "Allow EventBridge to use the key",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Resource": "*"
}
```

## 내 규칙이 실행되지만 내 Amazon SNS 주제에 어떤 메시지도 게시되지 않음
<a name="eb-no-messages-published-sns"></a>

**시나리오 1**

Amazon SNS 주제에 메시지를 게시하려면 권한이 필요합니다. 를 사용하여 다음 명령을 사용하고, us-east-1을 리전으로 바꾸고 AWS CLI, 주제 ARN을 사용합니다.

```
aws sns get-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic"
```

올바른 권한을 사용하려면 정책 속성이 다음과 유사해야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_policy_ID",
    "Statement": [
    {
    "Sid": "__default_statement_ID",
    "Effect": "Allow",
    "Principal": {
    "AWS": "*"
    },
    "Action": [
    "SNS:Subscribe",
    "SNS:ListSubscriptionsByTopic",
    "SNS:DeleteTopic",
    "SNS:GetTopicAttributes",
    "SNS:Publish",
    "SNS:RemovePermission",
    "SNS:AddPermission",
    "SNS:SetTopicAttributes"
    ],
    "Resource": "arn:aws:sns:us-east-1:123456789012:MyTopic",
    "Condition": {
    "StringEquals": {
    "AWS:SourceOwner": "123456789012"
    }
    }
    },
    {
    "Sid": "Allow_Publish_Events",
    "Effect": "Allow",
    "Principal": {
    "Service": "events.amazonaws.com"
    },
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:us-east-1:123456789012:MyTopic"
    }
    ]
    }
```

------

정책에 `Publish` 권한이 있는 `events.amazonaws.com`이 표시되지 않는 경우 먼저 현재 정책을 복사하고 다음 문을 명령문 목록에 추가하세요.

```
{\"Sid\":\"Allow_Publish_Events\",
\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},
\"Action\":\"sns:Publish\",
\"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}
```

그런 다음를 사용하여 주제 속성을 설정하고 다음 명령을 AWS CLI사용합니다.

```
aws sns set-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic" --attribute-name Policy --attribute-value NEW_POLICY_STRING
```

**참고**  
정책이 올바르지 않은 경우에는 이를 제거하거나 규칙에 다시 추가하는 등 EventBridge 콘솔에서 [규칙](eb-rules.md)을 편집할 수도 있습니다. EventBridge가 [대상](eb-targets.md)에 올바른 권한을 설정합니다.

**시나리오 2**

SNS 주제가 암호화된 경우 KMS 키 정책에 다음 섹션을 포함해야 합니다.

```
{
  "Sid": "Allow EventBridge to use the key",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Resource": "*"
}
```

## Amazon SNS 주제와 연관된 규칙을 삭제했는데도 내 Amazon SNS 주제가 여전히 EventBridge에 대한 권한을 가지고 있음
<a name="eb-sns-permissions-persist"></a>

Amazon SNS를 [대상](eb-targets.md)으로 하는 [규칙](eb-rules.md)을 생성하면 EventBridge가 사용자를 대신해 Amazon SNS 주제에 권한을 추가합니다. 규칙을 생성하고 조금 후에 규칙을 삭제한 경우에는 EventBridge가 Amazon SNS 주제에서 권한을 제거하지 못할 수 있습니다. 이 경우 `aws sns set-topic-attributes` 명령을 사용하여 주제에서 권한을 제거할 수 있습니다. 이벤트 전송을 위한 리소스 기반 권한에 대한 자세한 내용은 [Amazon EventBridge에 리소스 기반 정책 사용](eb-use-resource-based.md) 섹션을 참조하세요.

## EventBridge와 함께 사용할 수 있는 IAM 조건 키
<a name="eb-supported-access-policies"></a>

EventBridge는 AWS전체 조건 키([IAM 사용 설명서의 IAM 및 AWS STS 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html) 참조)와에 나열된 키를 지원합니다[Amazon EventBridge에서 IAM 정책 조건 사용](eb-use-conditions.md). ** 

## EventBridge 규칙 위반 시 이를 알아챌 수 있는 방법
<a name="eb-create-alarm-broken-event-rules"></a>

다음 경보를 사용하여 EventBridge [규칙](eb-rules.md) 위반 시 이를 알릴 수 있습니다.

**규칙 위반 시 이를 알리기 위해 경보를 생성하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. **경보 생성**을 선택합니다. **범주별 CloudWatch 지표** 창에서 **이벤트 지표**를 선택합니다.

1. 지표 목록에서 **FailedInvocations**를 선택합니다.

1. 그래프 위에서 **통계**, **합계**를 선택합니다.

1. **기간**으로 **5분** 등의 값을 선택합니다. **다음**을 선택합니다.

1. **경보 임계값** 아래에서 **이름**에 **myFailedRules** 등 고유한 경보 이름을 입력합니다. **설명**에는 **규칙이 대상에 이벤트를 전달하지 않음** 등의 경보 설명을 입력합니다.

1. **조건**에 대해 **>=** 및 **1**을 선택합니다. **기간**에는 **10**을 입력합니다.

1. **작업**의 **이 경보가 발생할 경우 항상**에서 **상태가 ALARM입니다**를 선택합니다.

1. **알림 보내기**에 대해 기존 Amazon SNS 주제를 선택하거나 새로 만듭니다. 주제를 새로 생성하려면 **새 목록**을 선택합니다. 새 Amazon SNS 주제의 이름**(예: myFailedRules)**을 입력합니다.

1. **이메일 목록**에서, 경보가 **ALARM** 상태로 변경될 때 알림을 보낼 이메일 주소 목록을 쉼표로 구분하여 입력합니다.

1. **경보 생성**을 선택합니다.