

지원 종료 알림: 2026년 5월 20일에 AWS 에 대한 지원이 종료됩니다 AWS IoT Events. 2026년 5월 20일 이후에는 AWS IoT Events 콘솔 또는 AWS IoT Events 리소스에 더 이상 액세스할 수 없습니다. 자세한 내용은 [AWS IoT Events 지원 종료를 참조하세요](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html).

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

# 에서 경보를 사용한 모니터링 AWS IoT Events
<a name="iotevents-alarms"></a>

AWS IoT Events 경보는 데이터에 변경 사항이 있는지 모니터링하는 데 도움이 됩니다. 데이터는 디바이스 및 프로세스를 측정하는 지표가 될 수 있습니다. 임계값 위반 시 알림을 보내는 경보를 생성할 수 있습니다. 경보를 사용하면 문제를 감지하고, 유지보수를 간소화하고, 디바이스와 프로세스의 성능을 최적화할 수 있습니다.

경보는 경보 모델의 인스턴스입니다. 경보 모델은 감지할 대상, 전송 시기, 수신자 등을 지정합니다. 경보 상태가 변경될 때 발생하는 [지원되는 작업을](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-supported-actions.html) 하나 이상 지정할 수도 있습니다.는 데이터에서 파생된 [입력 속성을](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-detector-input.html) 적절한 경보로 AWS IoT Events 라우팅합니다. 모니터링 중인 데이터가 지정된 범위를 벗어나면 경보가 호출됩니다. 경보를 확인하거나 스누즈 모드로 설정할 수도 있습니다.

## 작업 AWS IoT SiteWise
<a name="alarms-collaborations.title"></a>

 AWS IoT Events 경보를 사용하여의 자산 속성을 모니터링할 수 있습니다 AWS IoT SiteWise.는 자산 속성 값을 AWS IoT Events 경보로 AWS IoT SiteWise 전송합니다.는 경보 상태를 로 AWS IoT Events 전송합니다 AWS IoT SiteWise.

AWS IoT SiteWise 는 외부 경보도 지원합니다. 외부에서 경보를 사용하고 경보 상태 데이터를 반환하는 솔루션이 AWS IoT SiteWise 있는 경우 외부 경보를 선택할 수 있습니다. 외부 경보에는 경보 상태 데이터를 수집하는 측정 속성이 포함되어 있습니다.

AWS IoT SiteWise 는 외부 경보의 상태를 평가하지 않습니다. 또한 경보 상태가 변경될 때는 외부 경보를 승인하거나 일시 중지할 수 없습니다.

SiteWise 모니터 기능을 사용하여 SiteWise 모니터 포털에서 외부 경보의 상태를 볼 수 있습니다.

자세한 내용은 *AWS IoT SiteWise 사용 설명서*의 [경보를 통한 데이터 모니터링](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/industrial-alarms.html) 및 *SiteWise Monitor 응용 프로그램 안내서*의 [경보를 통한 모니터링](https://docs.aws.amazon.com//iot-sitewise/latest/appguide/monitor-alarms.html)을 참조하십시오.

## 승인 이동
<a name="acknowledge-flow"></a>

경보 모델을 만들 때 승인 이동의 활성화 여부를 선택합니다. 승인 이동을 활성화하면 경보 상태가 변경될 때 팀에 알림을 받습니다. 팀에서 경보를 확인하고 메모를 남길 수 있습니다. 예를 들어 경보 정보와 문제 해결을 위해 취할 조치를 포함할 수 있습니다. 모니터링 중인 데이터가 지정된 범위를 벗어나면 경보가 호출됩니다.

경보의 상태는 다음과 같습니다.

`DISABLED`  
경보가 `DISABLED` 상태에 있으면 데이터를 평가할 준비가 되지 않은 것입니다. 경보를 활성화하려면 경보를 `NORMAL` 상태로 변경해야 합니다.

`NORMAL`  
경보가 `NORMAL` 상태에 있으면 데이터를 평가할 준비가 된 것입니다.

`ACTIVE`  
경보가 `ACTIVE` 상태에 있는 경우 경보가 호출됩니다. 모니터링 중인 데이터가 지정된 범위를 벗어났습니다.

`ACKNOWLEDGED`  
경보가 `ACKNOWLEDGED` 상태에 있으면 경보가 호출되고 사용자가 경보를 확인한 것입니다.

`LATCHED`  
경보가 호출되었지만 일정 시간이 지나도 경보를 확인하지 못했습니다. 경보는 자동으로 `NORMAL` 상태로 변경됩니다.

`SNOOZE_DISABLED`  
경보가 `SNOOZE_DISABLED` 상태에 있으면 지정된 기간 동안 알람이 비활성화됩니다. 스누즈 시간이 지나면 경보가 자동으로 `NORMAL` 상태로 바뀝니다.

# 에서 경보 모델 생성 AWS IoT Events
<a name="create-alarm-model"></a>

 AWS IoT Events 경보를 사용하여 데이터를 모니터링하고 임계값 위반 시 알림을 받을 수 있습니다. 경보는 경보 모델을 만들거나 구성하는 데 사용하는 파라미터를 제공합니다. AWS IoT Events 콘솔 또는 AWS IoT Events API를 사용하여 경보 모델을 생성하거나 구성할 수 있습니다. 경보 모델을 구성하면 새 데이터가 도착할 때 변경 사항이 적용됩니다.

## 요구 사항
<a name="create-alarm-model-requirements"></a>

경보 모델을 생성할 때는 다음 요구 사항이 적용됩니다.
+ 경보 모델을 생성하여의 입력 속성 AWS IoT Events 또는의 자산 속성을 모니터링할 수 있습니다 AWS IoT SiteWise.
  + 경보 모델을 생성하기 AWS IoT Events[에서 모델에 대한 입력 생성 AWS IoT Events](create-input-overview.md) 전에에서 입력 속성을 모니터링하도록 선택한 경우
  + 자산 속성을 모니터링하도록 선택한 경우 경보 [모델을 생성하기 전에에서 자산](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-asset-models.html) 모델을 생성해야 합니다. AWS IoT SiteWise 
+ 경보가 작업을 수행하고 AWS 리소스에 액세스할 수 있도록 허용하는 IAM 역할이 있어야 합니다. 자세한 내용은 [AWS IoT Events에 권한 설정](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-start.html)을 참조하십시오.
+ 이 자습서에서 사용하는 모든 AWS 리소스는 동일한 AWS 리전에 있어야 합니다.

## 경보 모델 만들기(콘솔)
<a name="create-alarm-model-console"></a>

다음은 AWS IoT Events 콘솔에서 AWS IoT Events 속성을 모니터링하기 위해 경보 모델을 생성하는 방법을 보여줍니다.

1. [AWS IoT Events 콘솔](https://console.aws.amazon.com/iotevents/)에 로그인합니다.

1. 탐색 창에서 **경보 모델**을 선택합니다.

1. **경보 모델** 페이지에서 **경보 모델 생성**을 선택합니다.

1. **경보 모델 세부 정보** 섹션에서 다음을 수행합니다.

   1. 고유한 이름을 입력합니다.

   1. (선택 사항) 설명을 입력합니다.

1. **경보 대상** 섹션에서 다음을 수행합니다.
**중요**  
**AWS IoT SiteWise 자산 속성**을 선택한 경우 AWS IoT SiteWise에서 자산 모델을 생성해야 합니다.

   1. **AWS IoT Events 입력 속성**을 선택합니다.

   1. 입력을 선택합니다.

   1. 입력 속성 키를 선택합니다. 이 입력 속성은이 키와 연결된 입력을 경보로 AWS IoT Events 라우팅하는 경보를 생성하는 키로 사용됩니다.
**중요**  
입력 메시지 페이로드에 이 입력 속성 키가 없거나 키에 지정된 동일한 JSON 경로에 키가 있지 않은 경우 메시지를 AWS IoT Events에서 수집할 수 없습니다.

1. **임계값 정의** 섹션에서가 경보 상태를 변경하는 데 AWS IoT Events 사용하는 입력 속성, 임계값 및 비교 연산자를 정의합니다.

   1. **입력 속성**에서 모니터링하려는 속성을 선택합니다.

      이 입력 속성이 새 데이터를 수신할 때마다 해당 입력 속성을 평가하여 경보 상태를 확인합니다.

   1. **연산자**에서 비교 연산자를 선택합니다. 연산자는 입력 속성을 속성의 임계값과 비교합니다.

      다음 옵션 중에서 선택할 수 있습니다.
      + **> 보다 큼**
      + **>= 보다 크거나 같은**
      + **< 보다 작음**
      + **<= 보다 작거나 같은**
      + **= 같음**
      + **\$1= 같지 않음**

   1. 임계값에 숫자를 ****입력하거나 AWS IoT Events input에서 속성을 선택합니다.는이 값을 선택한 입력 속성의 값과 AWS IoT Events 비교합니다.

   1. (선택 사항) **심각도**에는 이 경보의 심각도를 반영하기 위해 팀에서 이해할 수 있는 숫자를 사용하십시오.

1. (선택 사항) **알림 설정** 섹션에서 경보에 대한 알림 설정을 구성합니다.

   최대 10개의 알림을 추가할 수 있습니다. **알림 1**에서 다음을 수행합니다.

   1. **프로토콜**에서 다음 옵션 중에 선택합니다.
      + **이메일 및 문자** - SMS 알림과 이메일 알림으로 경보를 보냅니다.
      + **이메일** - 이메일 알림으로 경보를 보냅니다.
      + **텍스트** - SMS 알림으로 경보를 보냅니다.

   1. **발신자**에서 이 경보에 대한 알림을 보낼 수 있는 이메일 주소를 지정합니다.

      발신자 목록에 이메일 주소를 더 추가하려면 **발신자 추가**를 선택합니다.

   1. (선택 사항) **수신자**에서 수신자를 선택합니다.

      수신자 목록에 사용자를 더 추가하려면 **새 사용자 추가**를 선택합니다. 경보 모델에 새 사용자를 추가하려면 먼저 IAM Identity Center 스토어에 새 사용자를 추가해야 합니다. 자세한 내용은 [에서 경보 수신자의 IAM Identity Center 액세스 관리 AWS IoT Events](sso-authorization-recipients.md) 섹션을 참조하십시오.

   1. (선택 사항) **추가 사용자 지정 메시지**에서 경보가 탐지한 내용과 수신자가 취해야 하는 조치를 설명하는 메시지를 입력합니다.

1. **인스턴스** 섹션에서 이 경보 모델을 기반으로 생성된 모든 경보 인스턴스를 활성화하거나 비활성화할 수 있습니다.

1. **고급 설정** 섹션에서 다음을 수행합니다.

   1. **승인 이동**의 경우 알림을 활성화하거나 비활성화할 수 있습니다.
      +  **활성화**를 선택한 경우 경보 상태가 변경될 때 알림을 받습니다. 경보 상태가 정상으로 돌아가기 전에 알림을 확인해야 합니다.
      + **비활성화**를 선택한 경우 별도의 조치가 필요하지 않습니다. 측정 값이 설정 범위로 돌아가면 경보가 자동으로 정상 상태로 변경됩니다.

      자세한 내용은 [승인 이동](iotevents-alarms.md#acknowledge-flow) 섹션을 참조하십시오.

   1. **권한**에서 다음 옵션 중 하나를 선택합니다.
      + ** AWS 정책 템플릿에서 새 역할을 생성하고** AWS IoT Events 자동으로 IAM 역할을 생성할 수 있습니다.
      + 이 경보 모델이 작업을 수행하고 다른 AWS 리소스에 액세스할 수 있도록 허용하는 **기존 IAM 역할을 사용할** 수 있습니다.

      자세한 내용은 [AWS IoT Events의 자격 증명 및 액세스 관리](https://docs.aws.amazon.com/iotevents/latest/developerguide/security-iam.html)를 참조하십시오.

   1. **추가 알림 설정**의 경우 AWS Lambda 함수를 편집하여 경보 알림을 관리할 수 있습니다. AWS Lambda 함수에 대해 다음 옵션 중 하나를 선택합니다.
      + **새 AWS Lambda 함수 생성** -에서 새 AWS Lambda 함수를 AWS IoT Events 생성합니다.
      + **기존 AWS Lambda 함수 사용** - AWS Lambda 함수 이름을 선택하여 기존 함수를 AWS Lambda 사용합니다.

      가능한 작업에 대한 자세한 내용은 [AWS IoT Events 다른 AWS 서비스 작업](iotevents-other-aws-services.md)을 참조하십시오.

   1. (선택 사항) **상태 설정 작업**에서 경보 상태가 변경될 때 수행할 AWS IoT Events 작업을 하나 이상 추가할 수 있습니다.

1. (선택 사항) 경보를 관리하기 위해 **태그**를 추가할 수 있습니다. 자세한 내용은 [AWS IoT Events 리소스에 태그 지정](https://docs.aws.amazon.com/iotevents/latest/developerguide/tagging-iotevents.html)을 참조하십시오.

1. **생성(Create)**을 선택합니다.

# 에서 경보에 응답 AWS IoT Events
<a name="respond-to-alarms"></a>

경보에 효과적으로 대응하는 것은를 사용하여 IoT 시스템을 관리하는 데 중요한 측면입니다 AWS IoT Events. 알림 채널 설정, 에스컬레이션 절차 정의, 자동 응답 작업 구현 등 경보를 구성하고 처리하는 다양한 방법을 살펴봅니다. 미묘한 경보 조건을 생성하고, 알림의 우선순위를 지정하고, 다른 AWS 서비스와 통합하여 IoT 애플리케이션을 위한 대응형 경보 관리 시스템을 구축하는 방법을 알아봅니다.

[승인 이동](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-alarms.html#acknowledge-flow)이 활성화되면 경보 상태가 변경될 때 알림을 받습니다. 경보에 대응하려면 경보를 확인, 비활성화, 활성화, 재설정 또는 일시 중지할 수 있습니다.

------
#### [ Console ]

다음은 AWS IoT Events 콘솔에서 경보에 대응하는 방법을 보여줍니다.

1. [AWS IoT Events 콘솔](https://console.aws.amazon.com/iotevents/)에 로그인합니다.

1. 탐색 창에서 **경보 모델**을 선택합니다.

1. 대상 경보 모델을 선택합니다.

1. **경보 목록** 섹션에서 대상 경보를 선택합니다.

1. **작업**에서 다음 옵션 중 하나를 선택할 수 있습니다.
   + **승인** - 경보가 `ACKNOWLEDGED` 상태로 변경됩니다.
   + **비활성화** - 경보가 `DISABLED` 상태로 변경됩니다.
   + **활성화** - 경보가 `NORMAL` 상태로 변경됩니다.
   + **재설정** - 경보가 `NORMAL` 상태로 변경됩니다.
   + **스누즈** 후 다음을 수행하십시오.

     1. **스누즈 길이**를 선택하거나 **사용자 지정 스누즈 길이**를 입력합니다.

     1. **저장**을 선택합니다.

     경보가 `SNOOZE_DISABLED` 상태로 바뀝니다

   이러한 상태에 대한 자세한 내용은 [승인 이동](iotevents-alarms.md#acknowledge-flow)를 참조하십시오.

------
#### [ API ]

하나 이상의 경보에 응답하려면 다음 AWS IoT Events API 작업을 사용할 수 있습니다.
+ [BatchAcknowledgeAlarm](https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchAcknowledgeAlarm.html)
+ [BatchDisableAlarm](https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchDisableAlarm.html)
+ [BatchEnableAlarm](https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchEnableAlarm.html)
+ [BatchResetAlarm](https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchResetAlarm.html)
+ [BatchSnoozeAlarm](https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchSnoozeAlarm.html)

------

# 에서 경보 알림 관리 AWS IoT Events
<a name="lambda-support"></a>

AWS IoT Events 는 Lambda와 통합되어 사용자 지정 이벤트 처리 기능을 제공합니다. 이 섹션에서는 AWS IoT Events 탐지기 모델 내에서 Lambda 함수를 사용하여 복잡한 로직을 실행하고, 외부 서비스와 상호 작용하고, 정교한 이벤트 처리를 구현할 수 있는 방법을 살펴봅니다.

AWS IoT Events 는 Lambda 함수를 사용하여 경보 알림을 관리합니다. 에서 제공하는 Lambda 함수를 사용하거나 새 함수를 AWS IoT Events 생성할 수 있습니다.

**Topics**
+ [에서 Lambda 함수 생성 AWS IoT Events](alarms-create-lambda.md)
+ [에서 제공하는 Lambda 함수 사용 AWS IoT Events](use-alarm-notifications.md)
+ [에서 경보 수신자의 IAM Identity Center 액세스 관리 AWS IoT Events](sso-authorization-recipients.md)

# 에서 Lambda 함수 생성 AWS IoT Events
<a name="alarms-create-lambda"></a>

AWS IoT Events 는 경보가 이메일 및 SMS 알림을 보내고 받을 수 있도록 하는 Lambda 함수를 제공합니다.

## 요구 사항
<a name="alarms-lambda-requirements"></a>

경보용 Lambda 함수를 만들려면 다음 요구 사항이 적용됩니다.
+ 경보가 SMS 알림을 보내는 경우 Amazon SNS가 SMS 메시지를 전송하도록 구성되어 있는지 확인합니다.
  + 자세한 내용은 다음 설명서를 참조하세요.
    + [Amazon Simple Notification Service 개발자 안내서의 Amazon SNS를 사용한 모바일 문자 메시징](https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html) 및 [ Amazon SNS SMS 메시지의 발신 자격 증명](https://docs.aws.amazon.com/sns/latest/dg/channels-sms-originating-identities.html). ** 
    + *AWS SMS 사용 설명서*의 [AWS End User Messaging SMS란 무엇입니까?](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-sms-mms.html) 
+ 경보가 이메일 또는 SMS 알림을 보내는 경우에서 Amazon SES 및 Amazon SNS AWS Lambda 작업을 허용하는 IAM 역할이 있어야 합니다.

  

  예제 정책:

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "ses:GetIdentityVerificationAttributes",
                  "ses:SendEmail",
                  "ses:VerifyEmailIdentity"
              ],
              "Resource": "*"
          },
          {
              "Effect": "Allow",
              "Action": [
                  "sns:Publish",
                  "sns:OptInPhoneNumber",
                  "sns:CheckIfPhoneNumberIsOptedOut",
                  "sms-voice:DescribeOptedOutNumbers"
              ],
              "Resource": "*"
          },
          {
              "Effect": "Deny",
              "Action": "sns:Publish",
              "Resource": "arn:aws:sns:*:*:*"
          },
          {
            "Effect" : "Allow",
            "Action" : [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents"
            ],
            "Resource" : "*"
          }
      ]
  }
  ```

------
+  AWS IoT Events 및 모두에 대해 동일한 AWS 리전을 선택해야 합니다 AWS Lambda. 지원되는 리전은 *Amazon Web Services 일반 참조*의 [AWS IoT Events 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/iot-events.html)과 [AWS Lambda 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/lambda-service.html)을 참조하십시오.

# 를 AWS IoT Events 사용하기 위한 Lambda 함수 배포 CloudFormation
<a name="alarms-create-lambda-cfn"></a>

이 자습서에서는 CloudFormation 템플릿을 사용하여 Lambda 함수를 배포합니다. 이 템플릿은 Lambda 함수가 Amazon SES 및 Amazon SNS와 연동되도록 허용하는 IAM 역할을 자동으로 생성합니다.

다음은 AWS Command Line Interface (AWS CLI)를 사용하여 CloudFormation 스택을 생성하는 방법을 보여줍니다.

1. <a name="install-cli"></a>디바이스의 터미널에서를 실행`aws --version`하여를 설치했는지 확인합니다 AWS CLI. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI최신 버전의 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.

1. <a name="configure-cli"></a>를 실행`aws configure list`하여이 자습서의 모든 AWS 리소스가 있는 AWS 리전 AWS CLI 에서를 구성했는지 확인합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [명령을 사용하여 구성 설정 및 보기](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) 섹션을 참조하세요.

1. CloudFormation 템플릿을 다운로드하십시오, [notificationLambda.template.yaml.zip](samples/notificationLambda.template.yaml.zip).
**참고**  
파일을 다운로드하는 데 문제가 있는 경우 [CloudFormation 템플릿](alarms-create-lambda.md#cfn-template)에서도 템플릿을 사용할 수 있습니다.

1. 콘텐츠의 압축을 풀고 `notificationLambda.template.yaml`로 로컬로 저장합니다.

1. 디바이스에서 터미널을 열고 `notificationLambda.template.yaml` 파일을 다운로드한 디렉터리로 이동합니다.

1. CloudFormation 스택을 생성하려면 다음 명령을 실행합니다.

   ```
   aws cloudformation create-stack --stack-name notificationLambda-stack --template-body file://notificationLambda.template.yaml --capabilities CAPABILITY_IAM
   ```

이 CloudFormation 템플릿을 수정하여 Lambda 함수와 그 동작을 사용자 지정할 수 있습니다.

**참고**  
AWS Lambda 는 함수 오류를 두 번 재시도합니다. 함수가 모든 수신 요청을 처리할 만큼 용량이 충분하지 않은 경우 이벤트는 함수로 전송될 때까지 몇 시간 또는 며칠 동안 대기열에서 대기할 수 있습니다. 성공적으로 처리되지 않은 이벤트를 캡처하도록 함수에 대해 배달 못한 메시지 대기열(DLQ)을 구성할 수 있습니다. 자세한 정보는 *AWS Lambda 개발자 안내서*의 [비동기 호출](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)을 참조하십시오.

CloudFormation 콘솔에서 스택을 생성하거나 구성할 수도 있습니다. 자세한 내용을 알아보려면 *AWS CloudFormation 사용 설명서*의 [스택 작업](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)을 참조하십시오.

# 에 대한 사용자 지정 Lambda 함수 생성 AWS IoT Events
<a name="alarms-create-custom-lambda"></a>

Lambda 함수를 생성하거나 AWS IoT Events에서 제공하는 함수를 수정할 수 있습니다.

사용자 지정 Lambda 함수를 만들려면 다음 요구 사항이 적용됩니다.
+ Lambda 함수가 지정된 작업을 수행하고 AWS 리소스에 액세스할 수 있도록 허용하는 권한을 추가합니다.
+ 에서 제공하는 Lambda 함수를 사용하는 경우 Python 3.7 런타임을 선택해야 AWS IoT Events합니다.

예제 Lambda 함수:

```
import boto3
import json
import logging
import datetime
logger = logging.getLogger()
logger.setLevel(logging.INFO)
ses = boto3.client('ses')
sns = boto3.client('sns')
def check_value(target):
  if target:
    return True
  return False

# Check whether email is verified. Only verified emails are allowed to send emails to or from.
def check_email(email):
  if not check_value(email):
    return False
  result = ses.get_identity_verification_attributes(Identities=[email])
  attr = result['VerificationAttributes']
  if (email not in attr or attr[email]['VerificationStatus'] != 'Success'):
      logging.info('Verification email for {} sent. You must have all the emails verified before sending email.'.format(email))
      ses.verify_email_identity(EmailAddress=email)
      return False
  return True

# Check whether the phone holder has opted out of receiving SMS messages from your account
def check_phone_number(phone_number):
  try:
    result = sns.check_if_phone_number_is_opted_out(phoneNumber=phone_number)
    if (result['isOptedOut']):
        logger.info('phoneNumber {} is not opt in of receiving SMS messages. Phone number must be opt in first.'.format(phone_number))
        return False
    return True
  except Exception as e:
    logging.error('Your phone number {} must be in E.164 format in SSO. Exception thrown: {}'.format(phone_number, e))
    return False

def check_emails(emails):
  result = True
  for email in emails:
      if not check_email(email):
          result = False
  return result

def lambda_handler(event, context):
  logging.info('Received event: ' + json.dumps(event))
  nep = json.loads(event.get('notificationEventPayload'))
  alarm_state = nep['alarmState']
  default_msg = 'Alarm ' + alarm_state['stateName'] + '\n'
  timestamp = datetime.datetime.utcfromtimestamp(float(nep['stateUpdateTime'])/1000).strftime('%Y-%m-%d %H:%M:%S')
  alarm_msg = "{} {} {} at {} UTC ".format(nep['alarmModelName'], nep.get('keyValue', 'Singleton'), alarm_state['stateName'], timestamp)
  default_msg += 'Sev: ' + str(nep['severity']) + '\n'
  if (alarm_state['ruleEvaluation']):
    property = alarm_state['ruleEvaluation']['simpleRule']['inputProperty']
    default_msg += 'Current Value: ' + str(property) + '\n'
    operator = alarm_state['ruleEvaluation']['simpleRule']['operator']
    threshold = alarm_state['ruleEvaluation']['simpleRule']['threshold']
    alarm_msg += '({} {} {})'.format(str(property), operator, str(threshold))
  default_msg += alarm_msg + '\n'

  emails = event.get('emailConfigurations', [])
  logger.info('Start Sending Emails')
  for email in emails:
    from_adr = email.get('from')
    to_adrs = email.get('to', [])
    cc_adrs = email.get('cc', [])
    bcc_adrs = email.get('bcc', [])
    msg = default_msg + '\n' + email.get('additionalMessage', '')
    subject = email.get('subject', alarm_msg)
    fa_ver = check_email(from_adr)
    tas_ver = check_emails(to_adrs)
    ccas_ver = check_emails(cc_adrs)
    bccas_ver = check_emails(bcc_adrs)
    if (fa_ver and tas_ver and ccas_ver and bccas_ver):
      ses.send_email(Source=from_adr,
                     Destination={'ToAddresses': to_adrs, 'CcAddresses': cc_adrs, 'BccAddresses': bcc_adrs},
                     Message={'Subject': {'Data': subject}, 'Body': {'Text': {'Data': msg}}})
      logger.info('Emails have been sent')

  logger.info('Start Sending SNS message to SMS')
  sns_configs = event.get('smsConfigurations', [])
  for sns_config in sns_configs:
    sns_msg = default_msg + '\n' + sns_config.get('additionalMessage', '')
    phone_numbers = sns_config.get('phoneNumbers', [])
    sender_id = sns_config.get('senderId')
    for phone_number in phone_numbers:
        if check_phone_number(phone_number):
          if check_value(sender_id):
            sns.publish(PhoneNumber=phone_number, Message=sns_msg, MessageAttributes={'AWS.SNS.SMS.SenderID':{'DataType': 'String','StringValue': sender_id}})
          else:
            sns.publish(PhoneNumber=phone_number, Message=sns_msg)
          logger.info('SNS messages have been sent')
```

자세한 정보는 * AWS Lambda개발자 설명서*의 [AWS Lambda (이)란 무엇입니까?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)를 참조하십시오.

## CloudFormation 템플릿
<a name="cfn-template"></a>

다음 CloudFormation 템플릿을 사용하여 Lambda 함수를 생성하십시오.

```
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Notification Lambda for Alarm Model'
Resources:
  NotificationLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Path: "/"
      ManagedPolicyArns:
        - 'arn:aws:iam::aws:policy/AWSLambdaExecute'
      Policies:
        - PolicyName: "NotificationLambda"
          PolicyDocument:
            Version: "2012-10-17"		 	 	 
            Statement:
              - Effect: "Allow"
                Action:
                  - "ses:GetIdentityVerificationAttributes"
                  - "ses:SendEmail"
                  - "ses:VerifyEmailIdentity"
                Resource: "*"
              - Effect: "Allow"
                Action:
                  - "sns:Publish"
                  - "sns:OptInPhoneNumber"
                  - "sns:CheckIfPhoneNumberIsOptedOut"
                  - "sms-voice:DescribeOptedOutNumbers"
                Resource: "*"
              - Effect: "Deny"
                Action:
                  - "sns:Publish"
                Resource: "arn:aws:sns:*:*:*"
  NotificationLambdaFunction:              
    Type: AWS::Lambda::Function
    Properties:
      Role: !GetAtt NotificationLambdaRole.Arn
      Runtime: python3.7
      Handler: index.lambda_handler
      Timeout: 300
      MemorySize: 3008
      Code:
        ZipFile: |
          import boto3
          import json
          import logging
          import datetime
          logger = logging.getLogger()
          logger.setLevel(logging.INFO)
          ses = boto3.client('ses')
          sns = boto3.client('sns')
          def check_value(target):
            if target:
              return True
            return False

          # Check whether email is verified. Only verified emails are allowed to send emails to or from.
          def check_email(email):
            if not check_value(email):
              return False
            result = ses.get_identity_verification_attributes(Identities=[email])
            attr = result['VerificationAttributes']
            if (email not in attr or attr[email]['VerificationStatus'] != 'Success'):
                logging.info('Verification email for {} sent. You must have all the emails verified before sending email.'.format(email))
                ses.verify_email_identity(EmailAddress=email)
                return False
            return True

          # Check whether the phone holder has opted out of receiving SMS messages from your account
          def check_phone_number(phone_number):
            try:
              result = sns.check_if_phone_number_is_opted_out(phoneNumber=phone_number)
              if (result['isOptedOut']):
                  logger.info('phoneNumber {} is not opt in of receiving SMS messages. Phone number must be opt in first.'.format(phone_number))
                  return False
              return True
            except Exception as e:
              logging.error('Your phone number {} must be in E.164 format in SSO. Exception thrown: {}'.format(phone_number, e))
              return False

          def check_emails(emails):
            result = True
            for email in emails:
                if not check_email(email):
                    result = False
            return result

          def lambda_handler(event, context):
            logging.info('Received event: ' + json.dumps(event))
            nep = json.loads(event.get('notificationEventPayload'))
            alarm_state = nep['alarmState']
            default_msg = 'Alarm ' + alarm_state['stateName'] + '\n'
            timestamp = datetime.datetime.utcfromtimestamp(float(nep['stateUpdateTime'])/1000).strftime('%Y-%m-%d %H:%M:%S')
            alarm_msg = "{} {} {} at {} UTC ".format(nep['alarmModelName'], nep.get('keyValue', 'Singleton'), alarm_state['stateName'], timestamp)
            default_msg += 'Sev: ' + str(nep['severity']) + '\n'
            if (alarm_state['ruleEvaluation']):
              property = alarm_state['ruleEvaluation']['simpleRule']['inputProperty']
              default_msg += 'Current Value: ' + str(property) + '\n'
              operator = alarm_state['ruleEvaluation']['simpleRule']['operator']
              threshold = alarm_state['ruleEvaluation']['simpleRule']['threshold']
              alarm_msg += '({} {} {})'.format(str(property), operator, str(threshold))
            default_msg += alarm_msg + '\n'

            emails = event.get('emailConfigurations', [])
            logger.info('Start Sending Emails')
            for email in emails:
              from_adr = email.get('from')
              to_adrs = email.get('to', [])
              cc_adrs = email.get('cc', [])
              bcc_adrs = email.get('bcc', [])
              msg = default_msg + '\n' + email.get('additionalMessage', '')
              subject = email.get('subject', alarm_msg)
              fa_ver = check_email(from_adr)
              tas_ver = check_emails(to_adrs)
              ccas_ver = check_emails(cc_adrs)
              bccas_ver = check_emails(bcc_adrs)
              if (fa_ver and tas_ver and ccas_ver and bccas_ver):
                ses.send_email(Source=from_adr,
                               Destination={'ToAddresses': to_adrs, 'CcAddresses': cc_adrs, 'BccAddresses': bcc_adrs},
                               Message={'Subject': {'Data': subject}, 'Body': {'Text': {'Data': msg}}})
                logger.info('Emails have been sent')

            logger.info('Start Sending SNS message to SMS')
            sns_configs = event.get('smsConfigurations', [])
            for sns_config in sns_configs:
              sns_msg = default_msg + '\n' + sns_config.get('additionalMessage', '')
              phone_numbers = sns_config.get('phoneNumbers', [])
              sender_id = sns_config.get('senderId')
              for phone_number in phone_numbers:
                  if check_phone_number(phone_number):
                    if check_value(sender_id):
                      sns.publish(PhoneNumber=phone_number, Message=sns_msg, MessageAttributes={'AWS.SNS.SMS.SenderID':{'DataType': 'String','StringValue': sender_id}})
                    else:
                      sns.publish(PhoneNumber=phone_number, Message=sns_msg)
                    logger.info('SNS messages have been sent')
```

# 에서 제공하는 Lambda 함수 사용 AWS IoT Events
<a name="use-alarm-notifications"></a>

경보 알림을 사용하면에서 제공하는 Lambda 함수 AWS IoT Events 를 사용하여 경보 알림을 관리할 수 있습니다.

 AWS IoT Events 에서 제공하는 Lambda 함수를 사용하여 경보 알림을 관리할 경우 다음 요구 사항이 적용됩니다.
+ Amazon Simple Email Service(Amazon SES)에서 이메일 알림을 보내는 이메일 주소를 확인해야 합니다. 자세한 내용은 **Amazon Simple Email Service 개발자 가이드의 [이메일 주소 자격 증명 확인](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-email-proc)을 참조하세요.

  확인 링크를 받은 경우 링크를 클릭하여 이메일 주소를 확인하십시오. 스팸 폴더에 이메일이 있는지 확인할 수도 있습니다.
+ SMS 알림으로 경보를 보내는 경우 전화번호에는 E.164 국제 전화번호 형식을 사용해야 합니다. 이 형식에는 `+<country-calling-code><area-code><phone-number>`가 포함됩니다.

  전화번호 예시:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iotevents/latest/developerguide/use-alarm-notifications.html)

  국가 전화 코드는 [countrycode.org](https://countrycode.org/)에서 찾으십시오.

  에서 제공하는 Lambda 함수는 E.164 형식의 전화번호를 사용하는지 AWS IoT Events 확인합니다. 하지만 전화번호를 확인하지는 않습니다. 전화번호를 정확하게 입력했지만 SMS 알림을 받지 못한 경우 이동통신사에 문의할 수 있습니다. 이동통신사에서 메시지를 차단할 수 있습니다.

# 에서 경보 수신자의 IAM Identity Center 액세스 관리 AWS IoT Events
<a name="sso-authorization-recipients"></a>

AWS IoT Events 는 AWS IAM Identity Center 를 사용하여 경보 수신자의 SSO 액세스를 관리합니다. AWS IoT Events 알림 수신자를 위해 IAM Identity Center를 구현하면 보안 및 사용자 경험을 개선할 수 있습니다. 경보가 수신자에게 알림을 보낼 수 있게 하려면 IAM Identity Center를 활성화하고 IAM ID 센터 스토어에 수신자를 추가해야 합니다. 자세한 내용은 *AWS IAM Identity Center 사용 설명서*의 [사용자 추가](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html)를 참조하십시오.

**중요**  
 AWS IoT Events AWS Lambda및 IAM Identity Center에 대해 동일한 AWS 리전을 선택해야 합니다.
AWS Organizations는 한 번에 하나의 IAM Identity Center 리전만 지원합니다. IAM Identity Center를 다른 리전에서 사용할 수 있게 하려면 먼저 현재 IAM Identity Center 구성을 삭제해야 합니다. 자세한 내용은 *AWS IAM Identity Center 사용 설명서*의 [IAM Identity Center 리전 Data](https://docs.aws.amazon.com/singlesignon/latest/userguide/regions.html#region-data)를 참조하십시오.