Amazon Q for command lineのAIエージェント機能が便利
はじめに
こんにちは、AWSでデベロッパーアドボケイトをしているものです。Amazon QやAmazon Q for command lineを便利に使っていて、これが日本語対応されたら相当便利になるなあ、と思っていたら、先日アップデートが流れてきました。
上記ブログから引用するとこうです。
While Amazon Q Developer’s CLI capabilities are helpful, I miss the power of the agents I have access to in my IDE. Earlier today, Amazon Q Developer announced an enhanced CLI agent within the Amazon Q CLI. Amazon Q Developer, and the new agent is powered by Amazon Bedrock, as a result, the CLI has the power of Claude 3.7 Sonnet step-by-step reasoning.
あらためて始めから試す
インストール
macOSを使っている場合はHomebrewでまず Amazon Q アプリをインストールします。
$ brew install amazon-q
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Downloading https://desktop-release.q.us-east-1.amazonaws.com/1.7.0/Amazon%20Q.dmg
####################################################################################################################################################### 100.0%
==> Installing Cask amazon-q
==> Moving App 'Amazon Q.app' to '/Applications/Amazon Q.app'
🍺 amazon-q was successfully installed!
これでAmazon Qアプリが入ったので、次はAmazon Qを使うための認証情報などの設定をします。
AWS Builder IDの取得
AWS Builder ID というのはAWSアカウントが無くても Amazon Q Developer や AWS Skill Builder が使える便利アカウントなので先に取得します。
遷移した先のページでこの画面が出てくるので "Sign up with Builder ID" を押してメールアドレスなどを登録していきます。
これで Builder ID の設定完了です。
Amazon Qアプリのセットアップ
これでログイン用のIDができたのでAmazon Qアプリのセットアップを始めます。
まずログイン先を選択します。トップ画面のダイアログはこのようになっていますが、この下の方に小さく "Use for Free with Builder ID" とありますね。
その "Use for Free with Builder ID" のリンクを押して、先程作ったBuilder IDでログインすると、次のような画面に飛びます。
するとAmazon Qアプリがログインされた状態になるので、一旦これで設定は終わりです。
ターミナルの設定
この状態でターミナルアプリで新規シェルを立ち上げると次のような表示がされることと思います。(使っているターミナルアプリで異なります)
🚀 Amazon Q supports Wezterm!
Enable integrations with Wezterm by running:
q integrations install input-method
Amazon Q now supports AI-powered inline completions!
To disable run: q inline disable
自分はWezTermを使っているのでこのような表示になりました。そこに書かれているように、必要なものを q
コマンドでインストール。
$ q integrations install input-method
Installed!
You must restart your terminal to finish installing the input method.
これで "Allow" を押して許可しました。
$ q chat
Hi, I'm Amazon Q. Ask me anything.
Things to try
• Fix the build failures in this project.
• List my s3 buckets in us-west-2.
• Write unit tests for my application.
• Help me understand my git status
/acceptall Toggles acceptance prompting for the session.
/help Show the help dialogue
/quit Quit the application
>
これでAmazon Q for command lineが無事に立ち上がりました。試しに質問してみます。さきのブログにもあるようにClaude 3.7 Sonnectを使って推論してるということなので、公式には対応しているとは書いていないですが、試しに日本語で聞いてみます。
> WAV形式の音声ファイルがS3バケット `my-test-bucket` に追加されたのを認識して、そのファイルをMediaConvertに投げてmp3形式に変換するLambda関数を書いて
S3バケットに追加されたWAVファイルをMediaConvertを使ってMP3に変換するLambda関数を作成しましょう。
まず、必要なAWSリソースとLambda関数の構成を確認します。
1. Lambda関数がS3バケットからファイルを読み取る権限
2. MediaConvertを使用する権限
3. 変換後のファイルを保存するための出力先
Lambda関数を作成していきましょう。
python
import json
import boto3
import os
import urllib.parse
def lambda_handler(event, context):
# S3イベントからバケット名とキー名を取得
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
# ファイル拡張子がWAVかどうかチェック
if not key.lower().endswith('.wav'):
print(f"ファイル {key} はWAV形式ではないためスキップします")
return {
'statusCode': 200,
'body': json.dumps('WAVファイルではないためスキップしました')
}
...(略)...
except Exception as e:
print(f"エラーが発生しました: {str(e)}")
return {
'statusCode': 500,
'body': json.dumps(f'エラー: {str(e)}')
}
この関数を使用するには、以下の設定が必要です:
1. Lambda関数の作成
Write to filesystem
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Path: /Users/yoshiyyy/q-cli-test/wav_to_mp3_converter.py
Contents:
1 import json
2 import boto3
3 import os
4 import urllib.parse
5
6 def lambda_handler(event, context):
...(略)...
95 'statusCode': 500,
96 'body': json.dumps(f'エラー: {str(e)}')
97 }
Enter y to run this tool, otherwise continue chatting.
>
なんかそれっぽい回答が普通に日本語で返って来ました。しかも普通にエージェントしてファイルの生成から書き込みまでやってくれようとしています!このまま続けてみましょう。
> y
Writing to filesystem...
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Creating: /Users/yoshiyyy/q-cli-test/wav_to_mp3_converter.py
🟢 Completed in 0.4s
2. 環境変数の設定:
• MEDIACONVERT_ROLE_ARN: MediaConvertがS3にアクセスするためのIAMロールのARN
3. Lambda関数に必要なIAMポリシーの設定:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::my-test-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"mediaconvert:CreateJob",
"mediaconvert:DescribeEndpoints"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::*:role/MediaConvertRole"
}
]
}
4. S3バケットのイベント通知設定:
• S3バケット my-test-bucket に新しいオブジェクトが作成されたときにLambda関数をトリガーするように設定
これで、S3バケットに新しいWAVファイルがアップロードされると、自動的にMediaConvertを使用してMP3形式に変換されます。変換後のファイルは同じバケットの converted/
プレフィックス以下に保存されます。
>
ファイルはちゃんと生成されていました。
$ ls ~/q-cli-test/*.py
/Users/yoshiyyy/q-cli-test/wav_to_mp3_converter.py
このコードは実際に動かしていないので、まだコードや設定の妥当性は見てないですが、ぱっと見た感じ回答は概ね良さそうです。
おわりに
AIエージェント機能はAmazon Q for command lineの新規機能ですが、それ以外にも普通にzshでのファジーな補完機能など、かなり便利なので、お試しで使う方はぜひ Builder ID を作って試してみてください。
Discussion