🤔

今更ながらAWS ChatbotをSlackと連携する

2024/11/16に公開

概要

Slackを用いてEC2の起動やちょっとしたことをChatOpsという形で実現する際の実用的な情報を記載する。

背景

1年後くらい前に設定したけど、別の環境でまたChatopsを設定することになり、忘れそうなので今度こそまとめることにした。

対象読者

  • lambdaとか作らないで簡易的にawsのcliレベルで実装したい人
  • ただ、毎回cliは打ちたくない人

対象外

  • ボタンポチーで一通りの業務フローを行いたい人(これはLambda作ってchatbotでLambdaを実行してくれ)

前提条件

AWSとSlackとの接続が終えている状態であること。
おすすめ記事 : SlackのワークフローでAWS Chatbotを動かして、EC2を開始&停止する仕組みを作ってみた

ここまで出来てればOK

対象のslackチャンネルで@aws help と打って返信が来ること

アドバイス AWS Chatbot aliasを使用する

aliasはご存知の通り、別名である。
仮にSlackでEC2を起動する場合は以下のように長文を打たねばならない。
毎度これを打つのは面倒の場合、あらかじめコマンドをalias登録することにより、
@aws start_ec2と打つことでこれらの手間を省くことができる。

@aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --count 1 \
    --instance-type t2.micro \
    --key-name MyKeyPair \
    --security-group-ids sg-0123456789abcdef0 \
    --subnet-id subnet-0123456789abcdef0 \

alias関係のドキュメント

ドキュメントはCreating and using command aliases in chat channelsを参照

実際にaliasを登録する

今回はinstance起動ではなく、ASGのオートスケーリングを登録したいと思う。
要件は以下

  1. 後々を考慮して対象のASG名は固定ではなく変数化すること
  2. 後々を考慮して対象のASGのカウントは固定ではなく変数化すること

alias登録の例

@aws alias create asg_mng autoscaling update-auto-scaling-group --auto-scaling-group-name $asg --min-size $cnt --desired-capacity $cnt

aliasの実行例

要点としてはaliasを実行する際にはrunを使用してalias名を指定する。
併せて変数が必要であれば使用される順に変数の値を入力する

@aws run asg_mng autoscalingname 1

この実行内容はASG autoscalingname の希望数を1に設定してASGをスケールを変更している。(基本的に0から1に変えていることが多い)

アドバイス Slackのワークフローと併用する

前述のaliasを使用した起動でも結局はコマンドは打つ必要がある。
これではできる人間が限られる。主に開発者向けからは抜け出せない。
ここで使用するのがSlackのワークフローである。
ワークフローを用いることでASGを用いたサーバ起動等、デザインされた作業をボタン操作で実現する。

Discussion