😊

【AWS】Amazon Q Developer の機能を整理する

2024/08/27に公開

Amazon Q Developer で行えることを整理する。雑メモ。
※ 現時点では日本語非対応

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/chat-with-q.html

AWS 管理コンソール上で利用できる機能

Chatting about your resources

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/chat-actions.html

Chatting about your costs (Preview)

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/chat-costs.html

Diagnosing common errors in the console with Amazon Q Developer

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/diagnose-console-errors.html

  • 対象サービス
    • Amazon Elastic Compute Cloud (Amazon EC2)
    • Amazon Elastic Container Service (Amazon ECS)
    • Amazon Simple Storage Service (Amazon S3)
    • AWS Lambda

Lambda で AWS サービスの API 呼び出す際に権限不足時に教えてくれるか?を試したかったのですが Diagnose ボタンは出てきませんでした。

Lambda 環境変数に日本語を入れてエラーを発生されるとでてきました。

Help me Resolve を押下すると対処方法が出てきました。

Using Amazon Q Developer to chat with AWS Support

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/support-chat.html

以下のようなサポートケースのドラフトを作ってもらえました。
ユーザ目線ではなく Amazon Q 目線になっているのがちょっと気になります。

The customer is receiving the error "amazon-q-test" function can not call ListFunctions API when trying to invoke their Lambda function. The agent provided suggestions to verify IAM permissions, check the execution role, examine the function code, test calling the API directly, and check for service quotas. When the customer requested more help, the agent recommended reaching out to AWS Support for further assistance troubleshooting the issue.

Chatting with Amazon Q Developer in AWS Chatbot

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/q-in-chatbot.html

AWS Chatbot 経由で Teams もしくは Slack で Amazon Q に問い合わせできます。

IDE 上で利用できる機能

サポートされているプログラミング言語は以下を参照。

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/q-language-ide-support.html

Chatting with Amazon Q Developer about code

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/q-in-IDE-chat.html

SIEM on Amazon Opensearch Service のとある Lambda のコードを解説してもらいました。

https://github.com/aws-samples/siem-on-amazon-opensearch-service/blob/585c73562a12edad59910a602f164b0d4825e54e/source/lambda/es_loader/index.py#L277

こんな感じで返ってきます。(画像は一部見切れています)

Explain ではなく Refactor を選択するとリファクタリング案と実際のコードを提示してくれます。(すごい)

Fix ではコードのデバッグとエラー箇所の修正案を提示してくれます。

Optimize はコードのパフォーマンス向上とありましたが、リファクタリング要素も含まれていそうでした。

Adding workspace context to Amazon Q Developer chat in the IDE

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/workspace-context.html

@workspace を付けるとローカルインデックスをコンテキストに含めて回答してくれます

Generating inline suggestions with Amazon Q Developer

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/inline-suggestions.html

旧 Amazon CodeWhisperer に相当するコード補完機能です。


※ 上記ドキュメントより拝借

Lambda 等特定のサービス内の IDE でも利用することができます。

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/setting-up-AWS-coding-env.html

Upgrading language versions with the Amazon Q Developer Agent for code transformation

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/code-transformation.html

Java8,11 から 17 のコードに変換してくれます。
ドキュメント内にサンプルの Java アプリケーションがありますが、試せていません。

Developing software with the Amazon Q Developer Agent for software development

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/software-dev.html

/dev を付けるとコード作成や変更をお願いすることができます。
ローカルインデックスを考慮した変更もしてくれます。

上記例だと Lambda を追加する際に CDK への提案も行ってくれています。

コード修正部分の一部ですが、以下のような感じになっています。

describe_instances のレスポンスに Reservations なんてあるの?と思いましたがありました。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/describe_instances.html

一応上記コードを試してみます。

エラーなく処理されて、以下のように停止が開始されました!

Scanning your code with Amazon Q

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/security-scans.html

vulnerable or low-quality code のスキャンをしてくれます。

Amazon Q に作成してもらった Python コードにも指摘事項が生成されていました。
ページネーションしてないので EC2 インスタンスの数によっては全件取得できないというものですね。
Explain させると paginator 使ったコードがでてきます。

コマンドライン上で利用できる機能

Mac のみ利用可能

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-getting-started-installing.html

Chatting with Amazon Q in the CLI

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-chat.html

以下のコマンドで Q とのチャットが開始できます。

q chat

以下のコンテキストを渡すことができます。
Amazon Q のクライアントアプリでは @hisotry @git を渡してマージコンフリクトを解消するには?という質問をしていました。

@history to pass your shell history
@git to pass information about your current git repository
@env to pass your shell environment

how to send local file to s3 ? と聞いてみるとリファレンス付きで返答してくれました。
コマンドラインに限らず管理コンソールからと Transfer Family 使う方法も提示してくれました。

> how to send local file to s3 ?

There are several ways to upload a local file to an Amazon S3 bucket. Here are a few common methods: [1]

1. Using the AWS Management Console:
   • Open the Amazon S3 console
   • Navigate to the desired bucket
   • Click the "Upload" button
   • Select the file(s) from your local machine
   • Click "Upload" to start the transfer

2. Using the AWS Command Line Interface (CLI):
   • Install and configure the AWS CLI
   • Run the following command, replacing the placeholders with your bucket name and file path:


   aws s3 cp /path/to/local/file s3://your-bucket-name/


3. Using an AWS SDK:
   • Install the AWS SDK for your preferred programming language (e.g., Python, Java, Node.js)
   • Write code to interact with the S3 service and upload your file

  Example in Python using boto3:


python
   import boto3

   # Create an S3 client
   s3 = boto3.client('s3')

   # Open the local file
   with open('path/to/local/file', 'rb') as file_data:
      # Upload the file to S3
      s3.upload_fileobj(file_data, 'your-bucket-name', 'remote-file-name')



4. Using AWS Transfer Family services:
   • AWS Transfer Family provides fully managed support for transferring files directly into and out of Amazon S3 [2]
   • You can use the AWS Transfer Family console, CLI, or API to transfer files

Remember to configure your AWS credentials and permissions correctly before attempting any file transfers. Additionally, consider using server-side encryption to protect your data in transit and at rest.

1 https://docs.aws.amazon.com/quickstarts/latest/s3backup/step-2-upload-file.html
2 https://docs.aws.amazon.com/AmazonS3/latest/userguide/example_s3_Scenario_UsingLargeFiles_section.html

Amazon Q inline on the command line

コマンドライン補完。以下 URL にあるデモの Gif を見るのが分かりやすいです。

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-inline.html

Translating from natural language to bash

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-conversation.html

q translate [prompt] or # [prompt] で自然言語で書いた内容をコマンドに変換してくれる。
そのまま実行もできるし編集もできる。

> q translate send local sample.txt file to amazon s3 test bucket

  Shell · aws s3 cp sample.txt s3://test-bucket/

❯ ⚡ Execute command
  📝 Edit command
  🔄 Regenerate answer
  ❓ Ask another question
  ❌ Cancel

カスタマイズ

社内やチーム内で独自に利用しているライブラリ等を考慮したインライン提案等ができるようになる。
Q Developer Pro のライセンスが必要。
以下のような制限事項もあるので要確認。
https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/customizations-prereq.html

データソースには、少なくとも 2 MB、最大 20 GB のソースコードファイルが含まれている必要があります。
 サポートされている言語から。10 MB を超えるファイルは無視されます。ファイル数に制限はありませんが、カスタマイズでサポートする言語ごとに少なくとも 10 個のファイルを含める必要があります。Amazon S3 データ内
 source、すべてのソースコードがルートではなくディレクトリに配置されることを確認します。
 レベル。ルートレベルのファイルは無視されます。

Amazon Q Customizations では、次の言語とファイル拡張子がサポートされています。
Java (.java)
JavaScript (.js、.jsx)
Python (.py)
TypeScript (.ts、.tsx)

カスタマイズ自体は Q Developer のコンソールから接続先を指定するくらいでできる模様。

ダッシュボード

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/dashboard.html

↑のドキュメント上の画像をひっぱってきてますが、コード提案が受け入れられた数やセキュリティスキャンの回数が分かります。
Organizations 組んでやっている場合は組織全体のが(おそらく)表示されると思うので、Q developer 導入後の活用状況など KPI 周りで活用できるダッシュボードのようです。

Discussion