Slack の Slash Command で AWS の EC2 と RDS の起動と停止を実現してみた (3) Slash Command の作成とテスト

本記事は Slack の Slash Command で AWS の EC2 と RDS の起動と停止を実現してみた (2) Lambda 関数と API の準備 の続きです。前提条件や API の準備までの手順は前回までの記事を参照してください。

Slash Command の作成

いよいよ Slack 側に Slash Command を作成します。

Slack のワークスペース設定の [Manage] から [Custom Integrations] → [Slash Commands] を選択します。

[Add Configuration] を押します。

[Choose a Command] で希望のコマンド名 (今回は /hoge-staging) を入力し、 [Add Slash Command Integration] を押します。

[Integration Settings] で Slash Command を設定します。

  • URL : API の準備で発行された URL
  • Method : GET (API の準備で設定したメソッド名)
  • Token : この Slash Command のトークン
  • Customize Name : この Slash Command がチャンネルに結果などを流す際の名前

Show this command in the autocomplete list のところを設定しておくと Slack の入力欄で / を入力した際にヘルプが表示されるようになります。

入力が終わったら画面下部の [Save Integration] を押して、コマンドを保存します。

一旦保存すると、 Slack 上ではすでに下記のように Slash Command が使えるかのように候補が表示されます。

Lambda 関数の発行

Lambda 関数の設定画面に戻り、空けてあった環境変数 SLASH_COMMAND_TOKEN に今作ったスラッシュコマンドの Token を設定し、 [保存] してから、 [新しいバージョンを発行] を押します。

確認ダイアログで [発行] を押すと Lambda 関数が発行されます。これで API からこの Lambda 関数が呼び出せるようになりました。

API Gateway から動作テスト

Lambda で個別にテストもできますが、今回は API Gateway から直接テストします。

API の GET メソッドの設定に戻り、 [テスト] をクリックします。

[クエリ文字列] に Slash Command からのクエリを模した text=start&token=<Slash Command のトークン> を記入し、 [テスト] ボタンを押します。

右半分に実行結果が表示され、 [レスポンス本文] に "response_type": "in_channel", などが記載されていれば API → Lambda まできちんと動作しています。

text=start の部分を text=stop にも変えてテストし、 EC2 や RDS のコンソールで動作状態が切り替わることを確認してください。

Slack から実行

これですべての準備が完了しました。

さっそく Slack で自分宛ての DM ででも /hoge-staging start と叩いてみましょう。きっと実行されるはずです!

おつかれさまでした。

参考: Slack メッセージの書式化

Slack 上で下記のようにカラーバー付きの表示にできるように Lambda 関数の実行結果を、 Slack の仕様に合わせた JSON で返しています。

Lambda 関数の実行成功時は、 AWS 制御関数の結果を返すため、下記のような JSON になっています。この場合は "response_type""in_channel" にして、チャンネルに結果が表示し、動作したことを他のメンバーに知らせるようにしています。

{
    "response_type": "in_channel",
    "attachments": [
        {
            "color": "#32cd32",
            "title": 'Success',
            "text": message,
        },
        {
            "title": 'Result',
            "text": '```' + JSON.stringify(result, null, 2) + '```',
        },
    ],
}

Lambda 関数にくるイベント引数が不正な場合など、実行できなかった場合は "response_type""ephemeral" にして、 Slash Command を叩いた本人にだけ見えるようにして、赤いバー (#ff0000) で表示させています。

{
    "response_type": "ephemeral",
    "attachments": [
        {
            "color": "#ff0000",
            "title": 'Error',
            "text": message,
        },
    ],
}

より詳細な Slack メッセージ用 JSON のヘルプは下記を参照してください。

An introduction to messages | Slack

SNSでもご購読できます。

コメント

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください