Amazon Q (プレビュー) を試してみた

## 概要
業務専用の新しい生成系 AI 搭載アシスタント「AI Amazon Q」がプレビューになりましたので試してみました。

[AWS が Amazon Q (プレビュー) を発表](https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-amazon-q-preview/)
[Amazon Q (Preview)](https://aws.amazon.com/jp/q/)
[Amazon Q Documentation](https://docs.aws.amazon.com/amazonq/)

料金については、Preview期間は無料で使用できるようです。
[Amazon Q pricing](https://aws.amazon.com/jp/q/pricing/)

今回は技術的な質問とエラー解決について試してみたいと思います。

## Policy設定

以下のガイドを元にPolicy設定を行います。
今回はFull Accessをユーザーに指定しました。
[AWS managed policies for Amazon Q](https://docs.aws.amazon.com/ja_jp/amazonq/latest/aws-builder-use-ug/managed-policy.html)
```
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "AllowAmazonQFullAccess",
					"Effect": "Allow",
			"Action": [
				"q:*"
			],
			"Resource": "*"
		}
	]
}
```

## Chatbot画面表示

サービス"Amazon Q"を検索して実行します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/fb7630e0-5dcb-5805-33ef-914524136700.png">

2023/12/7時点では東京リージョンでは利用できないため利用可能なリージョンを選択します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/116d1ca6-457e-8733-e5cd-6414a21e6695.png">

また、日本語は利用できないため、コンソールの言語を英語に変更します。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/a949aecf-c400-e453-0a4d-8a7d7e320fa0.png">

Chatbot画面が表示されました。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/9f6bbd08-35ec-5d35-3530-c5de861f989f.png">

では早速挨拶してみましょう
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/ea02503e-23ee-d9f9-2707-fcc5166385cc.png">
業務専用だからか、なんだか冷たいですね..

では気をとりなおし、サンプル質問の一つでLambdaの実行時間について質問してみます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/dcf31ee5-d196-9244-52cc-13f2375d435f.png">
きちんと回答されました！

このChatbot画面はコンソール右のQアイコンからいつでも呼び出せます。

## Troubleshoot with Amazon Q

では次にAWSコンソールから実行したいときのトラブルについてAzazon Qが解決案を提示してくれるとのことなのでLambdaで試してみます。

Lambda新規作成でPythonを指定します。
"Hello World"を返すサンプルコードを修正してimport jsonをコメントアウトします。
これで実行してもエラーになるはずです。
```
#import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
```
テスト実行するとfailedの結果とともに"Trouble with Amazon Q"のボタンが表示されるようになりました。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/4e034222-549b-1c94-c2e6-27f391a1774f.png">

Help me resolveボタンで解決策を提示してくれます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/bef9d3f7-2e13-2eb6-d897-32f418d5d11b.png">

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/5b7afdbb-3ec6-c15c-795b-1aff75372cbd.png">

解決策は正しくないですね..
再度Lambdaを実行して解決案を提示してもらいます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/0f43bdac-333c-3a52-f1f8-c10456e3bb4a.png">

"import json"がないので追加する正しい解決案が提示されました！

解決案を適用してテスト実行すると想定通りsucceededになりました。成功した場合は"Trouble with Amazon Q"のボタンは表示されないようです。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/e3ec93ec-baf7-27f5-6a9c-cbf7e2ff621a.png">

提示された解決案が明らかにおかしい場合は再度解決案を提示してもらうことが有効と思われます。
Amazon EC2, Amazon S3, AWS LambdaおよびAmazon ECS利用時にこの機能が使用可能ですので他のサービスでも試したいと思います。