New Relicではシステムで異常が発生した場合にさまざまな手段で通知やツール連携を行うことができます。その一つの方法にAmazon EventBridgeがあります。Amazon EventBridgeを利用することでアラートを通知するだけでなく、その後のアクションを自動化することができインシデント対応を効率化することができます。本ブログでは、アラートの延長での架電を例に、Amazon EventBridgeとの連携方法を説明します。
全体構成
本ブログで設定する全体構成です。まず、New Relicでインシデントが発生した場合に、Amazon EventBridgeにアラート通知します。Amazon EventBridgeにはAWS Lambdaを実行するルールを定義しておき、そのAWS LambdaはAmazon ConnectのAPIを使って架電をするように設定しておきます。

設定方法
本ブログでは、New RelicとAmazon EventBridgeの連携設定方法を中心にご説明します。Amazon Connectによる架電の方法やAWS LambdaによるAmazon ConnectのAPI呼び出し方法については説明しませんので対応するドキュメントを参照してください。
では、New RelicとAmazon EventBridgeの連携設定方法を説明します。詳細は公式ドキュメントに記載されていますのでそちらを参照してください。
New Relic イベントソースを設定
AWSのコンソールにログインし、Amazon EventBridgeのパートナーイベントソースからNew Relicを選択します。

AWSアカウントIDを記憶しておきます。

AWS EventBridgeを通知先(Destination)として登録する
New RelicのUIにアクセスし、Aerts & AIのDestinationsにて通知先としてAWS EventBridgeを登録します。任意の名称とリージョン、前段のステップで取得したAWS account IDを指定します。


Workflowの通知先としてAWS EventBridgeを指定する
アラート発火時に、先ほど登録したAWS EventBridgeに通知が行くようWorkflowを設定します。NotifyのセクションにてAWS EventBridgeを選択します。

Destinationには前のステップで作成したものを指定します。Event sourceは未作成の場合、任意の名前を指定します。

Event sourceを指定した後は、AWS管理コンソールでパートナーイベントソースとして指定したイベントソースが作成されていることを確認します。

イベントバスと関連づける
先のステップで作成したイベントソースをイベントバスと関連づけます。

AWSの管理コンソールで作成したイベントソースを選択肢、イベントバスと関連付けます。


イベントソースのステータスがアクティブになりました。

関連付けたイベントバスにてスキーマの検出を開始します。


ルールを作成する
最後にAWS EventBridge経由でLambdaを実行するルールを作成します。その際、先ほど作成したイベントバスを指定します。

イベントソースは、「AWSイベントまたはEventBridgeパートナーイベント」を選択します。

イベントパターンの設定においては、EventBridgeパートナー、New Relicを選択します。

最後はターゲットの設定です。ターゲットは何を実施したいかに依存しますが、今回は架電のためのAmazon ConnectのAPIをコールするAWS Lambdaをターゲットとします。

無事にAWS LambdaのトリガーにAWS EventBridgeが追加されました。ここまでの設定で、アラート発火からAWS EventBridge、AWS Lambdaの呼び出しまで完了しました。

参考:Amazon Connect呼び出し用 AWS Lambda
簡単ではありますが、AWS EventBridge経由で呼び出され、Amazon Connect経由で架電をするAWS Lambda関数の例を示します。メッセージはNew Relicのアラート通知の際にAWS EventBridge呼び出しのペイロードから取得し、それ以外のAmazon Connectの静的な設定はAWS Lambdaの環境変数から取得しています。
import boto3
import os
def handler(event, context):
connect = boto3.client('connect')
message = event['detail']['message']
destinationPhoneNumber=os.environ['DESTINATION_PHONE_NUMBER']
sourcePhoneNumber=os.environ['SOURCE_PHONE_NUMBER']
contactFlowId=os.environ['CONTACT_FLOW_ID']
instanceId=os.environ['INSTANCE_ID']
resp = connect.start_outbound_voice_contact(
DestinationPhoneNumber=destinationPhoneNumber,
ContactFlowId=contactFlowId,
InstanceId=instanceId,
SourcePhoneNumber=sourcePhoneNumber,
Attributes={
'message': message
}
)
最後にAmazon Connectでアラート契機の架電が正しくできているかを確認します。
無事に指定した番号への架電が行われ、通知に含まれていたメッセージ等も渡っていることが確認できます。

まとめ
今回は、AWS EventBridgeを活用しNew Relicのアラートを契機に対処を自動化するための設定をご紹介しました。今回は架電を例にしましたがEventBridgeのターゲットを変更すれば他の用途にも利用できます。監視からのアクションの自動化によって運用の効率をさらに上げていきましょう。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。