

サポート終了通知: 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 アラームは、データの変更をモニタリングするのに役立ちます。データは、機器とプロセスについて測定するメトリクスにすることができます。しきい値に違反したときに通知を送信するアラームを作成できます。アラームは、問題の検出、メンテナンスの合理化、および機器とプロセスのパフォーマンスの最適化に役立ちます。

アラームは、アラームモデルのインスタンスです。アラームモデルは、何を検出するか、いつ通知を送信するか、誰に通知を受け取るかなどを指定します。アラーム状態が変更されたときに発生する 1 つ以上の[サポートされているアクション](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 モニタリングアプリケーションガイド*」の「[アラームを使用したモニタリング](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](create-input-overview.md)前に AWS IoT Events、 で入力属性をモニタリングすることを選択した場合。
  + アセットプロパティをモニタリングする場合は、アラーム[モデルを作成する前に でアセット](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. **演算子**で、比較演算子を選択します。オペレーターは、入力属性を属性のしきい値と比較します。

      これらのオプションから選択できます。
      + **[> greater than]** (> より大きい)
      + **[>= greater than or equal to]** (>= 以上)
      + **[< less than)]** (< 未満)
      + **[<= less than or equal to]** (<= 以下)
      + **[= equal to]** (= 等しい)
      + **[\$1= not equal to]** (\$1= 等しくない)

   1. しきい値には****、 AWS IoT Events 入力に数値を入力するか、属性を選択します。 は、この値を選択した入力属性の値 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のIdentity and Access Management](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 つ以上追加できます。

1. (オプション) **タグ**を追加して、アラームを管理できます。詳細については、「[AWS IoT Events リソースのタグ付け](https://docs.aws.amazon.com/iotevents/latest/developerguide/tagging-iotevents.html)」を参照してください。

1. **[作成]** を選択します。

# でのアラームへの対応 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. **アクション**から次のオプションのいずれかを選択できます。
   + **[Acknowledge]** (確認) - アラームは、`ACKNOWLEDGED` 状態に変わります。
   + **[Disable]** (無効) - アラームは、`DISABLED` 状態に変わります。
   + **[Enable]** (有効) - アラームは、`NORMAL` 状態に変わります。
   + **[Reset]** (リセット) - アラームは、`NORMAL` 状態に変わります。
   + **[Snooze]** (スヌーズ) を選択して、以下を行う。

     1. **スヌーズの長さ**を選択するか、**カスタムスヌーズの長さ**を入力します。

     1. [**保存**] を選択します。

     アラームは、`SNOOZE_DISABLED` 状態になります。

   アラーム状態の詳細については、「[フローの確認](iotevents-alarms.md#acknowledge-flow)」を参照してください。

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

1 つ以上のアラームに応答するには、次の 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 は、アラームが E メールおよび SMS 通知を送受信できるようにする Lambda 関数を提供します。

## 要件
<a name="alarms-lambda-requirements"></a>

アラームの Lambda 関数を作成する場合は、次の要件が適用されます。
+ アラームが SMS 通知を送信する場合は、Amazon SNS が SMS メッセージを配信するように設定されていることを確認します。
  + 詳細については、次のドキュメントを参照してください。
    + [Amazon SNS および Amazon SNS SMS メッセージの送信元 ID を使用したモバイルテキストメッセージ](https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html)」。 [ Amazon SNS ](https://docs.aws.amazon.com/sns/latest/dg/channels-sms-originating-identities.html) **
    + *AWS SMS *[「 ユーザーガイド」の「AWS エンドユーザーメッセージング SMS とは](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-sms-mms.html)」。
+ アラームが E メールまたは 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 は関数エラーを 2 回再試行します。関数にすべての着信要求を処理するのに十分な容量がない場合、イベントはキュー内で数時間または数日待って関数に送信される可能性があります。正常に処理されなかったイベントをキャプチャするように、関数に未配信メッセージキュー (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 関数を使用する場合は AWS IoT Events、必ず Python 3.7 ランタイムを選択してください。

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) で E メール通知を送信する E メールアドレスを確認する必要があります。詳細については、「*Amazon Simple Email Service デベロッパーガイド*」の「[E メールアドレスのアイデンティティの確認](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/ja_jp/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 アイデンティティセンター を使用して、アラーム受信者の SSO アクセスを管理します。 AWS IoT Events 通知受信者に IAM Identity Center を実装すると、セキュリティとユーザーエクスペリエンスを向上させることができます。アラームが受信者に通知を送信できるようにするには、IAM Identity Center を有効にして、受信者を IAM Identity Center ストアに追加する必要があります。詳細については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[ユーザーの追加](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html)」を参照してください。

**重要**  
 AWS IoT Events AWS Lambda、、および IAM Identity Center には同じ AWS リージョンを選択する必要があります。
AWS Organizations は、一度に 1 つの IAM アイデンティティセンターリージョンのみをサポートします。別のリージョンで IAM Identity Center を利用できるようにする場合は、最初に現在の IAM Identity Center 設定を削除する必要があります。詳細については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[IAM Identity Center のリージョンデータ](https://docs.aws.amazon.com/singlesignon/latest/userguide/regions.html#region-data)」を参照してください。