AWSの利用状況をTeamsに自動的に投稿する　①webhookを使ってteamsのチャネルに投稿する

# 目的

2024年現在、自部署ではAWSのコストの増加が問題となっています。
ドル建てなので基本料金が増加してしまうことは仕方がないことですが、
AWSリソースの使いっぱなしによる予算の無駄遣いは見過ごせません。

そこでAWSのコストカットが必要となってくるわけですが、今回の一連の記事では使用していないAWSリソースの棚卸等のダイレクトにコストが減少するような対策ではなく、利用者一人一人のAWS利用料節約の意識を芽生えさせることを目的としたシステムの構築を行っていきたいと思います。
なお、このシステムが実際に採用されるかどうかは別の話です。

ざっくりとしたシステム概要は次のようにします。
**料金やEC2の稼働状況をTeamsに定期的・自動的にチャネルに投稿することでリアルなAWSのコストを周知する。**

複数回に分けて以下のシステムを構築していきます。
EventBridgeで定期的に起動し、Lambdaから各種情報をTeamsへPOST投稿する簡素なものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/369066c1-aa7b-6f13-dee0-f4077366077c.png)

第1回はTeamsのwebhookを使って実際にPOSTリクエストを送ることでTeamsのチャネルに投稿することができることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/4143745e-57e1-284f-4eb6-d97951101434.png)



# Webhook URLを取得する

まず投稿したいチャネルのWebhook URLを取得します。
※プライベートチャネルでも投稿はできますが、設定が必要なためここでは一般チャネルを対象にします。

対象のチャネルをTeamsアプリで開き、チャネル画面の右上の横向き3点リーダー（その他のチャネルオプション）から「ワークフロー」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/6dd2e79f-e8f2-d716-9a12-8101a7b85828.png)

ワークフロー画面のダイアログが出るのでここでは「Webhook 要求を受信するとチャネルに投稿する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/3dafc455-647b-38c4-e31a-49ce34d101b7.png)


Webhook要求受信するとチャネルに投稿するといったタイトルのダイアログ画面に遷移しますので、作成するワークフローの名前を入力します。Webhookの目的が分かるような名前を入力しましょう。
名前の入力が完了したら「次へ」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/d34a9fab-2d86-7435-75e6-b95acb1f2579.png)

次に投稿先のTeamsのチームとチャネルを選択します。先ほど投稿したい対象のチャネルを開いてからここまでの手順を踏んでいれば初期値に対象のチームとチャネルがはいっているはずですが、もし投稿先を変えたい場合はここで変更できます。
Microsoft Teams Team ：投稿先のTeamsのチームを選択する
Microsoft Teams Channel ：投稿先のTeamsのチャネルを選択する（Generalは一般）
投稿先を決定した後、「ワークフローを追加する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/ce16c469-b108-cc47-9a4c-3c22ea6be6bf.png)

これでWebhook URLが払い出されるためコピーしておきます。
コピーしたら「完了」を選択してダイアログを閉じます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/ba7e3a54-6daf-1250-315e-849ac652f74c.png)



# Postリクエストでteamsのチャンネルに投稿する

先ほど払い出したWebhook URLに対してPOST送信を行い、
実際にTeamsに投稿されるのか確認していきます。

本記事ではPOST送信を行うためにPostmanを使用しますが、POST送信とその内容に間違いがなければかまいませんのでお好きな方法でPOSTしてください。

POSTのリクエストbodyは以下のJSONとします。

```json:body
{
    "type": "message",
    "attachments": [
        {
            "contentType": "application/vnd.microsoft.card.adaptive",
            "content": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "type": "AdaptiveCard",
                "version": "1.0",
                "body": [
                    {
                        "type": "TextBlock",
                        "text": "Incoming WebHookのテキストメッセージです",
                        "wrap": true,
                        "size": "Medium"
                    }
                ]
            }
        }
    ]
}
```

（Postman画面）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/4bb8b5cc-6658-133c-5828-d3b21e799260.png)

送信し実際に対象のチャネルに投稿されていることを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/58a20fb7-5602-f0ed-7250-a956b20761c7.png)

これでwebhookを使用したTeamsへの投稿を行えることを確認できました。



# おまけ　─ワークフローを管理する─

作成したワークフローは管理画面から編集や削除を行えます。
環境をクリーンにするため今回作成したワークフローを削除してみます。

Teamsアプリの左ペインから「アプリ」を選択しアプリ画面を開きます。
アプリ画面から「ワークフロー」タブを選択し、「ワークフローを管理」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/1bb03a86-6ae3-ec9c-dbf0-b7255c996266.png)

Workflows画面が表示されました。
ワークフローの一覧が表示されるので、削除したいフロー名を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/01a454ce-70dc-0a81-407e-a057f892a807.png)

対象のワークフローの詳細が表示されました。
画面上部の「削除」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/3c10e075-67ee-00b8-eab8-86d857c96df5.png)

削除ダイアログが表示されるので削除対象に間違いがないことを確認したのちに、「削除」を選択することでワークフローが削除されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895925/2a7d482c-b051-156d-6761-82bc5fe9b94e.png)


## 次回
以上でWebhookを利用したTeams投稿できることを確認できました。
今回はローカルからPOSTを行いましたが、次回はAWS lambdaからPOSTを行う様子を確認していきます。