Aurora MySQL で Bedrock を使ってみた

目次

はじめに

現代のアプリケーション開発において、データベースに格納された情報から機械学習の恩恵を受けたいというニーズは日々高まっています。
従来、データベースから機械学習モデルを活用するには、複雑なデータパイプラインの構築や、データの移動・変換処理が必要でした。
例えば、顧客のレビューテキストの感情分析を行いたい場合、従来なら以下のような手順が必要でした。

1. データベースからデータを抽出
2. 機械学習サービスにデータを送信

これを、Amazon Aurora 機械学習(Aurora ML)なら、単一のSQL文で完結し、別サービスへの橋渡しを実装する必要がなくなります。
Aurora MLを使用することで、複雑なデータパイプラインや中間処理が不要になり、SQLだけで機械学習処理が完結します。

今回は、以下で紹介する Amazon Bedrock と Aurora MySQL で Aurora ML を使用する手順を紹介したいと思います。

Aurora MLと連携可能なサービス

Aurora MLは、AWSの以下3つの機械学習・AI関連サービスとシームレスに連携できます。

Amazon Bedrock

Bedrockは、AWSが提供する生成AIのマネージドサービスです。
Claude、Llama、Titanなどの大規模言語モデル(LLM)にアクセスでき、Aurora MLを通じてデータベースから直接これらのモデルを活用し、データベース内のテキストデータに対して要約、翻訳、質問応答、コンテンツ生成などの高度な自然言語処理を直接実行できます。

※Aurora MySQL では、3.06 以降でのみ利用可能。
(この制限は、Bedrockサービス自体が比較的新しく、最新のAuroraエンジンでのみサポートされているためです。)

Amazon SageMaker

SageMakerは、AWSの包括的な機械学習プラットフォームです。
カスタム機械学習モデルの開発、トレーニング、デプロイメントを支援し、Aurora MLとの連携により、独自に作成したモデルをデータベースから直接呼び出すことができます。
SageMakerとの連携の利点は、カスタマイズ性の高さにあります。ビジネス固有の要件に合わせて作成されたモデルを、データベースレベルで活用できるため、高度にパーソナライズされたサービスの構築が可能になります。

Amazon Comprehend

Comprehendは、自然言語処理に特化したマネージドサービスです。
感情分析、エンティティ認識、キーフレーズ抽出、言語検出などの機能を提供します。

※SageMakerとComprehendはリージョンによって対応バージョンが異なりますが、比較的早期からAurora MLに対応しているため、幅広いAuroraバージョンで利用できます。詳細については、以下をご確認下さい。

事前設定手順

BedrockとAurora MySQLでAurora MLを使用する手順について記載します。

前提

  • 東京リージョンで検証しています。
  • 既にAurora MySQL(version 3.08.2)インスタンスが構築済みで、ライターインスタンス1台のみの構成で確認しています。

Bedrockの基盤モデルへのアクセスをリクエスト

前提として、Aurora MLから使用するしないに関わらず、Bedrockを使用する為には、基盤モデルへのアクセスリクエストが完了している必要があります。
こちらについての詳細は、以下のリファレンスをご参照下さい。

上記を実行するユーザについて必要なIAM権限については、以下のリファレンスをご確認下さい。

Bedrockにアクセスする為のIAMポリシーとロールを作成

Aurora MySQLがBedrockにアクセスする為のIAMポリシーを作成します。

ポリシーの作成画面で、「サービス」に「Bedrock」を選択し、「アクション許可」-「読み取り」で「InvokeModel」を選択します。
「リソース」は「すべて」を選択して、「次へ」ボタンを押下します。

ポリシー名に適当な名前を入力し、「ポリシーの作成」を押下します。

今回は以下のリファレンス同様にポリシー名を BedrockInvokeModel としています。

続いて、ロールを作成します。

「信頼されたエンティティタイプ」は「AWS のサービス」を選択し、「サービスまたはユースケース」で「RDS」を選択します。
表示された「ユースケース」で「RDS – Add Role to Database」を選択して、「次へ」を押下します。

「許可ポリシー」で先程作成した BedrockInvokeModel を選択して、「次へ」を押下します。

「ロール名」に適当な名前を入力して、「ロールを作成」を押下します。
ロール名は ams-bedrock-invoke-model-role としています。

※作成後は、後で必要になるので、作成したロールの「ARN」をメモしておきます。

Aurora MySQLに作成したIAMロールを関連付け

Auroraインスタンスの詳細画面で、「接続とセキュリティ」タブから「IAM ロールの管理」で、「このクラスターに追加する IAM ロールを選択」を選択した状態で、先程作成した ams-bedrock-invoke-model-role を選択して「ロールの追加」を押下します。

追加後、「ステータス」が「アクティブ」になっていることを確認します。

DB クラスターパラメータを設定

Aurora MySQLのクラスターパラメータグループの「aws_default_bedrock_role」に、先程ロールを作成した際にメモした「ARN」を設定し、インスタンスを再起動します。

再起動後、Aurora MySQLに接続し、設定したパラメータを確認します。

上記SQLを実行し、以下のように出力されることを確認します。

検証①

それでは、実際に使用してみましょう。
まずは、ユーザにBedrockにアクセスする為に、 AWS_BEDROCK_ACCESS 権限を付与します。

次に、BedrockにアクセスするFUNCTIONを定義します。
以下では、Claude Sonnet 4 を定義しています。
(事前にBedrockでClaude Sonnet 4へのアクセスをリクエストを完了している必要があります。)

その後、作成したFUNCTIONに EXECUTE 権限を付与します。

以上で準備は完了したので、以下のように実行してみます。

正常にチャットの回答が返されています。

検証②

単純にチャットをするだけでは実用性がないので、今度は仮想ECサイトを例に、購入履歴を元にしたレコメンデーション情報を作成してみます。
商品情報としては、以下のような情報があります。

ユーザIDが 1 の「田中太郎さん」は、以下3つの商品を購入済みです。

  • テーブル情報
    • users:ユーザ情報
    • purchases:購入履歴
    • products:商品情報

少し長くなりますが、以下のSQLを実行して、「田中太郎さん」の購入履歴を元にお勧めの商品を3つ提案してもらいましょう。

実行結果は以下のようになりました。
購入履歴からの推薦商品として、妥当な結果ではないでしょうか。

ただ、実行時間に30秒程要したのと、対象ユーザの購入商品と販売している商品情報を全てLLMに渡す必要があり、
トークンも大量に消費してしまうことが想定されるので、このようなケースでは、RAGを組む方が適切な実装方法かなと思います。

※ちなみに、現時点では、Aurora MySQLのAuto MLではベクトルストアが使用できない為、RAGを組むようなことはできませんが、 Heatwave on AWSGenAI ならベクトルストアを使用したRAGも実現できます。

まとめ

Aurora MySQLとBedrockを連携させたAurora MLの使用方法について、事前に必要な設定から簡単な使用例までを解説してみました。

今回は、簡単な使用例で確認しましたが、データベースに格納された情報を最大限に活用したい現代のアプリケーション開発において、Aurora MLを活用できる用途は多岐に渡り、複雑なデータ移動や変換処理なしに、SQL文一つで高度なAI機能を利用できる点は、開発者にとって大きなメリットといえるでしょう。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次