はじめに
はじめまして。会員システムグループでメールシステムの担当をしている鹿野です。 みなさまは、担当されているシステムの監視アラート対応はどうされていますか? 弊社のメールシステムはメールサービスを提供しているというその特性もあり、緊急度の高いアラートは電話で担当者に通知を行う構成を採用しています。 今回はそのアラート発生から担当者に電話で通知するまでのフローを Alertmanager と Amazon Connect を使って構成したお話です。 この記事で使用している構成コードのサンプルはこちらシステム構成

- アラートが発生するとAlertmanagerがSNSトピックにメッセージを発行し、メッセージを受けたSNSトピックはサブスクライブしているLambda関数を呼び出します。
- 呼び出されたLambda関数がAmazon ConnectのStartOutboundVoiceContact APIをコールします。
- Amazon Connectが電話で通知を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import os import boto3 DEST_PHONE_NUMBER = "+81xxxxxxxxxx" connect = boto3.client("connect") def lambda_handler(event, context) -> None: contact = connect.start_outbound_voice_contact( DestinationPhoneNumber=DEST_PHONE_NUMBER, ContactFlowId=os.getenv('CONNECT_CONTACT_FLOW_ID'), InstanceId=os.getenv('CONNECT_INSTANCE_ID'), SourcePhoneNumber=os.getenv('SOURCE_PHONE_NUMBER'), Attributes={"message": "This is alert notification system."}, ) |
構成してみる
以下のステップで構成していきます。- 通知システムの構成
- Alertmanagerのアラート通知設定
通知システムの構成
ここでの通知システムとは、構成図のAWSリソース群のことを指します。 構成するには、以下の要素が満たされていることが前提です。- Terraformクライアントがインストール済み
- AWS IAM認証情報が設定済み
1 |
terraform plan |
1 |
terraform apply |
- iam_assumable_role_arn
- sns_topic_arn

Alertmanagerのアラート通知設定
Alertmanagerのバージョンは 0.23.0 以降が必須です。 Prometheus及びAlertmanager自体の構成は済んでいるものとし、Alertmanagerのバージョンは 0.23.0 を使用しています。 以下のステップで構成していきます。- IAM認証プロファイルの作成
- Alertmanager設定ファイルにAWS SNSレシーバーを追加
IAM認証プロファイルの作成
Alertmangerのホスト上にIAM認証プロファイルを作成しておきます。 このサンプルでは、プロファイル名を共にalertmanger
とします。
Alertmanager設定ファイルにAWS SNSレシーバーを追加
Alertmanager設定ファイルにAWS SNSレシーバーを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 |
route: receiver: 'snsreceiver' receivers: - name: 'snsreceiver' sns_configs: - api_url: 'https://sns.ap-northeast-1.amazonaws.com' topic_arn: '<sns_topic_arn>' subject: 'optional string' sigv4: region: 'ap-northeast-1' profile: 'alertmanager' role_arn: '<iam_assumable_role_arn>' |
- topic_arn に前の項目で控えておいた
sns_topic_arn
の値を入力します。 - sigv4.role_arn に
iam_assumable_role_arn
の値を入力します。
構成後の注意点
AWSリソースを構成して、Alertmanagerにも通知設定を反映したからはい終わり! となればいいのですが、電話でアラート通知を受けるにはあともう2ステップ必要です。- 発信元電話番号の取得とコンタクトフローへの紐づけ
- 発信先電話番号の制限解除
発信元電話番号の取得とコンタクトフローへの紐づけ
この記事を執筆した時点では、発信元電話番号の取得や、取得した電話番号をコンタクトフローへ紐づけするリソースが、TerraformのAWSプロバイダーに存在していなかったため構成内に組み込むことができませんでした。 本サンプルではコンソール上から紐づけ作業を行いますが、CLIでも同様のこと(claim-phone-number, associate-phone-number-contact-flow)ができるので構成フローに組み込もうと思えばできると思います。 発信元電話番号の取得とコンタクトフローへの紐づけは、Amazon Connectインスタンスの管理画面から行います。
connect_source_phone_number
に取得した発信元電話番号(E.164)を設定します。
1 |
connect_source_phone_number = "+1xxxxxxxxxx" |
1 |
terraform apply |
発信先電話番号の制限解除
地味なハマりポイントです。 これで発信できるようになったと思いきや、試しにアラート通知テストをしてみると以下のエラーに遭遇します。
1 2 3 |
[ERROR] DestinationNotAllowedException: An error occurred (DestinationNotAllowedException) when calling the StartOutboundVoiceContact operation: None |
カスタマイズするとしたら
大きく二分すると、カスタマイズ先は以下の2つが挙げられます。- Lambda関数
- コンタクトフロー
「顧客の入力を取得する」+「顧客の入力を保存する」 or 「コンタクト属性の設定」 -> 「コンタクト属性を確認する」 -> 「Slack通知するLambda関数を呼び出す」
まとめ
- Amazon Connect を使って電話アラート通知の仕組みを構成できる
- 発信先電話番号に制限がある点には注意が必要
We are hiring!
ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!