Let's Encryptの自動更新結果をIncoming Webhookを利用してSlackに通知する

# 概要
・スクリプトを用いてLet's Encryptの自動更新をさせます。
・Incoming Webhook を利用して、自動更新の結果をSlackに通知させます。
・Let's Encryptの設定については終わっているものとします。

# Webhook URLの取得
### 以下にアクセス
[https://slack.com/services/new/incoming-webhook](https://slack.com/services/new/incoming-webhook )

### チャンネル選択
通知したいチャンネルを選択して追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2092109/868c5810-7f79-12a0-11fc-afda3cdacfec.png)

### Webhook URLの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2092109/cdf3f6b8-976d-5da0-ac00-090c564427ad.png)

# スクリプト例

```sslcheck.sh
#!/bin/bash


#更新前確認
ssl_check1=$(curl -v https://hogehoge.jp/ 3> /dev/null 2>&1 1>&3 | grep 'subject:' | cut -b 13-50)
ssl_check2=$(curl -v https://hogehoge.jp/ 3> /dev/null 2>&1 1>&3 | grep 'expire date:' | cut -b 17-50)


#変換
date1=$ssl_check2
if [[ $date1 == *GMT* ]];
then
    rename_date1=`echo $date1 | sed -e 's/ GMT//g'`
else
    rename_date1=$date1
fi
result_date1=`date -d "$rename_date1" "+%Y/%m/%d %T"`


#更新
sudo systemctl stop httpd
sudo certbot renew > /dev/null 2>&1
sudo systemctl start httpd


#更新後確認
ssl_check3=$(curl -v https://hogehoge.jp/ 3> /dev/null 2>&1 1>&3 | grep 'expire date:' | cut -b 17-50)


#変換
date2=$ssl_check3
if [[ $date2 == *GMT* ]];
then
    rename_date2=`echo $date2 | sed -e 's/ GMT//g'`
else
    rename_date2=$date2
fi
result_date2=`date -d "$rename_date2" "+%Y/%m/%d %T"`


#比較
if [[ $result_date1 < $result_date2 ]]; then
    echo -e "ドメイン:\n$ssl_check1" "\n更新前:\n$ssl_check2" "\n更新後:\n$ssl_check3" "\n結果:\n更新完了" | /root/webhook.sh
else
    echo -e "ドメイン:\n$ssl_check1" "\n更新前:\n$ssl_check2" "\n更新後:\n$ssl_check3" "\n結果:\n更新失敗" | /root/webhook.sh
fi
```

`webhook.sh`
以下参考にさせて頂きました。通知先のWebhook URLやチャンネル名は適宜変更ください。
参考文献: [[10分で出来る]シェルスクリプトの結果をslackに投稿](https://qiita.com/tt2004d/items/50d79d1569c0ace118d6)

メンション付きで通知させたい場合もあると思います。
メンション付で通知させたい場合は、Webhook送信部分を以下のように変更します。

```
@hereの場合
curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"text\": \"<!here>${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null

メンバーの場合
curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"text\": \"<@メンバーID>${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null

ユーザグループの場合
curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"text\": \"<!subteam^ユーザグループID|ユーザグループID名>${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null
```

メンバーIDの確認は、Slackのプロフィールから確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2092109/e5ac7671-b3bc-4c4c-18c6-28af321c30ff.png)

ユーザグループIDの確認は、ブラウザ版のSlackから確認したいユーザグループのメンションがあるところで右クリック → 検証から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2092109/3985d1ac-b263-0ff6-6eca-3c8896319736.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2092109/fcf75acc-37ad-8605-1ebe-c7e63af97ad0.png)

# 実行結果
メンションは付けていません。
Let’s Encryptのサーバ証明書は有効期限の30日前から更新が可能らしいので、有効期限に合わせてcronを設定するのがよさそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2092109/d0a2c2a3-9049-c560-60fb-3ffadb14c04f.png)