Amazon Q と Slack の連携方法（Amazon Q for Business Use編）

Amazon QをSlackで利用する方法について発見したので試してみました。

Amazon Qと一口に言っても様々な機能が存在します。
①Amazon Q for AWS Builder Use
②Amazon Q for Business Use

今回は上記2つの機能のうち、②についてご紹介します。
（①の手順は[こちら](https://qiita.com/Neville/items/1b31b3fbbc0154d30a2f)でまとめています）

# 設定方法

## 事前準備
手順についてはGitHub上で公開されていますので、こちらに沿って進めます。
https://github.com/aws-samples/amazon-q-slack-gateway/tree/main

Amazon Q Business Applicationにてアプリケーションを作成する必要があります。作成方法については、[こちら](https://qiita.com/Neville/items/8bc10b1b7a29faae1c6b)で紹介しておりますので、今回は割愛します。

作成したAmazon QのApplication IDを控えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/813fcfd2-f12d-0212-b210-dab8ea0d98dd.png)

## スタックのデプロイ
GitHubのREADMEを参照しながら設定を進めます。

Amazon Qを作成したリージョンの「Launch Stack」を押下すると、Cloud Formationのスタック作成画面に映ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/20b5f8b0-48eb-0aba-f04a-52aa8b8de00e.png)

パラメータ欄にAmazon Qの情報を入力し、スタックを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/c4620bdb-c26f-fea9-a7fd-2a121609fb8c.png)

`AmazonQAppId`：事前準備で控えたApplication ID
`AmazonQRegion`：Amazon Qを作成したリージョン（バージニア北部かオレゴンのみ選択可）
`AmazonQUserId`：Amazon Q ユーザーIDのメールアドレス（未設定の場合はSlackのメールアドレスがユーザーIDとなる）
`ContextDaysToLive`：会話コンテキストの保存日数、デフォルトの90日で設定

CloudFormation スタックのステータスが CREATE_COMPLETE になったら、「出力」タブを開き、`SlackAppManifest`の値を控えます。この出力画面は後続の手順で再度開くことになるため、一旦そのままにしてください。

## Slackアプリケーション設定
[Slack API](https://api.slack.com/apps)を開き、「Create an App」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/11fce028-ceca-eb51-cd19-88ce93070353.png)

「From an app manifest」を押下し、作成するワークスペースを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/0030b475-c14e-4ddc-5ac8-736c8704bad5.png)

「json」タブを開き、先ほど控えた`SlackAppManifest`の値を貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/30484550-804c-3e05-4cbf-1f8aa2ff003b.png)

左メニューより「App Home」を選択し、「Message Tab」欄の`Allow users to send Slash commands and messages from the messages tab`にチェックを入れます。これはユーザーがアプリケーションにメッセージを送信することを許可する設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/4fd87744-aca4-1c22-4d1b-ed08a15994f0.png)

左メニューより「OAuth & Permissions」を選択し、「OAuth Tokens for Your Workspace」の「Install to Workspace」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/8f6ae03b-2783-3aea-e2d1-bc94e700595d.png)

権限のリクエスト画面が表示されるので、「許可する」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/acd51b9c-49cd-29cc-d000-10b25fe1bdf9.png)

「Bot User OAuth Token」に表示されているトークンを控えます。

左メニューより「Basic Information」を選択し、「App Credentials」の「Signing Secret」の値を控えます。（右側の「Show」を押下することで文字列が表示されます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/4b08d68b-92f2-3b0f-425f-47245898d5b9.png)


## シークレット設定
CloudFormationスタックの出力画面に戻り、`SlackSecretConsoleUrl`の値のURLを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/f75f05f9-9d48-f9ab-ec33-527e615d9182.png)


AWS Secrets Managerに遷移しますので、「シークレットの値を取得する」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/9b6d422d-b135-d334-067e-c3ca29a9fc14.png)

「編集する」を押下し、先述で控えたシークレットの値を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/0b4aabc8-0fc2-3425-decc-aa9a399fa613.png)
`SlackSigningSecret`：Basic Information の Signing Secret
`SlackBotUserOAuthToken`：OAuth & Permissions の Bot User OAuth Token

## 動作確認
Slackに移動し、Amazon Qアプリが追加されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/608428fb-a4e6-a395-5377-67a905ae3ec5.png)

これで設定は完了です。Amazon Qと会話ができるか試してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/6015c304-171f-2f42-3a71-e8f4273ccc37.png)

# 実際に操作してみて
Amazon QのWeb Experienceとの相違点（Slackでできないこと）についてまとめてみます。

1. ソースが表示されない
Slackでは、質問の回答の根拠となるデータソースの情報まで表示されませんでした。

2. プラグインは利用不可
なおプラグインで設定したほかアプリケーションとの連携までは、現時点でできないようです。Amazon QとJiraを連携した状態ですが、Issueの起票画面は表示されませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/52805d94-2dda-98fc-c31f-b4eb3dfa8bcd.png)

# 最後に
思ったよりも簡単に作成することができました。

Amazon Qは現在プレビュー版で無償提供されていますが、データソースで作成したIndexは、20Kのドキュメントに対して $0.14/時間（$100/月）のレートで課金が発生します。テストが完了したらアプリケーションを削除することをおすすめします。（私は半月以上放置させた結果、$60も請求が発生していました泣）

# 参考

https://aws.amazon.com/jp/blogs/machine-learning/deploy-a-slack-gateway-for-amazon-q-your-business-expert/