AWSで何かお知らせや通知があった場合、登録されているメールアドレス宛にメールが届きますが、
メールだと埋もれてしまうので普段使ってるチャットツールで通知を受け取りたい!
と思ったので設定してみました。
受取りはGoogle Chatで受け取れるように設定してみたいと思います。
AWSで使用するサービスは「Amazon EventBridge」「SNS」「Lambda」の3つです。
Amazon EventBridgeでお知らせ通知を検知して、SNSでLambdaへ通知、LambdaがGoogle Chatへメッセージを送信するという使い方になります。
![構成図](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-1.png)
※有料版(Google Workspace)のGoogle Chatでの設定方法になります。
Google Chatの設定
まずGoogle Chatで通知を受け取るためのスペースを作成します。
作成したスペースでメニューを開き、「Webhookを管理」を開きます。
![スペースのメニュー](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-2.png)
Webhookの名前を設定するモーダルが開くので、適当に名前を付けて「保存」
![Webhookの名前](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-3.png)
すると、通知を受け取るためのWebhookのURLが発行されます、このURLは後ほどAWSでの通知先として設定します。
![WebhookのURL](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-4.png)
SNSの設定
次はSNSで、Lambdaへ通知するためのトピックを作成します。
SNSの「トピック」を開き、右上の「トピックを作成」から新しいトピックを作成していきます。
![SNS](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-8-1024x181.png)
タイプで「スタンダード」を選択し、名前を入力して、一番下にある「トピックを作成」を押してトピックを作成します。
![トピックの作成](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-9.png)
Lambdaの設定
次はLambdaで、Google Chatへ通知を送る関数を作成します。
Lambdaの「関数」を開き、右上の「関数を作成」から新しく関数を作成していきます。
![関数](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-5-1024x178.png)
「一から作成」を選び、関数名に好きな名前を入力します。
ランタイムでPythonの最新バージョンを選択し、右下の「関数の作成」を押します。
![関数の作成](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-7-1024x480.png)
関数が作成されているので、関数の概要から「+トリガーの追加」を押してトリガー画面を開きます。
![関数の概要](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-10-1024x309.png)
トリガーの追加画面で「SNS」を選択します。
![トリガーを追加](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-11-1024x360.png)
すると先ほど作成したSNSのトピックが選択できるので、選択して右下の「追加」を押します。
![](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-12.png)
すると概要の部分にSNSが表示されます。
次に、概要の下のタブから「コード」を開きます。
![Lambdaのコード](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-13-1024x522.png)
コードの部分を下記のコードで上書きます。
その時urlの部分をGoogle Chatの設定で作成したWebhookのURLに書き換えてください。
書き換えたら、「Deploy」ボタンを押して更新を反映します。
import json
import os
import urllib.request
def lambda_handler(event, context):
# message_detail = event['body']
# message_detail = json.loads(event['Records'][0]['Sns']['Message'])
message_detail = event['Records'][0]['Sns']['Message']
message = {'text': message_detail}
# url = os.environ['GOOGLE_CHAT_WEBHOOK']
url = '<Google ChatのWebhookのURLを書きます>'
headers = {'Content-Type': 'application/json; charset=UTF-8'}
byte_encoded = json.dumps(message).encode('utf-8')
req = urllib.request.Request(
url=url
, data=byte_encoded
, headers=headers
)
response = urllib.request.urlopen(req)
print(response.read())
Amazon EventBridgeの設定
最後に通知を検知するAmazon EventBridgeの設定を行います。
Amazon EventBridgeの「ルール」を開き、右上の「ルールを作成」を押して作成していきます。
![Amazon EventBridgeのルール](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-14-1024x311.png)
ルールの詳細を定義する画面が開くので、名前を入力します。
ルールタイプは「イベントパターンを待つルール」を選択し、「次へ」を押します。
![ルールの詳細を定義](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-15-1024x640.png)
イベントパターンを構築する画面が開くので、イベントソースで「その他」を選びます。
![イベントパターンを構築](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-17-1024x597.png)
一番下にイベントパターンのエリアがあるので、そこで下記のようにJSONを入力して「次へ」を押します。
![](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-18.png)
登録するJSON
{
"source": ["aws.health"]
}
ターゲットを選択する画面が開くので、ターゲットタイプに「AWSのサービス」
ターゲットを選択で、「SNSトピック」を選択、すると先ほど作成したSNSトピックが選択できるので、それを選択して「次へ」を押します。
![ターゲットを選択](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-19-1024x703.png)
タグを設定する画面が開くので、登録してもしなくても大丈夫です、「次へ」を押します。
![タグを設定](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-20.png)
最後にレビューと作成という確認画面が開くので、確認して大丈夫そうなら一番下の「ルールの作成」を押します。
![レビューと作成](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-21-1024x325.png)
するとルールが作成されます。
![ルールが作成された](https://tech.omablo.com/wp-content/uploads/sites/5/2023/01/image-22-1024x380.png)
これでAWSから何かお知らせが来ると、EventBridgeが検知し、SNSへ知らせてLambdaをキックしてGoogle Chatに通知が来るようになります。
普段チャットを使っている場合はすごく便利なので設定してみてください。
コメント