

Pemberitahuan akhir dukungan: Pada 20 Mei 2026, AWS akan mengakhiri dukungan untuk AWS IoT Events. Setelah 20 Mei 2026, Anda tidak akan lagi dapat mengakses AWS IoT Events konsol atau AWS IoT Events sumber daya. Untuk informasi selengkapnya, lihat [AWS IoT Events akhir dukungan](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html).

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Pemantauan dengan alarm di AWS IoT Events
<a name="iotevents-alarms"></a>

AWS IoT Events alarm membantu Anda memantau data Anda untuk perubahan. Data dapat berupa metrik yang Anda ukur untuk peralatan dan proses Anda. Anda dapat membuat alarm yang mengirim notifikasi saat ambang batas dilanggar. Alarm membantu Anda mendeteksi masalah, merampingkan pemeliharaan, dan mengoptimalkan kinerja peralatan dan proses Anda.

Alarm adalah contoh model alarm. Model alarm menentukan apa yang harus dideteksi, kapan harus mengirim pemberitahuan, siapa yang mendapat pemberitahuan, dan banyak lagi. Anda juga dapat menentukan satu atau beberapa [tindakan yang didukung](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-supported-actions.html) yang terjadi ketika status alarm berubah. AWS IoT Events merutekan [atribut input](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-detector-input.html) yang berasal dari data Anda ke alarm yang sesuai. Jika data yang Anda pantau berada di luar rentang yang ditentukan, alarm akan dipanggil. Anda juga dapat mengenali alarm atau mengaturnya ke mode tunda.

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

Anda dapat menggunakan AWS IoT Events alarm untuk memantau properti aset di AWS IoT SiteWise. AWS IoT SiteWise mengirimkan nilai properti aset ke AWS IoT Events alarm. AWS IoT Events mengirimkan status alarm ke AWS IoT SiteWise.

AWS IoT SiteWise juga mendukung alarm eksternal. Anda dapat memilih alarm eksternal jika Anda menggunakan alarm di luar AWS IoT SiteWise dan memiliki solusi yang mengembalikan data status alarm. Alarm eksternal berisi properti pengukuran yang menelan data status alarm.

AWS IoT SiteWise tidak mengevaluasi keadaan alarm eksternal. Selain itu, Anda tidak dapat mengakui atau menunda alarm eksternal saat status alarm berubah.

Anda dapat menggunakan fitur SiteWise Monitor untuk melihat status alarm eksternal di portal SiteWise Monitor.

Untuk informasi selengkapnya, lihat [Memantau data dengan alarm](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/industrial-alarms.html) di *Panduan AWS IoT SiteWise Pengguna* dan [Pemantauan dengan alarm](https://docs.aws.amazon.com//iot-sitewise/latest/appguide/monitor-alarms.html) di Panduan *Aplikasi SiteWise Monitor*.

## Akui aliran
<a name="acknowledge-flow"></a>

Saat membuat model alarm, Anda memilih apakah akan mengaktifkan alur pengakuan. Jika Anda mengaktifkan alur pengakuan, tim Anda akan diberi tahu saat status alarm berubah. Tim Anda dapat mengenali alarm dan meninggalkan catatan. Misalnya, Anda dapat menyertakan informasi alarm dan tindakan yang akan Anda ambil untuk mengatasi masalah tersebut. Jika data yang Anda pantau berada di luar rentang yang ditentukan, alarm akan dipanggil.

Alarm memiliki status berikut:

`DISABLED`  
Ketika alarm dalam `DISABLED` keadaan, itu tidak siap untuk mengevaluasi data. Untuk mengaktifkan alarm, Anda harus mengubah alarm ke `NORMAL` negara.

`NORMAL`  
Ketika alarm dalam `NORMAL` keadaan, itu siap untuk mengevaluasi data.

`ACTIVE`  
Jika alarm dalam `ACTIVE` keadaan, alarm dipanggil. Data yang Anda pantau berada di luar rentang yang ditentukan.

`ACKNOWLEDGED`  
Ketika alarm dalam `ACKNOWLEDGED` keadaan, alarm dipanggil dan Anda mengakui alarm.

`LATCHED`  
Alarm dipanggil, tetapi Anda tidak mengakui alarm setelah jangka waktu tertentu. Alarm secara otomatis berubah ke `NORMAL` status.

`SNOOZE_DISABLED`  
Ketika alarm dalam `SNOOZE_DISABLED` keadaan, alarm dinonaktifkan untuk jangka waktu tertentu. Setelah waktu tunda, alarm secara otomatis berubah ke status. `NORMAL`

# Membuat model alarm di AWS IoT Events
<a name="create-alarm-model"></a>

Anda dapat menggunakan AWS IoT Events alarm untuk memantau data Anda dan mendapatkan pemberitahuan ketika ambang batas dilanggar. Alarm menyediakan parameter yang Anda gunakan untuk membuat atau mengonfigurasi model alarm. Anda dapat menggunakan AWS IoT Events konsol atau AWS IoT Events API untuk membuat atau mengonfigurasi model alarm. Saat Anda mengonfigurasi model alarm, perubahan berlaku saat data baru tiba.

## Persyaratan
<a name="create-alarm-model-requirements"></a>

Persyaratan berikut berlaku saat Anda membuat model alarm.
+ Anda dapat membuat model alarm untuk memantau atribut input di AWS IoT Events atau properti aset di AWS IoT SiteWise.
  + Jika Anda memilih untuk memantau atribut input di AWS IoT Events, [Buat masukan untuk model di AWS IoT Events](create-input-overview.md) sebelum Anda membuat model alarm.
  + Jika Anda memilih untuk memantau properti aset, Anda harus [membuat model aset](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-asset-models.html) AWS IoT SiteWise sebelum membuat model alarm.
+ Anda harus memiliki peran IAM yang memungkinkan alarm Anda melakukan tindakan dan mengakses AWS sumber daya. Untuk informasi selengkapnya, lihat [Menyiapkan izin untuk AWS IoT Events](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-start.html).
+ Semua AWS sumber daya yang digunakan tutorial ini harus berada di AWS Wilayah yang sama.

## Membuat model alarm (konsol)
<a name="create-alarm-model-console"></a>

Berikut ini menunjukkan cara membuat model alarm untuk memantau AWS IoT Events atribut di AWS IoT Events konsol.

1. Masuk ke [konsol AWS IoT Events](https://console.aws.amazon.com/iotevents/) tersebut.

1. Di panel navigasi, pilih **Model alarm**.

1. Pada halaman **Model alarm**, pilih **Buat model alarm**.

1. Di bagian **Detail model alarm**, lakukan hal berikut:

   1. Masukkan nama yang unik.

   1. (Opsional) Masukkan deskripsi.

1. Di bagian **Target alarm**, lakukan hal berikut:
**penting**  
Jika Anda memilih **properti AWS IoT SiteWise aset**, Anda harus telah membuat model aset di AWS IoT SiteWise.

   1. Pilih **atribut AWS IoT Events input**.

   1. Pilih input.

   1. Pilih kunci atribut input. Atribut input ini digunakan sebagai kunci untuk membuat alarm. AWS IoT Events rute input yang terkait dengan kunci ini ke alarm.
**penting**  
Jika payload pesan input tidak berisi kunci atribut input ini, atau jika kunci tidak berada di jalur JSON yang sama yang ditentukan dalam kunci, maka pesan akan gagal dalam konsumsi. AWS IoT Events

1. Di bagian **Definisi Threshold**, Anda menentukan atribut input, nilai ambang batas, dan operator perbandingan yang AWS IoT Events digunakan untuk mengubah status alarm.

   1. Untuk **atribut Input**, pilih atribut yang ingin Anda pantau.

      Setiap kali atribut input ini menerima data baru, itu dievaluasi untuk menentukan status alarm.

   1. Untuk **Operator**, pilih operator perbandingan. Operator membandingkan atribut input Anda dengan nilai ambang untuk atribut Anda.

      Anda dapat memilih dari opsi ini: 
      + **> lebih besar dari**
      + **>= lebih besar dari atau sama dengan**
      + **< kurang dari**
      + **<= kurang dari atau sama dengan**
      + **= sama dengan**
      + **\$1 = tidak sama dengan**

   1. Untuk **Nilai** ambang batas, masukkan angka atau pilih atribut dalam AWS IoT Events input. AWS IoT Events membandingkan nilai ini dengan nilai atribut input yang Anda pilih. 

   1. (Opsional) Untuk **Tingkat Keparahan**, Gunakan nomor yang dipahami tim Anda untuk mencerminkan tingkat keparahan alarm ini.

1. (Opsional) Di bagian **Pengaturan pemberitahuan**, konfigurasikan pengaturan notifikasi untuk alarm.

   Anda dapat menambahkan hingga 10 notifikasi. Untuk **Notifikasi 1**, lakukan hal berikut:

   1. Untuk **Protokol**, pilih dari opsi berikut:
      + **Email & teks** - Alarm mengirimkan pemberitahuan SMS dan pemberitahuan email.
      + **Email** - Alarm mengirimkan pemberitahuan email.
      + **Teks** - Alarm mengirimkan pemberitahuan SMS.

   1. Untuk **Pengirim**, tentukan alamat email yang dapat mengirim pemberitahuan tentang alarm ini.

      Untuk menambahkan lebih banyak alamat email ke daftar pengirim, pilih **Tambahkan pengirim**. 

   1. (Opsional) Untuk **Penerima**, pilih penerima.

      Untuk menambahkan lebih banyak pengguna ke daftar penerima, pilih **Tambahkan pengguna baru**. Anda harus menambahkan pengguna baru ke toko Pusat Identitas IAM Anda sebelum Anda dapat menambahkannya ke model alarm Anda. Untuk informasi selengkapnya, lihat [Mengelola akses IAM Identity Center penerima alarm di AWS IoT Events](sso-authorization-recipients.md).

   1. (Opsional) Untuk **pesan kustom tambahan**, masukkan pesan yang menjelaskan apa yang dideteksi alarm dan tindakan apa yang harus dilakukan penerima.

1. Di bagian **Instans**, Anda dapat mengaktifkan atau menonaktifkan semua instance alarm yang dibuat berdasarkan model alarm ini.

1. Di bagian **Pengaturan lanjutan**, lakukan hal berikut:

   1. Untuk **alur Akui**, Anda dapat mengaktifkan atau menonaktifkan notifikasi.
      + Jika Anda memilih **Diaktifkan**, Anda menerima pemberitahuan saat status alarm berubah. Anda harus mengakui pemberitahuan sebelum status alarm dapat kembali normal.
      + Jika Anda memilih **Dinonaktifkan**, tidak ada tindakan yang diperlukan. Alarm secara otomatis berubah ke keadaan normal ketika pengukuran kembali ke kisaran yang ditentukan.

      Untuk informasi selengkapnya, lihat [Akui aliran](iotevents-alarms.md#acknowledge-flow).

   1. Untuk **Izin**, pilih salah satu opsi berikut:
      + Anda dapat **Membuat peran baru dari templat AWS kebijakan** dan AWS IoT Events secara otomatis membuat peran IAM untuk Anda. 
      + Anda dapat **Menggunakan peran IAM yang ada** yang memungkinkan model alarm ini melakukan tindakan dan mengakses AWS sumber daya lainnya.

      Untuk informasi selengkapnya, lihat [Identitas dan manajemen akses untuk AWS IoT Events](https://docs.aws.amazon.com/iotevents/latest/developerguide/security-iam.html).

   1. Untuk **pengaturan pemberitahuan tambahan**, Anda dapat mengedit AWS Lambda fungsi Anda untuk mengelola pemberitahuan alarm. Pilih salah satu opsi berikut untuk AWS Lambda fungsi Anda:
      + **Buat AWS Lambda fungsi baru** - AWS IoT Events membuat AWS Lambda fungsi baru untuk Anda.
      + **Gunakan AWS Lambda fungsi yang ada** - Gunakan AWS Lambda fungsi yang ada dengan memilih nama AWS Lambda fungsi. 

      Untuk informasi lebih lanjut tentang kemungkinan tindakan, lihat[AWS IoT Events bekerja dengan AWS layanan lain](iotevents-other-aws-services.md).

   1. (Opsional) Untuk **tindakan Atur status**, Anda dapat menambahkan satu atau beberapa AWS IoT Events tindakan yang akan diambil saat status alarm berubah.

1. (Opsional) Anda dapat menambahkan **Tag** untuk mengelola alarm Anda. Untuk informasi selengkapnya, lihat [Menandai sumber daya AWS IoT Events](https://docs.aws.amazon.com/iotevents/latest/developerguide/tagging-iotevents.html).

1. Pilih **Buat**.

# Menanggapi alarm di AWS IoT Events
<a name="respond-to-alarms"></a>

Menanggapi alarm secara efektif merupakan aspek penting dalam mengelola sistem IoT dengan. AWS IoT Events Jelajahi berbagai cara untuk mengonfigurasi dan menangani alarm, termasuk: menyiapkan saluran notifikasi, menentukan prosedur eskalasi, dan menerapkan tindakan respons otomatis. Pelajari cara membuat kondisi alarm bernuansa, memprioritaskan peringatan, dan berintegrasi dengan AWS layanan lain untuk membangun sistem manajemen alarm responsif untuk aplikasi IoT Anda.

Jika Anda mengaktifkan [alur pengakuan](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-alarms.html#acknowledge-flow), Anda akan menerima pemberitahuan saat status alarm berubah. Untuk menanggapi alarm, Anda dapat mengakui, menonaktifkan, mengaktifkan, mengatur ulang, atau menunda alarm.

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

Berikut ini menunjukkan kepada Anda cara merespons alarm di AWS IoT Events konsol.

1. Masuk ke [konsol AWS IoT Events](https://console.aws.amazon.com/iotevents/) tersebut.

1. Di panel navigasi, pilih **Model alarm**.

1. Pilih model alarm target.

1. Di bagian **Daftar alarm**, pilih alarm target.

1. Anda dapat memilih salah satu opsi berikut dari **Tindakan**:
   + **Akui** - Alarm berubah ke `ACKNOWLEDGED` negara.
   + **Nonaktifkan** - Alarm berubah ke `DISABLED` negara bagian.
   + **Aktifkan** - Alarm berubah ke `NORMAL` negara bagian.
   + **Reset** - Alarm berubah ke `NORMAL` status.
   + **Tunda**, lalu lakukan hal berikut:

     1. Pilih panjang **Tunda atau masukkan panjang Tunda** **khusus**.

     1. Pilih **Simpan**.

     Alarm berubah ke `SNOOZE_DISABLED` negara

   Untuk informasi lebih lanjut tentang status alarm, lihat[Akui aliran](iotevents-alarms.md#acknowledge-flow).

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

Untuk merespons satu atau beberapa alarm, Anda dapat menggunakan operasi AWS IoT Events API berikut:
+ [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)

------

# Mengelola notifikasi alarm di AWS IoT Events
<a name="lambda-support"></a>

AWS IoT Events terintegrasi dengan Lambda, menawarkan kemampuan pemrosesan acara khusus. Bagian ini mengeksplorasi cara menggunakan fungsi Lambda dalam model detektor AWS IoT Events Anda, memungkinkan Anda menjalankan logika kompleks, berinteraksi dengan layanan eksternal, dan menerapkan penanganan peristiwa yang canggih.

AWS IoT Events menggunakan fungsi Lambda untuk mengelola pemberitahuan alarm. Anda dapat menggunakan fungsi Lambda yang disediakan oleh AWS IoT Events atau membuat yang baru.

**Topics**
+ [Membuat fungsi Lambda di AWS IoT Events](alarms-create-lambda.md)
+ [Menggunakan fungsi Lambda yang disediakan oleh AWS IoT Events](use-alarm-notifications.md)
+ [Mengelola akses IAM Identity Center penerima alarm di AWS IoT Events](sso-authorization-recipients.md)

# Membuat fungsi Lambda di AWS IoT Events
<a name="alarms-create-lambda"></a>

AWS IoT Events menyediakan fungsi Lambda yang memungkinkan alarm untuk mengirim dan menerima pemberitahuan email dan SMS.

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

Persyaratan berikut berlaku saat Anda membuat fungsi Lambda untuk alarm:
+ Jika alarm Anda mengirimkan notifikasi SMS, pastikan Amazon SNS dikonfigurasi untuk mengirimkan pesan SMS.
  + Untuk informasi selengkapnya, lihat dokumentasi berikut ini:
    + [Pesan teks seluler dengan Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-phone-number-as-subscriber.html) dan [identitas Originasi untuk pesan SMS Amazon SNS di](https://docs.aws.amazon.com/sns/latest/dg/channels-sms-originating-identities.html) Panduan Pengembang Layanan Pemberitahuan Sederhana *Amazon*.
    + [Apa itu SMS Pesan Pengguna Akhir AWS?](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-sms-mms.html) dalam *AWS SMS User Guide*.
+ Jika alarm Anda mengirim email atau pemberitahuan SMS, Anda harus memiliki peran IAM yang memungkinkan AWS Lambda untuk bekerja dengan Amazon SES dan Amazon SNS.

  

  Contoh kebijakan:

------
#### [ 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" : "*"
          }
      ]
  }
  ```

------
+ Anda harus memilih AWS Wilayah yang sama untuk keduanya AWS IoT Events dan AWS Lambda. Untuk daftar Wilayah yang didukung, lihat [AWS IoT Events titik akhir dan kuota serta AWS Lambda titik](https://docs.aws.amazon.com/general/latest/gr/iot-events.html) [akhir dan kuota](https://docs.aws.amazon.com/general/latest/gr/lambda-service.html) di. *Referensi Umum Amazon Web*

# Menerapkan fungsi Lambda untuk menggunakan AWS IoT Events CloudFormation
<a name="alarms-create-lambda-cfn"></a>

Tutorial ini menggunakan CloudFormation template untuk menyebarkan fungsi Lambda. Template ini secara otomatis membuat peran IAM yang memungkinkan fungsi Lambda bekerja dengan Amazon SES dan Amazon SNS.

Berikut ini menunjukkan cara menggunakan AWS Command Line Interface (AWS CLI) untuk membuat CloudFormation tumpukan.

1. <a name="install-cli"></a>Di terminal perangkat Anda, jalankan `aws --version` untuk memeriksa apakah Anda menginstal file AWS CLI. Untuk informasi selengkapnya, lihat [Menginstal atau memperbarui ke versi terbaru](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dari *Panduan AWS Command Line Interface Pengguna*. AWS CLI

1. <a name="configure-cli"></a>Jalankan `aws configure list` untuk memeriksa apakah Anda mengkonfigurasi AWS CLI di AWS Wilayah yang memiliki semua AWS sumber daya Anda untuk tutorial ini. Untuk informasi selengkapnya, lihat [Mengatur dan melihat pengaturan konfigurasi menggunakan perintah](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) di *Panduan AWS Command Line Interface Pengguna*

1. Unduh CloudFormation template, [NotificationLambda.Template.yaml.zip](samples/notificationLambda.template.yaml.zip).
**catatan**  
Jika Anda mengalami kesulitan mengunduh file, template juga tersedia di file[CloudFormation Template](alarms-create-lambda.md#cfn-template).

1. Unzip konten dan simpan secara lokal sebagai `notificationLambda.template.yaml`.

1. Buka terminal di perangkat Anda dan arahkan ke direktori tempat Anda mengunduh `notificationLambda.template.yaml` file.

1. Untuk membuat CloudFormation tumpukan, jalankan perintah berikut:

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

Anda dapat memodifikasi CloudFormation template ini untuk menyesuaikan fungsi Lambda dan perilakunya.

**catatan**  
AWS Lambda mencoba ulang kesalahan fungsi dua kali. Jika fungsi tidak memiliki kapasitas yang cukup untuk menangani semua permintaan yang masuk, peristiwa mungkin menunggu dalam antrean selama beberapa jam atau hari untuk dikirim ke fungsi tersebut. Anda dapat mengonfigurasi antrian pesan tidak terkirim (DLQ) pada fungsi untuk menangkap peristiwa yang tidak berhasil diproses. Untuk informasi selengkapnya, lihat [Invokasi asinkron](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html) di *Panduan Developer AWS Lambda *.

Anda juga dapat membuat atau mengonfigurasi tumpukan di CloudFormation konsol. Untuk informasi selengkapnya, lihat [Bekerja dengan tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html), di *Panduan AWS CloudFormation Pengguna*.

# Membuat fungsi Lambda khusus untuk AWS IoT Events
<a name="alarms-create-custom-lambda"></a>

Anda dapat membuat fungsi Lambda atau memodifikasi yang disediakan oleh. AWS IoT Events

Persyaratan berikut berlaku saat Anda membuat fungsi Lambda kustom.
+ Tambahkan izin yang memungkinkan fungsi Lambda Anda melakukan tindakan tertentu dan AWS mengakses sumber daya.
+ Jika Anda menggunakan fungsi Lambda yang disediakan oleh AWS IoT Events, pastikan Anda memilih runtime Python 3.7.

Contoh fungsi 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')
```

Untuk informasi selengkapnya, lihat [Apa itu AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) dalam *Panduan Pengguna AWS Lambda *.

## CloudFormation Template
<a name="cfn-template"></a>

Gunakan CloudFormation template berikut untuk membuat fungsi Lambda Anda.

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

# Menggunakan fungsi Lambda yang disediakan oleh AWS IoT Events
<a name="use-alarm-notifications"></a>

Dengan pemberitahuan alarm, Anda dapat menggunakan fungsi Lambda yang disediakan oleh AWS IoT Events untuk mengelola pemberitahuan alarm.

Persyaratan berikut berlaku saat Anda menggunakan fungsi Lambda yang disediakan oleh AWS IoT Events untuk mengelola notifikasi alarm Anda:
+ Anda harus memverifikasi alamat email yang mengirimkan pemberitahuan email di Amazon Simple Email Service (Amazon SES). Untuk informasi selengkapnya, lihat [Memverifikasi identitas alamat email](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#just-verify-email-proc), di *Panduan Pengembang Layanan Email Sederhana Amazon*.

  Jika Anda menerima tautan verifikasi, klik tautan untuk memverifikasi alamat email Anda. Anda juga dapat memeriksa folder spam Anda untuk email verifikasi.
+ Jika alarm Anda mengirimkan notifikasi SMS, Anda harus menggunakan format nomor telepon internasional E.164 untuk nomor telepon. Format ini berisi`+<country-calling-code><area-code><phone-number>`.

  Contoh nomor telepon:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iotevents/latest/developerguide/use-alarm-notifications.html)

  Untuk menemukan kode panggilan negara, buka [countrycode.org](https://countrycode.org/).

  Fungsi Lambda disediakan dengan AWS IoT Events memeriksa apakah Anda menggunakan nomor telepon berformat E.164. Namun, itu tidak memverifikasi nomor telepon. Jika Anda memastikan bahwa Anda memasukkan nomor telepon yang akurat tetapi tidak menerima pemberitahuan SMS, Anda dapat menghubungi operator telepon. Operator dapat memblokir pesan.

# Mengelola akses IAM Identity Center penerima alarm di AWS IoT Events
<a name="sso-authorization-recipients"></a>

AWS IoT Events digunakan AWS IAM Identity Center untuk mengelola akses SSO penerima alarm. Menerapkan IAM Identity Center untuk penerima AWS IoT Events notifikasi dapat meningkatkan keamanan dan pengalaman pengguna. Untuk mengaktifkan alarm mengirim notifikasi ke penerima, Anda harus mengaktifkan Pusat Identitas IAM dan menambahkan penerima ke toko Pusat Identitas IAM Anda. Untuk informasi selengkapnya, lihat [Menambahkan AWS IAM Identity Center Pengguna](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) *di Panduan Pengguna*.

**penting**  
Anda harus memilih AWS Region yang sama untuk AWS IoT Events, AWS Lambda, dan IAM Identity Center.
AWS Organizations hanya mendukung satu Wilayah Pusat Identitas IAM pada satu waktu. Jika Anda ingin membuat Pusat Identitas IAM tersedia di Wilayah yang berbeda, Anda harus terlebih dahulu menghapus konfigurasi Pusat Identitas IAM Anda saat ini. Untuk informasi selengkapnya, lihat [Data Wilayah Pusat Identitas IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/regions.html#region-data) di *Panduan AWS IAM Identity Center Pengguna*.