Amazon Web Services ブログ

Amazon DynamoDB と Amazon Q Developer による迅速な開発

生成系人工知能 (AI) アシスタントである Amazon Q Developer は、AWS でのアプリケーション開発を加速するのに役立ちます。 Amazon Q を統合開発環境 (IDE) で使用する場合、ソフトウェア開発を支援します。 Amazon Q では、コードに関するチャット、インラインコード補完、新しいコードの生成、コードのセキュリティ脆弱性スキャン、言語の更新、デバッグ、最適化などのコードのアップグレードや改善を行うことができます。

Amazon DynamoDB は、大規模環境で 1 桁ミリ秒単位のパフォーマンスを実現するサーバーレス NoSQL データベースサービスです。 DynamoDB は、 AWS マネジメントコンソール またはプログラムで操作できます。 プログラムで作業する場合の一般的なアプローチは、 AWS CloudFormationAWS Cloud Development Kit (AWS CDK) などの infrastructure as code (IaC) ツールを使用してテーブルを管理し、プログラミング言語 SDK を使用してテーブルにデータを読み書きする方法です。 Amazon Q はこれら両方を支援して、開発のスピードを向上させます。

本記事では、IaC を使用して DynamoDB テーブルを作成し、 Python and Boto3 を使用してテーブルに対して作成、読み取り、更新、削除 (CRUD) オペレーションを実行します (本記事の最後には、JavaScript と Java に関するその他の注意点も記載しています)。 Amazon Q がこれらのタスクの開発速度をどのように向上させるかを説明します。

(本記事は 2024/09/12に投稿された Faster development with Amazon DynamoDB and Amazon Q Developerを翻訳した記事です。)

Amazon Q とのやり取り

今回のデモンストレーションでは、Amazon Q Developer プラグインを IDE にインストールしました。 Amazon Q とやりとりする方法は次の 2 つです。

  • IDE のチャットパネル。テキストバーに自然言語のリクエストを入力し、その応答を評価します。
  • IDE でのインライン候補。 編集中のソースコードファイルに自然言語コメントを追加し、Amazon Q が提供する提案を評価します。

Amazon Q で使用されるすべてのプロンプトが用意されているため、さらに詳しく説明できます。 生成 AI アシスタントは非決定的です。この演習を自分で繰り返しても、例と同じ出力が得られない場合がありますが、Amazon Q は引き続き有益であると確信しています。

自分で書いたコード (提案された Amazon Q コードも含む) の所有権はお客様にあります。 コードの提案を受け入れる前に必ず確認レビューを行う必要があります。また、コードが意図したとおりに動作するように編集が必要がある場合もあります。

DynamoDB テーブルの作成

AWS CloudFormation を使用してソリューションを作成していますが、このプロセスは AWS Serverless Application Model (SAM) CLI または AWS CDK でも機能します。

YAML CloudFormation テンプレートに DynamoDB テーブルを作成します。 このテーブルには、IoT デバイスからの温度値が格納されます。 Amazon Q に IDE のチャットパネルでこれを生成するように依頼しています。 チャットのリクエストと応答は、次のスクリーンショットに示されています。

Amazon Q Developer chat interaction
推奨されたコードは理想的ですが、テーブルに IotDynamoDBTable という名前を付ける要件を忘れていました。 チャットパネルは会話形式で、以前のやりとりを記憶しているので、この追加要件を依頼できます。

Amazon Q Developer chat interaction
提供されたソリューションは私たちが望むものなので、IDE のテキストファイルにコピーして受け入れます。 これにより、CloudFormation YAML を生成する時間を節約できました。 テキストファイルは好きなように編集できます。

global secondary index (GSI) やstream を追加するなどしてテーブルをさらに拡張したい場合は、次の 2 つの方法のいずれかを使用できます。

  • Amazon Q チャットパネルで会話を続ける
  • テキストファイルにコメントを追加してAmazon Q からインラインレスポンスを受け取る

この例では、Amazon Q がインライン候補を提供できるように、コメントを追加して、テキストファイルに既にある内容を拡張してみます。 提案が良ければ、受け入れて続けることができます。 このやりとりは次のアニメーションで確認できます。
Amazon Q Developer inline interaction

CRUD オペレーションの実行

このセクションでは、Amazon Q の助けを借りて DynamoDB テーブルで CRUD オペレーションを実行する例を紹介します。

Create

AWS Lambda 関数で実行されるコードのサンプルを作成し、イベントからすべてのレコードを読み取って DynamoDB テーブルに書き込みます。 イベントのレコードは Amazon Simple Queue Service (Amazon SQS) キューから生成されました。 チャットパネルに戻って始めましょう。
Amazon Q Developer modified lambda
リクエストには、イベントの記録に関する詳細は記載されていませんでした。 この詳細がないため、Amazon Q は提案を作成しましたが、私たちが望んでいたものとはまったく異なります。 繰り返しますが、次の 2 つの選択肢があります。

  • チャットパネルで会話を続け、リクエストを明確にする
  • コードをテキストエディターにコピーし、手動で変更を加える

変更が簡単なため、2番目のオプションを選択しました。 結果は次のスクリーンショットに示されています。
Amazon Q Developer read item
この修正を含めても、Amazon Q でこの関数を作成するほうが、手動で作成した場合よりも早くなります。

Read

今度は、テーブルから項目を読み込むようにコードを拡張します。 deviceId
readingTime の値がわかっているので、プライマリキーを使用して直接検索できます。 必要なものを説明するコメントを Lambda 関数コードに追加し、Amazon Q に推奨コードを提供させます。 これは次のアニメーションで確認できます。

Amazon Q Developer read item
Amazon Q の提案を受け入れました。 これには、更新する必要のあるプレースホルダー、つまりdeviceID の値が含まれています。 これは簡単な変更で、テーブルから項目を読み込む方法を調べるために IDE を離れる必要はありませんでした。

Update

繰り返しになりますが、あるアイテムの deviceIdreadingTime の値がわかっているので、それを更新したいと考えています。温度の値が 150 より大きい場合に限り、badReading という値に true という属性を追加します。 テキストファイルにコメントを追加し、Amazon Q にサンプルを提供させます。 これは次のアニメーションで確認できます。
Amazon Q Developer update item
提案には更新用のプレースホルダーが含まれています。 これは間違いなく時間の節約になります。特に、この操作のドキュメントや例を調べる必要がある場合はなおさらです。 提案を受け入れ、 deviceId の値を更新して完成させます。

Delete

削除したい deviceIdreadingTime の値がわかっています。 このリクエストをさらに詳しく説明するために、この操作が消費した容量と、削除前のアイテムの状態を返すように操作する必要があります。 テキストファイルにコメントを追加し、Amazon Q にサンプルを提供させます。 この結果は次のスクリーンショットで確認できます。
Amazon Q Developer perform delete
サンプルを受け入れ、プレースホルダーを更新してコードを完成させます。

クエリ操作の実行

DynamoDB クエリオペレーションは非常に強力です。1 回のオペレーションで、パーティションキー値は同じでソートキー値が異なる一連の項目を取得したり、キー以外の属性でフィルタリングしたり、ソートしたり、制限したりできます。 これらは、これまで見てきた CRUD 操作よりも実装が複雑です。

この例では、特定の deviceId で昨日発生した温度測定値が 10 ~ 20 度のすべてのアイテムを返すクエリを実行したいと考えています。 対象となるのは、その条件を満たす最新の 5 つのアイテムだけです。

Amazon Q には、すばやく反復処理できる複数のサンプルが用意されています。 仕事を続けるための基盤として、最も良いと感じるものを選びます。 これは次のスクリーンショットで確認できます。
Amazon Q Developer perform query
KeyConditionExpression は正しいですが、readingTime には定数値があります。 これを手動で改善するか、コメントを改善して再試行するか、問題を分解して Amazon Q に1つずつ解決してもらうことができます。

ヒントとして、time モジュールと datetime モジュールのインポートをファイルの先頭に追加します(Amazon Q はインポートステートメントをコンテキストとして重視しており、それらを使用する提案を優先します)。 次に、問題を分解し、Amazon Q に問題を解決させます。 次のスクリーンショットの各コメントは、Amazon Q に解決を依頼した問題の一部であり、そのコードが選択された提案です。 次のコメントを書く前に、Amazon Q に問題を解決させます。

Amazon Q Developer final query

JavaScript と Java を使った作業

JavaScript を使った実験から、開発者のエクスペリエンスはこの記事ですでに示したPythonのものとほぼ同じであることがわかりました。

SDK を使用して DynamoDB を操作するには、v1 (非推奨)、v2拡張クライアントなど、複数のアプローチがあるため、Java のエクスペリエンスは少し変わりやすくなります。 Amazon Q では、プロジェクト内の既存のコードを、どのアプローチを使用するかのコンテキストとして使用します。 既存のプロジェクトを変更する場合、他のプロジェクトと同じアプローチでサンプルを受け取る可能性があります。 プロジェクトが新しい場合は、現在編集中のファイルの先頭に関連する import ステートメントを追加することで、最初の提案でどのアプローチを使用するかを強く決定できます。 チャットパネルとインラインの両方が、これらのインポートステートメントをコンテキストとして使用します。 以下は、2 つの SDK オプションのインポート例です。

  • v2 — import software.amazon.awssdk.services.dynamodb.*
  • 拡張クライアント — import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.*

追加のサポートコードの生成

完全に機能するソリューションを構築するには、追加のサポートコードが必要です。 たとえば、CloudFormation テンプレートには Lambda 関数と関連する AWS Identity and Access Management (IAM) role が必要です。 Amazon Q を使用してこのコードを生成することもできます。 Amazon Q が DynamoDB の運用にどのように役立つかに焦点を当ててきましたが、私たちの経験から言うと、Amazon Q はこれらのリソース (およびその他) を生成する際の時間の節約にも非常に効果的です。

結論

この投稿では、IaC を使用して DynamoDB テーブルを作成し、Amazon Q を使用して CRUD オペレーションを実行する方法を示しました。Amazon Q では、ニーズに応じて自然言語で表現されたサンプルコードを提供することで、DynamoDB を使用する際の時間を節約できます。

提案に少し変更を加えたり、大きくて複雑なリクエストを小さく分割したりすることで、Amazon Q の支援なしにコードを書く場合よりも速く動作するコードを作成できます。

Amazon Q は、計画からメンテナンスまで、ソフトウェア開発ライフサイクル全体をサポートできます。 Amazon Q が各段階でどのようにサポートできるかについては、「Accelerate your Software Development Lifecycle with Amazon Q」を参照してください。

Amazon Q の詳細については、 Amazon Q Developer Guideを参照してください。 また、Best Practices for Prompt Engineering with Amazon CodeWhisperer | AWS… でプロンプト (Amazon Q が提案を生成するために使用する自然言語のコメント) をベストプラクティスに合わせる方法を学ぶこともできます。

DynamoDB の詳細については、 Amazon DynamoDB Developer Guide を参照してください。

作者情報
Chris Gillespie は英国を拠点とするシニアソリューションアーキテクトです。 彼は仕事のほとんどを、変化の速い「born in cloud」の顧客と過ごしています。 仕事以外では、家族との時間を充実させ、体調を整えるよう努めています。