Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
25
Help us understand the problem. What is going on with this article?
@hira3

Amazon CloudWatch のアラームを Microsoft Teams に投稿してみた

More than 3 years have passed since last update.

Amazon Lambda の blueprint に「cloudwatch-alarm-to-slack」というのがあったので、
これを少し改良して CloudWatch のアラームを Microsoft Teams に投稿してみました。

こんなイメージです。
2016-12-15_15h42_11.png

SNS のトピックを作成

最初に、SNS のトピックを作成します。
2016-12-15_11h43_04.png

CloudWatch のアラームを作成

次に、CloudWatch のアラームを作成します。
何でもいいので、今回は EC2 の CPU 使用率のアラームを作成しました。
2016-12-15_11h56_45.png

Microsoft Teams のコネクタを作成

コネクタを追加するには、チャネル名の横にあるその他のオプションのアイコン … を
クリックしてから [コネクタ] をクリックします。
2016-12-15_12h34_19.png

Incomming Webhook を追加します。
2016-12-15_12h43_50.png

コネクタ名を入力します。
イメージを設定しておくと、メッセージの投稿者がわかりやすくなりますね。
2016-12-15_12h53_05.png

「作成」ボタンを押下すると、以下のように Webhook URL が表示されるので、コピーしておきます。
2016-12-15_12h55_06.png

AWS KMSで Webhook URL を暗号化

Microsoft Teams の Incomming Webhook を作成したときに生成された Webhook URL
AWS KMS (Key Management Service) で暗号化します。

AWS KMS でマスターキーを作成

暗号化するためのマスターキーを作成します。
2016-12-15_15h51_14.png

エイリアスを入力。
2016-12-15_15h56_52.png

作成できました。
2016-12-15_16h02_04.png

AWS CLI で Webhook URL を暗号化

暗号化は、AWS CLI で行います。
インストールしていない場合は、ここから取得できます。

マスターキーの「エイリアス名」を指定して、Webhook URL を暗号化します。

コマンド形式は以下の通り。

aws kms encrypt --key-id alias/<作成したエイリアス名> --plaintext="<WebhookURL>"

<作成したエイリアス名>と <WebhookURL> は置き換えてください。
ただし、<WebhookURL> の先頭の https:// は取り除きます。
そうしないとエラーになります。
私はここでハマりました。

例)

AWSCLI>aws kms encrypt --key-id alias/WebhookURL-MsTeams
--plaintext="outlook.office365.com/webhook/xxxx/IncomingWebhook/xxxxxx"
{
    "KeyId": "arn:aws:kms:us-east-1:xxxx:key/xxxxxxx",
    "CiphertextBlob": "〇〇〇〇〇〇"
}

出力された "CiphertextBlob" の値が「暗号化されたWebhook URL」となりますので、
必ず控えておきましょう。
※ 忘れてしまうと、後で見ることができないので、再度暗号化が必要になります。

Amazon Lambda の作成

Select blueprint 画面で「cloudwatch-alarm-to-slack-python」を選びます。
2016-12-15_17h15_22.png

トリガーは SNS で、トピックは最初に作成したものを選択します。
2016-12-15_17h18_38.png

コードを編集します。
slack channel は不要なので、以下の選択した行は削除します。
2016-12-15_17h35_55.png

後は、slack へのメッセージと Microsoft Teams へのメッセージはフォーマットが違うので、
その部分も変更します。

変更前

    slack_message = {
        'channel': SLACK_CHANNEL,
        'text': "%s state is now %s: %s" % (alarm_name, new_state, reason)
    }

    req = Request(HOOK_URL, json.dumps(slack_message))

変更後

    notification_message = {
        'title': "CloudWatchからのお知らせ",
        'text': "%s state is now %s: %s" % (alarm_name, new_state, reason)
    }

    req = Request(HOOK_URL, json.dumps(notification_message))

Lambda Function の完成
2016-12-15_17h40_08.png

トリガーを有効にします。
2016-12-15_18h09_36.png

確認してみる

どうやったら確認できるのか悩んだのですが、Amazon CloudWatch のドキュメントに載ってました。

AWS CLI でアラームの状態を ALARM に変更してしまいます。

AWSCLI>aws cloudwatch set-alarm-state --alarm-name Jenkins_CPU-70% --state-reason "test" --state-value ALARM

ちゃんと投稿されました。
2016-12-15_19h06_26.png

まとめ

今回は blueprint を少しだけいじっただけで、Microsoft Teams へ投稿することができました。
簡単に実現できるので、色々なことに使っていけるんじゃなかと思いました。

slack や Microsoft Teams などに情報を集約すると、とても便利ですよね。

25
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
hira3
i-enter
「効果」をつねに提供します。スマホアプリ開発No.1の実績。最新のIoTに対応した開発も行います。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
25
Help us understand the problem. What is going on with this article?