[AWS Kendra]Slackをデータソースとして設定できるようになったのでやってみた

## AWS Kendraとは
> 自然言語処理および高度な検索アルゴリズムを使用して非構造化データおよび構造化データを検索できるようにする、高精度でインテリジェントな検索サービスです

要するに自然言語で色々検索できちゃうよ〜〜〜っていうすごいやつです

## 今回行うこと
3/23にデータソースとしてSlackを設定できるようになったのでそちらを試してみたいと思います！

https://aws.amazon.com/jp/about-aws/whats-new/2022/03/amazon-kendra-slack-connector-messaging-search/

## やってみる

### 事前準備
検索を行うSlackで適当にメッセージを送信しておく

今回は事前に、英語の適当な文字列,「AWS SAAの試験ガイド英語版のPDF」を送っておきました
![スクリーンショット 2022-04-01 10.30.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/17616be9-32f1-071a-9d91-fa125df5d873.png)


### Slackの設定

1.下記URLにアクセスして検索を行いたいSlackのURLを入力します
https://app.slack.com/apps-manage

2.ワークスペースの名前の左のビルドを選択

3.Create New AppしてFrom scratchを選択

4.AppNameを任意の名前を入力し、検索を行いたいワークスペースを選択してCreate Appを選択

5.左のメニューのOAuth&Permissionsを選択

6.User Token Scopesで下記のScopeを選択
```
channels:history
channels:read
groups:history
groups:read
im:history
im:read
mpim:history
mpim:read
team:read
users.profile:read
users:read
emoji:read
files:read
usergroups:read
```
![スクリーンショット 2022-04-01 10.31.12.png](https://image.docbase.io/uploads/31247fcd-1afd-45be-9570-35e418bfae07.png =WxH)


7.**OAuth Tokens for Your Workspace**のInstall to Workspaceを選択。その後の画面で許可する
![スクリーンショット 2022-03-31 22.44.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/51478085-22ad-2eeb-24f7-d8b5b0814c29.png)


8.User OAuth Tokenをコピーしておく
![スクリーンショット 2022-03-31 22.44.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/a8ab4d82-8559-1382-afc7-04d29dbe7876.png)


#### Slack側でやった設定のまとめ
SlackのワークスペースでUser Token Scopesに設定した権限を付与したユーザーを作成して
Kendra側でデータソースとして設定するときにそのユーザーを選択することでメッセージの取得ができるようになるという感じです


### Kendraの設定

1.KendraにアクセスしてCreate an IndexからIndexを作成します(東京はまだないので注意)

2.下記の内容でNext

| 項目| 値 |
| --- | --- | 
| Index name | test-kendra | 
| Description | Using slack with kendra  | 
| IAM role | Create a new role | 
| Role name | test-kendra-role | 

3.Configure user access controlInfoはデフォルトのままNext

4.Developer editionでcreate

**※indexの作成には30分くらいかかるのでここでコーヒーブレイクなどを行っておいてください**

5.作成したIndexを選択してAdd data sources、Slackを選択します

6.下記の内容でNext

| 項目| 値 |
| --- | --- | 
| Data source name | test-kendra-slack | 
| Description |source connector for slack  | 
| Language | English(en) | 

7.下記の内容でNext

| 項目| 値 |
| --- | --- | 
| Slack workspace team ID | ※xxxxx |  
| Authentication |Create and add new sercret  | 
| Sercret name |AmazonKendra-Slack-slack-key | 
| Slack token | User OAuth Token | 
| Virtual Private Cloud (VPC) | No VPC | 
| IAM role | Create a new role| 
| Role name |AmazonKendra-test-kendra-slack-role| 

※workspace team idはslackをブラウザで開いたときにclientの右の文字列
下記の場合だと123455678がworkspace team id
https://app.slack.com/client/123455678/xxxxx

8.
Select type of content to crawlでまとめて読み込むチャンネルを選択できます。
Public channelsならすべてのPublicチャンネルなどを選択します。
今回は1つのチャンネルのみなのでPublic channelsを選択して、**Additional configuration (channels) - optional**を展開し、対象のチャンネル名を入力してAddを押します

Select crawl start dateはいつからのデータを読み込むかを設定します

それ以外の項目はデフォルトのままでSync run scheduleをRun on demandでNext

9.Set field mappingsはデフォルトのままNext

10.Add data sourceを選択します。選択すると30秒ほどで画面が切り替わります

11.しばらくするとCurrent sync stateがidleになります
![スクリーンショット 2022-03-31 23.24.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/2fce9370-31f0-31f6-80ff-8e413a670cb3.png)

12.Sync nowを押してしばらく待ちます。
ここの長さは読み込む量が多ければ多いほど長くなります

13.Last sync statusがSuccessになってれば完了です
![スクリーンショット 2022-04-01 10.33.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/9837ded9-7f71-f64e-57db-4478eaffcdaa.png)




### 検索してみる

Search indexed contentを選択します
![スクリーンショット 2022-04-01 10.06.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/7bd6d58a-da9d-765d-0d5d-3371c0f87446.png)

ここのフォームで文字を入力すると検索ができていることが確認できます
![スクリーンショット 2022-04-01 10.34.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/f12683a5-6263-5797-e5f4-89f9313771e9.png)


※AND、OR、NOTのようにクエリ言語を使って条件を細かく指定することができます！


## Kendraすごい
簡単に自然言語での検索ができるので単純にすげーなって思いました！
データソースとしてRDSやS3なども使用できます！

会社内でコンテンツが分散していることが多数あるので、そのときなどに内容をまとめて検索できたりするのかなと思いました！

## 今後やってみたいこと
今はKendraの画面から検索しているのですがAPIを使ってSlackからslash commandなどで送った文字列に対して検索を行い結果をそのままslackに返シたりしてみたいと思ってます！