はじめに
Slackへの通知をshell scriptで実行する方法を記載しています
難しいことは何もしていませんが、低リスク低コストで何かしらの通知機能を実装しようというときに参考になるかもしれません
実行結果
- 実行
# 1回目
bash notify_via_slack.sh
# 2回目
bash notify_via_slack.sh "this message." WARN "my user" ":ram:"
実装内容
- コアはこの部分
# Call Slack API
res=`curl -m 60 -sS -X POST ${WEBHOOKURL} --data-urlencode \
"payload={\"channel\": \"${CHANNEL}\", \"username\": \"${USERNAME}\", \"text\": \"${TEXTLINE}\", \"icon_emoji\": \"${ICON}\"}"`
exit $?
- 全量
#!/bin/bash
# Load Slack config
CONFIG_FILE="./slack.config"
if [ ! -f "${CONFIG_FILE}" ]; then
exit 1
fi
source ${CONFIG_FILE}
# Arguments
TEXTLINE=$1
LEVEL=$2
USERNAME=$3
ICON=$4
# Check Arguments
if [ -z "${TEXTLINE}" ]; then
TEXTLINE="Please input \$1:string of notify slack message"
fi
if [ -z "${LEVEL}" ]; then
LEVEL="INFO"
fi
if [ -z "${USERNAME}" ]; then
USERNAME="notify user"
fi
if [ -z "${ICON}" ]; then
ICON=":rotating_light:"
fi
# Check Alert Level
if [ "${LEVEL}" != "INFO" -a "${LEVEL}" != "WARN" -a "${LEVEL}" != "ERROR" ]; then
echo "Please input \$2:string of notify level(INFO/WARN/ERROR)"
exit 2
fi
USERNAME=${USERNAME}'('${EXEC_ENV}/${REGION}')'
TEXTLINE=${LEVEL}' : '${TEXTLINE}
if [ "${LEVEL}" != "INFO" ]; then
TEXTLINE='<!channel> \n'${TEXTLINE}
fi
# Call Slack API
res=`curl -m 60 -sS -X POST ${WEBHOOKURL} --data-urlencode \
"payload={\"channel\": \"${CHANNEL}\", \"username\": \"${USERNAME}\", \"text\": \"${TEXTLINE}\", \"icon_emoji\": \"${ICON}\"}"`
exit $?
使用手順
通知先のSlackワークスペースの準備
Slackに関する操作は調べてください、以下の2つのことをおこないます
- slackのワークスペースに投稿先のチャンネルを用意する
- slackでIncomming Webhookのアプリを作成する
configファイルの作成
slack.config
ファイルを同じパスに作成します
-
REGION
,EXEC_ENV
どこで実行したかがわかるように指定します(クラウド利用で開発環境や本番環境の複数ある想定です) -
CHANNEL
Slackの投稿先を指定します -
WEBHOOKURL
Slackのアプリを作成すると取得できますのでここに指定します
REGION=tokyo-region
EXEC_ENV=dev
CHANNEL="#xxxx"
WEBHOOKURL=https://hooks.slack.com/services/xxxxx/xxxxx/xxxx
スクリプトの実行
各引数に指定する内容は次のとおりです
- $1 : 投稿するメッセージ
- $2 : 通知の種類、INFO/WARN/ERRORのいずれかのみ指定が可能。INFO以外を指定すると
@channel
が付く - $3 : 投稿するアプリのユーザー名
- $4 : 投稿するアプリのアイコン
bash notify_via_slack.sh "this message." WARN "my user" ":ram:"
さいごに
一度の投稿で大量の文字列を送ろうとすると途中で切れてしまいますのでご注意ください
使っていただけたら嬉しいですが、利用される際はご自身の責任のもとご利用ください