Slack ワークフロービルダーとAWS Chatbotで負荷試験環境の構築を楽にする

本記事は、[サムザップ Advent Calendar 2019 #1](https://qiita.com/advent-calendar/2019/sumzap1) の12/23の記事です。

# はじめに
2019年11月25日にAWS Chatbotが[Slack からのコマンドの実行をサポートするようになりました（ベータ版）](https://aws.amazon.com/jp/about-aws/whats-new/2019/11/aws-chatbot-supports-running-commands-from-slack-beta/)。
AWSコマンドラインインターフェイス構文を使用したコマンドがサポートされており、馴染みのあるシンタックスでコマンドを記述できます。
この記事ではAWS Chatbot , Slack ワークフロービルダーを用いて負荷試験環境の起動・停止を簡単にする手順を説明します。

# 前提
負荷試験環境はEC2インスタンスやRDBなど複数のサービスにまたがるため、
普段は使わないので停止させておきたい、使いたいときに起動したいと思っても手順が煩雑になることがあります。
そこでAWS Lambdaを用いて一度に必要なサービスを立ち上げられるようにし、運用しています。
今回はSlack ワークフローの作成からAWS ChatbotとSlackの連携、作成済みのAWS Lambdaを実行するまでの手順を説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/6b3ba7c7-5ff2-6ffa-2400-fd15bfbcf6ed.png)

#手順


## ワークフローの作成

1. Slackの左上のメニューからワークフロービルダーをクリックします。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/2c904db2-ad0f-8311-bf49-325bc137fbb1.png)



2. すると自分が作成・共有されたワークフローの一覧ページが表示されます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/0d93648c-4d2e-4ef6-7eae-fd74e030aba7.png)

  
3. 右上の作成をクリックし、ワークフローの名前を入力し、次へをクリックします。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/64ce01de-e9e3-ed88-8c6e-337cf06874b5.png)


4. Chatbotが有効になるチャンネルを選択し、短い名前(これがチャンネル上部のワークフローの一覧に表示されます)を記入、保存するをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/30d3c5fd-49c7-1b24-5467-7a05a1051f8f.png)


5.  ステップを追加をクリックし、`メッセージの送信先`、メッセージのテキストを入力し保存するをクリックします。
メッセージの送信先は「ワークフローを開始したチャンネル」、メッセージのテキストにはAWS CLIによく似たAWS Lambadaを発火させるコマンドを記入します。
ここではAWS Lambda関数`function_start_stop_service`を入力`{"Action":"stop", "TargetTagKey":"StartStop"}`、リージョン`ap-northeast-1` で実行するものとします。

```shell
  @aws lambda invoke --function-name function_start_stop_service --payload {"Action":"start", "TargetTagKey":"StartStop"} --region ap-northeast-1
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/e1f67056-66c4-6ddf-641e-317f10c6e08a.png)
6. invite
SlackでAWS Chastbotアプリをインストールし使いたいチャンネルからinviteします。  

```shell

/invite @aws
```

## AWS Chatbotの設定
1. AWS側でChatbotの設定を行います。  AWS マネジメントコンソールから[AWS Chatbotに移動](https://us-east-2.console.aws.amazon.com/chatbot/home#/chat-clients)します。
2. Configure new clientをクリックし、Slackを選択、Configureをクリックします。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/a1c5032c-1967-d2ad-0e91-203ec9d8ffb1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/c39f110a-17c5-3026-6c1b-891f31aa2759.png)

3. するとSlack側から許可が求められます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/a1a1e8c1-b26a-0261-6413-302600d5a898.png)

4. 許可をすると作成したclientが現れるので、クリックします。
5. Configure new channelをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/bacf475f-e08d-d389-b732-197f69ce0002.png)

6. Slack channelの設定を記入します。  
今回はprivate channelなのでPrivateを選択し、channel IDを記入します。最初に指定したチャンネルのIDです。IDが分からない場合はSlackの部屋名を右クリックし、リンクをコピーすると表示されます。
7. Permissionsの設定を記入します。  
IAM RoleはCreate an IAM role using templateを選択、Role nameを記入、Pollicy templatesはLambda-invoke command permissionsを選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/2f3a6e10-7907-c0ee-8279-42f471289f44.png)


8. Notificationsの設定をします。Topicは予め作成しておき、そちらを選択しConfigureをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/9367a294-3457-889e-3f35-2aa56274675b.png)


## 実行
1. 作成したチャンネルの上部にある⚡マークをクリックすると、先程作成したアクションが表示されるので選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/48d45278-3515-a488-087d-a08979ae737c.png)


2. yes/noで確認があるのでyesを選択するとAWS Lambdaが実行され結果が返ってきます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27548/5fac09ea-9fbf-cc77-8fcf-1be799a8b7de.png)


# まとめ
以上AWS Chatbot, Slack ワークフロービルダー, AWS Lambdaを用いてアクションを作成しました。
まだベータ版ではありますが、Chatbotを利用すると作業をより簡単にできそうです。


明日は@ohbashunsukeさんの記事です。