はじめに
オンプレミスで稼働しているサーバを AWS へ移設することになったので、監視関連も AWS へ移設することになりました。基本的には CloudWatch に監視関連を集約し、検知したアラームをメール通知、slack 通知、電話通知等様々な通知手段を活用し通知するようにしました。今回は Amazon Connect を利用した電話通知の設定方法を紹介します。
AWS Service
- CloudWatch
- SNS
- Lambda
- Amazon Connect
Amazon Connect 設定(インスタンス作成)
まずは、Amazon Connect インスタンス作成です。
[サービス > Amazon Connect > インスタンスを追加する] を選択
Amazon Connect 設定(電話番号取得)
インスタンスを作成したら、次に電話番号を取得します。
先程作成したインスタンスの URL にアクセスします。
アクセス URL : https://XXXXXXXXXX.awsapps.com/connect/home
※管理者作成をスキップした場合、アクセス URL からログインが出来なくなるので、緊急アクセスから接続してください。
緊急アクセス : サービス > Amazon Connect > 対象インスタンス > 概要 > 緊急アクセス
Amazon Connect 設定(問い合わせフロー作成)
電話番号を取得したら、次に問い合わせフローを作成します。
以上で Amazon Connect の設定は完了です。
Lambda 設定
続いて、Lambda 関数を設定します。
[サービス > Lambda > 関数 > 関数の作成] を選択
関数の作成 : 一から作成
関数名 : 任意
ランタイム : Python 3.8(Python の最新 Ver を選択)
実行ロール : 基本的な Lambda アクセス権限で新しいロールを作成
<関数コード>
import boto3
def lambda_handler(event, context):
client = boto3.client('connect')
client.start_outbound_voice_contact(
InstanceId='{InstanceId}',
ContactFlowId='{ContactFlowId}',
SourcePhoneNumber='+81XXXXXXXXXX',
DestinationPhoneNumber='+81YYYYYYYYYY'
)
<環境変数>
- InstanceId : Amazon Connect インスタンス ID
- ContactFlowId : Amazon Connect フロー ID
- SourcePhoneNumber : Amazon Connect で取得した電話番号(ハイフン、スペース無し)
- DestinationPhoneNumber : 通知先の電話番号(+81のあと、通知したい番号の頭「0」を取ったものを入れる)。例 ) +8190YYYYXXXX
InstanceId, ContactFlowId は、上記で作成した問い合わせフロー作成画面から確認できます。
「追加のフロー情報」の Arn 情報を確認して設定してください。
arn:aws:connect:{AWS::Region}:{AWS::AccountId}:instance/{InstanceId}/contact-flow/{ContactFlowId}
以上で Lambda の設定は完了です。
SNS 設定
続いて、SNS を設定します。
[サービス > Simple Notification Service > トピック > トピックの作成] を選択
名前 : 任意
表示名 : 任意
続いて、上記で作成したトピックのサブスクリプションを設定します。
[サービス > Simple Notification Service > トピック > 上記で作成したトピック > サブスクリプションの作成] を選択
トピック : 上記で作成したトピックの ARN
プロトコル : AWS Lambda
エンドポイント : 上記で設定した Lambda の ARN
以上で SNS の設定は完了です。
CloudWatch アラーム設定
続いて、CloudWatch アラームを設定します。
こちらに関してはアラームを作成して通知先を上記で作成した SNS トピックを指定するだけなので、今回はサンプルとして EC2 の CPU 使用率アラームを作成したいと思います。
[サービス > CloudWatch > アラーム > アラームの作成] を選択
以上で CloudWatch アラームの設定は完了です。
これで CloudWatch アラームが発動すれば、Lambda に設定した通知先に電話通知されます。
おわりに
この仕組みを実装すれば電話連絡を外注する必要が無くなるので結構使えると思った。外注するよりお金もかかりません。
ただし、今回紹介した設定だと通知先が1つに限定されてしまうので、一度に複数又は輪番で通知することが出来ないのが欠点です。
今回の設定で一度に複数人へ通知させるには、Lambda 関数の start_outbound_voice_contact API を人数分設定して通知先だけ変更してあげれば可能ですが、構成としてはいまいちかもしれません。
Step Functions, Systems Manager Parameter Store, Lambda を連携すれば輪番で通知することも出来そうですが、今回は見送ります。
今回は検証で設定しただけで諸々適当に設定しているので、正式に運用するのであれば下記設定は気にした方が良いと思います。管理しづらい名前で自動的に作成されてしまいます。
IAM ロール
S3 格納先
CloudWatch Logs 格納先
等々