Amazon Connectを使ってCloudWatchアラームに電話通知を設定してみた
こんにちは。
繁松です。
はじめに
CloudWatch Alarmの通知先に電話を設定したいと思ったことはありませんか?
CloudWatch、Lambda、Amazon Connectを組み合わせることで電話通知が可能になります。
本ブログではCloudWatchアラームの実行アクションにLambdaを指定して、Amazon Connectから通知先の電話番号にアラーム内容を音声通知させてみます。
やってみた
前提条件
- Amazon Connect
- 構築済みであること
- 電話番号取得済みであること
Amazon Connect
Amazon Connectコンタクトフローの作成
以下のようなフローを作成します。
電話通知の際にCloudWatchアラーム名を読み上げたいのでプロンプトの再生ブロックには以下の内容を設定します。
クラウドウォッチアラームの通知です。 $.Attributes.alarmName のアラームが発生しています。
作成後にコンタクトフローIDをメモしておきます。
Lambda
Lambda関数の作成
Python 3.12でLambdaを作成します。
ロールのポリシー追加
LambdaのロールにAmazon Connectの発信に必要な以下のポリシーを追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "connect:StartOutboundVoiceContact",
"Resource": "*"
}
]
}
CloudWatchアラーム用のポリシー追加
LambdaにCloudWatchのリソースベースポリシーを追加します。
Lambda→アクセス権限→リソースベースのポリシーステートメントで「アクセス権限を追加」を選択します。
以下の値を入力し保存します。
ステートメントID:任意の値
プリンシパル:lambda.alarms.cloudwatch.amazonaws.com
アクション:lambda:InvokeFunction
コード
Amazon ConnectのインスタンスID、コンタクトフローID、Amazon Connectで取得した電話番号、通知先の電話番号を設定します。
電話番号は「E.164」形式(例:+815011111111)で指定する必要があります。
今回「EC2_CPU使用率80%超過」というアラート名を読み上げて通知したいのですが、EC2を「イーシー二」と呼んでしまうのでコードの中で「イーシーツー」に変換しています。
import boto3
def lambda_handler(event, context):
# Amazon Connectクライアントの作成
connect = boto3.client('connect')
# Amazon Connectインスタンスの設定
instance_id = 'Amazon ConnectインスタンスID'
contact_flow_id = 'コンタクトフローID'
source_phone_number = 'Amazon Connectで取得した電話番号'
destination_phone_number = '通知先の電話番号'
# イベントからcloudwatchアラーム名を取得
alarmName = event['alarmData']['alarmName']
# EC2をイーシー二と読むので置換
alarmName_replace = alarmName.replace("EC2", "イーシーツー")
# アウトバウンドコールの開始
response = connect.start_outbound_voice_contact(
DestinationPhoneNumber=destination_phone_number,
ContactFlowId=contact_flow_id,
InstanceId=instance_id,
SourcePhoneNumber=source_phone_number,
Attributes={
'alarmName': alarmName_replace
}
)
通知先の電話番号を携帯電話宛(070,080,090)に設定したい場合はAWSサポートへの申請が必要になります。
CloudWatch
CloudWatch Alarmの作成
EC2のCPU使用率が80%を超えた場合のアクションに電話通知を設定してみます。
Lambdaアクションに先ほど作成した関数を設定します。
アラーム名に「EC2_CPU使用率80%超過」を設定します。
動作確認
動作確認のためAmazon Connect宛に電話通知を行いました。
設定したCloudWatchアラーム名「EC2_CPU使用率80%超過」を読み上げています。
さいごに
AWSリソースの監視で電話通知まで行いたい場合にはAmazon ConnectとLambdaを利用することで実装できます。
今回はアラーム名を読み上げる内容としましたが、別のCloudWatchイベントログを読み上げるように変更することも可能です。
以前まではCloudWatchのアクションにSNSを設定してLambdaを呼び出す必要があったのですが、2023年のアップデートからCloudWatchのアクションにLambdaを設定することが可能になったので、よりシンプルな構成で電話通知の設定が可能になりました。
参考情報