Aurora MySQL で Amazon Aurora 機械学習を使用する - Amazon Aurora

Aurora MySQL で Amazon Aurora 機械学習を使用する

Aurora MySQL DB クラスターで Amazon Aurora 機械学習を使用することで、必要に応じて Amazon Bedrock、Amazon Comprehend, or Amazon SageMaker のいずれかを使用できます。それぞれが異なる機械学習のユースケースをサポートしています。

目次

Aurora 機械学習 を Aurora MySQL で使用するための要件

AWS 機械学習サービスは、お客様の本番環境で設定し、実行するマネージドサービスです。Aurora 機械学習は、Amazon Comprehend、SageMaker および Amazon Bedrock の統合をサポートしています。Aurora MySQL DB クラスターを設定して Aurora 機械学習を使用開始する前に、次の要件と前提条件を理解していることを確認してください。

  • 機械学習サービスは、お使いの Aurora MySQL DB クラスターと同じ AWS リージョン で実行する必要があります。別のリージョンにある Aurora MySQL DB クラスターからの機械学習サービスは使用できません。

  • Aurora MySQL DB クラスターが Amazon Bedrock、Amazon Comprehend または SageMaker サービスとは異なる仮想パブリッククラウド (VPC) にある場合、VPC のセキュリティグループが対象の Aurora 機械学習サービスへのアウトバウンド接続を許可する必要があります。詳細については、「Amazon VPC ユーザーガイド」の「セキュリティグループを使用して AWS リソースへのトラフィックを制御する」を参照してください。

  • そのクラスターで Aurora 機械学習を使用する場合は、Aurora MySQL の下位バージョンを実行している Aurora クラスターをサポートされている上位バージョンにアップグレードできます。詳細については、「Amazon Aurora MySQL のデータベースエンジンの更新」を参照してください。

  • Aurora MySQL DB クラスターは、カスタム DB クラスターパラメータグループを使用する必要があります。使用する各 Aurora 機械学習サービスの設定プロセスの最後で、サービス用に作成された関連する IAM ロールの Amazon リソースネーム (ARN) を追加します。事前に Aurora MySQL 用のカスタム DB クラスターパラメータグループを作成し、それを使用するように Aurora MySQL DB クラスターを設定することで、設定プロセスの最後に変更できるようにしておくことをお勧めします。

  • SageMaker の場合:

    • 推論に使用する機械学習コンポーネントが設定され、使用できる状態になっている必要があります。Aurora MySQL DB クラスターの設定プロセス時に、SageMaker エンドポイントの ARN を用意する必要があります。SageMaker と連携してモデルを準備し、その他のタスクを処理するのは、チームのデータサイエンティストが最も適任だと考えられます。Amazon SageMaker を使い始めるには、「Amazon SageMaker の使用を開始する」を参照してください。推論とエンドポイントの詳細については、「リアルタイム推論」を参照してください。

    • SageMaker を独自のトレーニングデータで使用するには、Aurora 機械学習用に、Amazon S3 バケット を Aurora MySQL の設定の一部として設定する必要があります。これを行うには、SageMaker の統合設定の場合と同じ一般的なプロセスに従います。このオプションの設定プロセスの概要については、「SageMaker に Amazon S3 を使用するように Aurora MySQL DB クラスターを設定する (オプション)」を参照してください。

  • Aurora グローバルデータベースでは、Aurora グローバルデータベースを構成するすべての AWS リージョン で使用する Aurora 機械学習サービスを設定します。例えば、Aurora グローバルデータベースで Aurora 機械学習を SageMaker で使用する場合は、すべての AWS リージョン にある Aurora MySQL DB クラスターごとに次のことを行います。

    • 同じ SageMaker トレーニングモデルとエンドポイントで、Amazon SageMaker サービスを設定します。これらには同じ名前を使用する必要があります。

    • Aurora 機械学習を使用するように Aurora MySQL DB クラスターを設定する」の説明のとおりに IAM ロールを作成します。

    • すべての AWS リージョン にある 各 Aurora MySQL DB クラスターのパラメータグループに、IAM ロールの ARN を追加します。

    これらのタスクでは、Aurora グローバルデータベースを構成するすべての AWS リージョン にある Aurora MySQL のバージョンで Aurora 機械学習を利用できる必要があります。

リージョンとバージョンの可用性

利用できる機能とそのサポートは、各 Aurora データベースエンジンの特定のバージョン、および AWS リージョン によって異なります。

  • Amazon Comprehend と Amazon SageMaker で Aurora MySQL を利用できるバージョンとリージョンの詳細については、「Aurora MySQL を使用した Aurora Machine Learning」を参照してください。

  • Amazon Bedrock は Aurora MySQL バージョン 3.06 以降でのみサポートされています。

    Amazon Bedrock で利用できるリージョンについては、「Amazon Bedrock ユーザーガイド」の「Amazon Bedrock のサポート対象モデル」を参照してください。

Aurora MySQL で Aurora 機械学習を使用する場合にサポートされている機能と制限事項

Aurora MySQL を Aurora 機械学習と合わせて使用する場合、次の制限事項が適用されます。

  • Aurora 機械学習の拡張機能は、ベクトルインターフェイスをサポートしていません。

  • Aurora 機械学習の統合は、トリガーで使用した場合はサポートされません。

  • Aurora 機械学習の関数はバイナリロギング (バイナリログ) レプリケーションと互換性がありません。

    • 設定 --binlog-format=STATEMENT は、Aurora Machine Learning 関数の呼び出しに対して例外をスローします。

    • Aurora の機械学習関数はすべて非決定的であり、非決定的なストアド関数がこの binlog 形式と互換性がないためです。

    詳細については、MySQL ドキュメントの「バイナリログ形式」を参照してください。

  • 常に生成される列を持つテーブルを呼び出すストアド関数はサポートされていません。これはすべての Aurora MySQL ストアド関数に適用されます。このカラムタイプの詳細については、MySQL ドキュメントの「CREATE TABLE と生成された列」を参照してください。

  • Amazon Bedrock の関数は RETURNS JSON をサポートしていません。必要に応じて、TEXT から JSON に変換するのに CONVERT または CAST を使用できます。

  • Amazon Bedrock はバッチリクエストをサポートしていません。

  • Aurora MySQL は、ContentTypetext/csv 値を介して、カンマ区切り値 (CSV) 形式を読み書きする SageMaker エンドポイントをサポートしています。この形式は以下の組み込みの SageMaker アルゴリズムで受け入れられています。

    • 線形学習

    • ランダムカットフォレスト

    • XGBoost

    これらのアルゴリズムの詳細については、「Amazon SageMaker デベロッパーガイド」の「アルゴリズムの選択」を参照してください。

Aurora 機械学習を使用するように Aurora MySQL DB クラスターを設定する

以下のトピックでは、これらの Aurora 機械学習サービスごとに個別の設定手順を参照できます。

Amazon Bedrock を使用するための Aurora MySQL DB クラスターのセットアップ

Aurora 機械学習では、Aurora MySQL DB クラスターが Amazon Bedrock サービスにアクセスして使用できるように、AWS Identity and Access Management (IAM) ロールとポリシーに依存します。以下の手順では、DB クラスターを Amazon Bedrock と統合できるように IAM アクセス許可ポリシーとロールを作成します。

IAM ポリシーを作成するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで、[ポリシー] を選択します。

  3. [ポリシーの作成] を選択します。

  4. [アクセス許可を指定] ページの [サービスの選択] で、[Bedrock] を選択します。

    Amazon Bedrock のアクセス許可が表示されます。

  5. [読み取り] を展開し、[InvokeModel] を選択します。

  6. [リソース][すべて] を選択します。

    [アクセス許可を指定] ページは次の図のようになるはずです。

    InvokeModel オペレーションの Amazon Bedrock の IAM アクセス許可ポリシー。
  7. [Next] を選択します。

  8. [レビューして作成] ページで、BedrockInvokeModel など、ポリシーに名前を入力します。

  9. ポリシーを確認してから、[ポリシーを作成] を選択します。

次に、Amazon Bedrock のアクセス許可ポリシーを使用する IAM ロールを作成します。

IAM ロールを作成するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [ロール] を選択します。

  3. [ロールの作成] を選択します。

  4. [信頼されたエンティティを選択] ページの [ユースケース][RDS] を選択します。

  5. [RDS - データベースにロールを追加] を選択し、[次へ] を選択します。

  6. [アクセス許可を追加] ページの [アクセス許可ポリシー] で、作成した IAM ポリシーを選択し、[次へ] を選択します。

  7. [名前、確認および作成] ページで、ams-bedrock-invoke-model-role など、ロールに名前を入力します。

    ロールは以下の図ようになるはずです。

    InvokeModel オペレーションの Amazon Bedrock の IAM ロール。
  8. ロールを確認し、[ロールを作成] を選択します。

次に、Amazon Bedrock の IAM ロールを DB クラスターに関連付けます。

IAM ロールを DB クラスターと関連付けるには
  1. AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/ を開きます。

  2. ナビゲーションペインから [Databases (データベース)] を選択します。

  3. Amazon Bedrock サービスに接続する Aurora MySQL DB クラスターを選択します。

  4. [Connectivity & security (接続とセキュリティ)] タブを選択します。

  5. [IAM ロールの管理] セクションで、[このクラスターに追加する IAM を選択] を選択します。

  6. 作成した IAM を選択し、[ロールを追加] を選択します。

    IAM ロールは DB クラスターに関連付けられます。最初は [保留中] というステータスで、次に [アクティブ] になります。プロセスが完了すると、このクラスターの現在の IAM ロールリストにロールが表示されます。

    DB クラスターと関連付けられた IAM ロール。

Aurora MySQL DB クラスターに関連付けられているカスタム DB クラスターのパラメータグループの aws_default_bedrock_role パラメータにこの IAM ロールの ARN を追加する必要があります。Aurora MySQL DB クラスターでカスタム DB クラスターパラメータグループを使用していない場合は、Aurora MySQL DB クラスターで使用するパラメータグループを作成して、統合を完了させる必要があります。詳細については、「DB クラスターパラメータグループを使用する」を参照してください。

DB クラスターパラメータを設定するには
  1. Amazon RDS コンソールで、Aurora MySQL DB クラスターの [Configuration] (設定) タブを開きます。

  2. クラスター用に設定された DB クラスターパラメータグループを検索します。リンクを選択してカスタム DB クラスターパラメータグループを開き、[編集] を選択します。

  3. DB クラスターパラメータグループから aws_default_bedrock_role パラメータを検索します。

  4. [値] フィールドで、IAM ロールの ARN を入力します。

  5. [Save changes] (変更の保存) を選択して設定を保存します。

  6. このパラメータ設定を有効にするために、Aurora MySQL DB クラスターのプライマリインスタンスを再起動します。

Amazon Bedrock の IAM 統合が完了しました。データベースユーザーに Aurora 機械学習へのアクセスを許可する で Amazon Bedrock を使用するために Aurora MySQL DB クラスターのセットアップを継続します。

Amazon Comprehend を使用するように Aurora MySQL DB クラスターを設定する

Aurora 機械学習では、Aurora MySQL DB クラスターが Amazon Comprehend サービスにアクセスして使用できるように、AWS Identity and Access Management ロールとポリシーに依存します。以下の手順では、クラスターで Amazon Comprehend を使用できるように、IAM ロールとポリシーを自動的に作成します。

Amazon Comprehend を使用するように Aurora MySQL DB クラスターを設定には
  1. AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/ を開きます。

  2. ナビゲーションペインから [Databases (データベース)] を選択します。

  3. Amazon Comprehend サービスに接続する Aurora MySQL DB クラスターを選択します。

  4. [Connectivity & security (接続とセキュリティ)] タブを選択します。

  5. [IAM ロールの管理] セクションまでスクロールして、[このクラスターに接続するサービスを選択] を選択します。

  6. メニューから [Amazon Comprehend]を選択し、[サービスを接続] を選択します。

    Aurora MySQL DB クラスターによって選択された Amazon Comprehend を示す画像。
  7. [Connect cluster to Amazon Comprehend] (クラスターを Amazon Comprehend に接続する) ダイアログには、追加情報は必要ありません。ただし、Aurora と Amazon Comprehend の統合が現在プレビュー中であることを通知するメッセージが表示される場合があります。次に進む前に、そのメッセージを必ずお読みください。続行しない場合は、[キャンセル] を選択できます。

  8. [Connect service] (サービスに接続する) を選択して統合プロセスを完了します。

    Aurora は IAM ロールを作成します。また、Aurora MySQL DB クラスターが Amazon Comprehend サービスを使用することを許可するポリシーを作成し、そのポリシーをロールにアタッチします。プロセスが完了すると、次の画像に示すように、このクラスターの現在の IAM ロールリストにロールが表示されます。

    Aurora MySQL で Amazon Comprehend を使用して IAM 統合が完了し、アクティブなロールが表示されるようになりました。

    Aurora MySQL DB クラスターに関連付けられているカスタム DB クラスターのパラメータグループの aws_default_comprehend_role パラメータにこの IAM ロールの ARN を追加する必要があります。Aurora MySQL DB クラスターでカスタム DB クラスターパラメータグループを使用していない場合は、Aurora MySQL DB クラスターで使用するパラメータグループを作成して、統合を完了させる必要があります。(詳しくは、「DB クラスターパラメータグループを使用する」を参照してください。)

    カスタム DB クラスターパラメータグループを作成し、Aurora MySQL DB クラスターに関連付けると、以下の手順の実行を継続できます。

    クラスターがカスタム DB クラスターパラメータグループを使用している場合は、以下のようにします。

    1. Amazon RDS コンソールで、Aurora MySQL DB クラスターの [Configuration] (設定) タブを開きます。

    2. クラスター用に設定された DB クラスターパラメータグループを検索します。リンクを選択してカスタム DB クラスターパラメータグループを開き、[編集] を選択します。

    3. DB クラスターパラメータグループから aws_default_comprehend_role パラメータを検索します。

    4. [値] フィールドで、IAM ロールの ARN を入力します。

    5. [Save changes] (変更の保存) を選択して設定を保存します。次の画像に、その例が示されています。

      Aurora MySQL のカスタム DB クラスターのパラメータグループに、IAM ロールの ARN を追加します。

    このパラメータ設定を有効にするために、Aurora MySQL DB クラスターのプライマリインスタンスを再起動します。

Amazon Comprehend の IAM 統合が完了しました。適切なデータベースユーザーにアクセス権を付与して、Amazon Comprehend と連携するように Aurora MySQL DB クラスターの設定を続けてください。

SageMaker を使用するように Aurora MySQL DB クラスターを設定する

以下の手順では、Aurora MySQL DB クラスターで SageMaker を使用できるように、IAM ロールとポリシーを自動的に作成します。この手順を実行する前に、SageMaker エンドポイントが使用可能であることを確認し、必要なときに入力できるようにしてください。通常、チームのデータサイエンティストによって Aurora MySQL DB クラスターから使用できるエンドポイントを作成する作業を行います。このようなエンドポイントは SageMaker コンソールにあります。ナビゲーションペインで [Inference] (推論) メニューを開き、[Endpoints] (エンドポイント) を選択します。次の画像に、その例が示されています。

Aurora MySQL DB クラスターによって選択された SageMaker を示す画像。
SageMaker を使用するように Aurora MySQL DB クラスターを設定するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/ を開きます。

  2. Amazon RDS のナビゲーションメニューから [Databases] (データベース) を選択して、SageMaker サービスに接続する Aurora MySQL DB クラスターを選択します。

  3. [Connectivity & security (接続とセキュリティ)] タブを選択します。

  4. [Manage IAM roles] (IAM ロールの管理) セクションまでスクロールして、[Select a service to connect to this cluster] (このクラスターに接続するサービスの選択) を選択します。セレクタから [SageMaker] を選択します。

    Aurora MySQL DB クラスターによって選択された SageMaker を示す画像。
  5. [Connect service (サービスの接続)] を選択します。

  6. [クラスターを SageMaker に接続する] ダイアログで、SageMaker エンドポイントの ARN を入力します。

    設定プロセス時に入力した SageMaker エンドポイントの Amazon リソースネーム (ARN) を示す画像。
  7. Aurora は IAM ロールを作成します。また、Aurora MySQL DB クラスターが SageMaker サービスを使用することを許可するポリシーを作成し、そのポリシーをロールにアタッチします。プロセスが完了すると、このクラスターの現在の IAM ロールリストにロールが表示されます。

  8. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  9. AWS Identity and Access Management ナビゲーションメニューの [Access management] (アクセス管理) セクションから [Roles] (ロール) を選択します。

  10. リストの中からロールを検索します。その名前は、次のパターンを使用しています。

    rds-sagemaker-your-cluster-name-role-auto-generated-digits
  11. ロールの [Summary] (概要) ページを開いて ARN を検索します。ARN をメモするか、コピーウィジェットでコピーします。

  12. Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  13. Aurora MySQL DB クラスターを選択して、その [Configuration] (設定) タブを選択します。

  14. DB クラスターパラメータグループを検索し、リンクを選択してカスタム DB クラスターパラメータグループを開きます。aws_default_sagemaker_role パラメータを検索し、[Value] (値) フィールドに IAM ロールの ARN を入力して、[Save] (保存) で設定を保存します。

  15. このパラメータ設定を有効にするために、Aurora MySQL DB クラスターのプライマリインスタンスを再起動します。

IAM の設定が完了しました。適切なデータベースユーザーにアクセス権を付与して、SageMaker と連携するように Aurora MySQL DB クラスターの設定を続けてください。

構築済みの SageMaker コンポーネントを使用せず、SageMaker モデルをトレーニングに使用する場合は、次の「SageMaker に Amazon S3 を使用するように Aurora MySQL DB クラスターを設定する (オプション)」の説明のように Amazon S3 バケットを Aurora MySQL DB クラスターに追加する必要もあります。

SageMaker に Amazon S3 を使用するように Aurora MySQL DB クラスターを設定する (オプション)

SageMaker が提供する構築済みコンポーネントを使用せず、独自のモデルで SageMaker を使用するには、Aurora MySQL DB クラスターが使用する Amazon S3 バケットを設定する必要があります。Amazon S3 バケットの作成の詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットの作成」を参照してください。

SageMaker に Amazon S3 バケットを使用するように Aurora MySQL DB クラスターを設定するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/ を開きます。

  2. Amazon RDS のナビゲーションメニューから [Databases] (データベース) を選択して、SageMaker サービスに接続する Aurora MySQL DB クラスターを選択します。

  3. [Connectivity & security (接続とセキュリティ)] タブを選択します。

  4. [Manage IAM roles] (IAM ロールの管理) セクションまでスクロールして、[Select a service to connect to this cluster] (このクラスターに接続するサービスの選択) を選択します。セレクタから [Amazon S3] を選択します。

    Aurora MySQL DB クラスターと統合するサービスとして Amazon S3 を選択します。
  5. [Connect service (サービスの接続)] を選択します。

  6. [クラスターを Amazon S3 に接続する] ダイアログで、以下の画像のように Amazon S3 バケットの ARN を入力します。

    Aurora MySQL DB クラスターに指定された Amazon S3 バケットの ARN の画像。
  7. [Connect service] (サービスに接続する) を選択してこのプロセスを完了します。

SageMaker で Amazon S3 バケットを使用する方法の詳細については、「Amazon SageMaker デベロッパーガイド」の「トレーニングデータセットのアップロードと出力データの保存に Amazon S3 バケットを指定する」を参照してください。SageMaker の使用方法の詳細については、「Amazon SageMaker デベロッパーガイド」の「Amazon SageMaker ノートブックインスタンスの使用開始」を参照してください。

データベースユーザーに Aurora 機械学習へのアクセスを許可する

データベースユーザーには、Aurora 機械学習の関数を呼び出すアクセス許可を付与する必要があります。権限の付与方法は、以下の説明のように、Aurora MySQL DB クラスターに使用する MySQL のバージョンによって異なります。その方法は、Aurora MySQL DB クラスターが使用する MySQL のバージョンによって異なります。

  • Aurora MySQL バージョン 3 (MySQL 8.0 互換) の場合、データベースユーザーに適切なデータベースロールを付与する必要があります。詳細については、「MySQL 8.0 リファレンスマニュアル」の「ロールの使用」を参照してください。

  • Aurora MySQL バージョン 2 (MySQL 5.7 互換) の場合、データベースユーザーに権限が付与されます。詳細は、「MySQL 5.7 リファレンスマニュアル」の「アクセスコントロールおよびアカウントマネジメント」を参照してください。

次の表は、データベースユーザーが機械学習の関数を使用するために必要なロールと権限を示しています。

Aurora MySQL バージョン 3 (ロール) Aurora MySQL バージョン 2 (権限)

AWS_BEDROCK_ACCESS

AWS_COMPREHEND_ACCESS

INVOKE COMPREHEND

AWS_SAGEMAKER_ACCESS

INVOKE SAGEMAKER

Amazon Bedrock の関数へのアクセスの付与

データベースユーザーが Amazon Bedrock の関数にアクセスできるようにするには、次の SQL ステートメントを使用します。

GRANT AWS_BEDROCK_ACCESS TO user@domain-or-ip-address;

データベースユーザーには、Amazon Bedrock と連携するために作成した関数の EXECUTE アクセス許可も付与する必要があります。

GRANT EXECUTE ON FUNCTION database_name.function_name TO user@domain-or-ip-address;

最後に、データベースユーザーは各自のロールを AWS_BEDROCK_ACCESS に設定する必要があります。

SET ROLE AWS_BEDROCK_ACCESS;

これで Amazon Bedrock の関数が使用可能になりました。

Amazon Comprehend 関数へのアクセスを許可する

データベースユーザーが Amazon Comprehend 関数にアクセスできるようにするには、Aurora MySQL バージョンに適合した適切なステートメントを使用します。

  • Aurora MySQL バージョン 3 (MYSQL 8.0 互換)

    GRANT AWS_COMPREHEND_ACCESS TO user@domain-or-ip-address;
  • Aurora MySQL バージョン 2 (MYSQL 5.7 互換)

    GRANT INVOKE COMPREHEND ON *.* TO user@domain-or-ip-address;

Amazon Comprehend 関数が使用可能になりました。使用例については、「Aurora MySQL DB クラスターで Amazon Comprehend を使用する」を参照してください。

SageMaker 関数へのアクセス権の付与

データベースユーザーが SageMaker 関数にアクセスできるようにするには、Aurora MySQL バージョンに適合した適切なステートメントを使用します。

  • Aurora MySQL バージョン 3 (MYSQL 8.0 互換)

    GRANT AWS_SAGEMAKER_ACCESS TO user@domain-or-ip-address;
  • Aurora MySQL バージョン 2 (MYSQL 5.7 互換)

    GRANT INVOKE SAGEMAKER ON *.* TO user@domain-or-ip-address;

データベースユーザーには、SageMaker と連携するために作成した関数の EXECUTE 権限も付与する必要があります。SageMaker エンドポイントのサービスを呼び出すために、db1.anomoly_scoredb2.company_forecasts という 2 つの関数を作成したとします。以下の例に示すように EXECUTE 権限を付与します。

GRANT EXECUTE ON FUNCTION db1.anomaly_score TO user1@domain-or-ip-address1; GRANT EXECUTE ON FUNCTION db2.company_forecasts TO user2@domain-or-ip-address2;

これで SageMaker 関数が使用できるようになりました。使用例については、「Aurora MySQL DB クラスターで SageMaker を使用する」を参照してください。

Aurora MySQL DB クラスターでの Amazon Bedrock の使用

Amazon Bedrock を使用するには、モデルを呼び出すユーザー定義関数 (UDF) を Aurora MySQL データベースに作成します。詳細については、「Amazon Bedrock ユーザーガイド」の「Amazon Bedrock でサポートされているモデル」を参照してください。

UDF は次の構文を使用します。

CREATE FUNCTION function_name (argument type) [DEFINER = user] RETURNS mysql_data_type [SQL SECURITY {DEFINER | INVOKER}] ALIAS AWS_BEDROCK_INVOKE_MODEL MODEL ID 'model_id' [CONTENT_TYPE 'content_type'] [ACCEPT 'content_type'] [TIMEOUT_MS timeout_in_milliseconds];
  • Amazon Bedrock の関数は RETURNS JSON をサポートしていません。必要に応じて、TEXT から JSON に変換するのに CONVERT または CAST を使用できます。

  • CONTENT_TYPE またはACCEPT を指定しなかった場合、デフォルトは application/json です。

  • TIMEOUT_MS を指定しなかった場合、aurora_ml_inference_timeout の値が使用されます。

例えば、次の UDF は Amazon Titan Text Express モデルを呼び出します。

CREATE FUNCTION invoke_titan (request_body TEXT) RETURNS TEXT ALIAS AWS_BEDROCK_INVOKE_MODEL MODEL ID 'amazon.titan-text-express-v1' CONTENT_TYPE 'application/json' ACCEPT 'application/json';

DB ユーザーがこの関数を使用できるようにするには、次の SQL コマンドを使用します。

GRANT EXECUTE ON FUNCTION database_name.invoke_titan TO user@domain-or-ip-address;

これで、以下の例に示されているように、ユーザーは他の関数と同様に invoke_titan を呼び出すことができます。Amazon Titan のテキストモデルに従って、リクエスト本文をフォーマットしてください。

CREATE TABLE prompts (request varchar(1024)); INSERT INTO prompts VALUES ( '{ "inputText": "Generate synthetic data for daily product sales in various categories - include row number, product name, category, date of sale and price. Produce output in JSON format. Count records and ensure there are no more than 5.", "textGenerationConfig": { "maxTokenCount": 1024, "stopSequences": [], "temperature":0, "topP":1 } }'); SELECT invoke_titan(request) FROM prompts; {"inputTextTokenCount":44,"results":[{"tokenCount":296,"outputText":" ```tabular-data-json { "rows": [ { "Row Number": "1", "Product Name": "T-Shirt", "Category": "Clothing", "Date of Sale": "2024-01-01", "Price": "$20" }, { "Row Number": "2", "Product Name": "Jeans", "Category": "Clothing", "Date of Sale": "2024-01-02", "Price": "$30" }, { "Row Number": "3", "Product Name": "Hat", "Category": "Accessories", "Date of Sale": "2024-01-03", "Price": "$15" }, { "Row Number": "4", "Product Name": "Watch", "Category": "Accessories", "Date of Sale": "2024-01-04", "Price": "$40" }, { "Row Number": "5", "Product Name": "Phone Case", "Category": "Accessories", "Date of Sale": "2024-01-05", "Price": "$25" } ] } ```","completionReason":"FINISH"}]}

使用する他のモデルについては、リクエスト本文をそのモデルに合わせて適切にフォーマットしてください。詳細については、「Amazon Bedrock ユーザーガイド」の「基盤モデルの推論パラメータ」を参照してください。

Aurora MySQL DB クラスターで Amazon Comprehend を使用する

Aurora MySQL の場合、Aurora 機械学習には Amazon Comprehend とテキストデータを操作するために、次のような 2 つの組み込み関数が用意されています。分析するテキスト (input_data) と言語 (language_code) を指定します。

aws_comprehend_detect_sentiment

この関数は、テキストの感情的な姿勢がポジティブ、中立、ネガティブ、または混合かを識別します。この関数のリファレンスドキュメントは次のとおりです。

aws_comprehend_detect_sentiment( input_text, language_code [,max_batch_size] )

詳細については、「Amazon Comprehend デベロッパーガイド」の「感情」を参照してください

aws_comprehend_detect_sentiment_confidence

この関数は、特定のテキストについて検出された感情の信頼度を測定します。aws_comprehend_detect_sentiment 関数によってテキストに割り当てられた感情の信頼度を示す値 (タイプ double) を返します。信頼度は 0 ~ 1 の間の統計的メトリクスです。信頼度が高いほど、その結果に与える重みが増えます。関数のドキュメントの概要は次のとおりです。

aws_comprehend_detect_sentiment_confidence( input_text, language_code [,max_batch_size] )

いずれの関数 (aws_comprehend_detect_sentiment_confidence、aws_comprehend_detect_sentiment) において、指定がない場合は max_batch_size にはデフォルト値である 25 を使用します。バッチサイズは常に 0 より大きい必要があります。max_batch_size を使用すると、Amazon Comprehend 関数呼び出しのパフォーマンスを調整しやすくなります。バッチサイズを大きくすると、Aurora MySQL DB クラスターでのメモリ使用量が増えるため、パフォーマンスが加速します。(詳しくは、「Aurora MySQL で Aurora 機械学習を使用した場合のパフォーマンスに関する考慮事項」を参照してください。)

Amazon Comprehend の感情検出関数のパラメータと戻り値のタイプについては、「DetectSentiment」を参照してください。

例: Amazon Comprehend 関数を使用する簡単なクエリ

ここでは、この 2 つの関数を呼び出して、サポートチームに対する顧客満足度を確認する簡単なクエリの例を示します。ヘルプをリクエストするたびに顧客からのフィードバックを保存するデータベーステーブル (support) があるとします。このクエリ例では、両方の組み込み関数をテーブルの feedback 列のテキストに適用し、結果を出力します。この関数によって返される信頼値は、0.0 ~ 1.0 の間の倍数です。出力の読みやすさを向上させるため、このクエリでは小数点以下を 6 桁に丸めて結果を出力します。比較しやすいように、このクエリでは信頼度が最も高い結果から降順で結果をソートします。

SELECT feedback AS 'Customer feedback', aws_comprehend_detect_sentiment(feedback, 'en') AS Sentiment, ROUND(aws_comprehend_detect_sentiment_confidence(feedback, 'en'), 6) AS Confidence FROM support ORDER BY Confidence DESC; +----------------------------------------------------------+-----------+------------+ | Customer feedback | Sentiment | Confidence | +----------------------------------------------------------+-----------+------------+ | Thank you for the excellent customer support! | POSITIVE | 0.999771 | | The latest version of this product stinks! | NEGATIVE | 0.999184 | | Your support team is just awesome! I am blown away. | POSITIVE | 0.997774 | | Your product is too complex, but your support is great. | MIXED | 0.957958 | | Your support tech helped me in fifteen minutes. | POSITIVE | 0.949491 | | My problem was never resolved! | NEGATIVE | 0.920644 | | When will the new version of this product be released? | NEUTRAL | 0.902706 | | I cannot stand that chatbot. | NEGATIVE | 0.895219 | | Your support tech talked down to me. | NEGATIVE | 0.868598 | | It took me way too long to get a real person. | NEGATIVE | 0.481805 | +----------------------------------------------------------+-----------+------------+ 10 rows in set (0.1898 sec)
例: 特定の信頼度を超えるテキストの平均感情を判別する。

一般的な Amazon Comprehend クエリは、感情が特定の値であり、かつ信頼レベルが特定の数値より大きい行を検索します。例えば、次のクエリは、データベース内のドキュメントの平均感情を判別する方法を示しています。クエリでは、評価の信頼度が 80% 以上のドキュメントのみが考慮されます。

SELECT AVG(CASE aws_comprehend_detect_sentiment(productTable.document, 'en') WHEN 'POSITIVE' THEN 1.0 WHEN 'NEGATIVE' THEN -1.0 ELSE 0.0 END) AS avg_sentiment, COUNT(*) AS total FROM productTable WHERE productTable.productCode = 1302 AND aws_comprehend_detect_sentiment_confidence(productTable.document, 'en') >= 0.80;

Aurora MySQL DB クラスターで SageMaker を使用する

Aurora MySQL DB クラスターから SageMaker 関数を使用するには、SageMaker エンドポイントとその推論機能への呼び出しを埋め込むストアド関数を作成する必要があります。そのためには、Aurora MySQL DB クラスターの他の処理タスクと同じように MySQL の CREATE FUNCTION を使用します。

推論のために SageMaker にデプロイされたモデルを使用するには、ストアド関数の MySQL データ定義言語 (DDL) ステートメントを使用して、ユーザー定義関数を作成します。各ストアド関数は、モデルをホストする SageMaker エンドポイントを表します。そのような関数を定義するときには、モデルへの入力パラメータ、呼び出す特定の SageMaker エンドポイント、および戻り値の型を指定します。この関数は、モデルを入力パラメータに適用した後、SageMaker エンドポイントによって計算された推論を返します。

すべての Aurora 機械学習ストアド関数が、数値型または VARCHAR を返します。BIT 以外の数値型を使用できます。JSONBLOBTEXTDATE などの型は使用できません。

以下の例は、SageMaker を操作するための CREATE FUNCTION 構文を示しています。

CREATE FUNCTION function_name ( arg1 type1, arg2 type2, ...) [DEFINER = user] RETURNS mysql_type [SQL SECURITY { DEFINER | INVOKER } ] ALIAS AWS_SAGEMAKER_INVOKE_ENDPOINT ENDPOINT NAME 'endpoint_name' [MAX_BATCH_SIZE max_batch_size];

これは通常の CREATE FUNCTION DDL ステートメントの拡張です。SageMaker 関数を定義する CREATE FUNCTION ステートメントでは、関数本体を指定しません。代わりに、関数本体が通常実行されるキーワード ALIAS を指定します。Aurora 機械学習は現在、この拡張構文の aws_sagemaker_invoke_endpoint のみをサポートしています。endpoint_name パラメータを指定する必要があります。SageMaker エンドポイントは、モデルごとに異なる特性を持つことができます。

注記

CREATE FUNCTION の詳細については、「MySQL 8.0 リファレンスマニュアルの」の「CREATE PROCEDURE および CREATE FUNCTION ステートメント」を参照してください。

max_batch_size パラメータはオプションです。デフォルトでは、最大バッチサイズは 10,000 です。このパラメータを関数で使用すると、SageMaker へのバッチリクエストで処理される入力の最大数を制限できます。max_batch_size パラメータを使用すると、大きすぎる入力によって引き起こされるエラーを回避したり、SageMaker からレスポンスが返される時間を短縮したりすることができます。このパラメータは、SageMaker リクエスト処理に使用される内部バッファのサイズに影響します。max_batch_size に指定する値が大きすぎると、DB インスタンスでかなりの規模のメモリオーバーヘッドが発生する可能性があります。

MANIFEST の設定はデフォルト値 OFF のままにすることをお勧めします。MANIFEST ON オプションを使用できますが、一部の SageMaker 機能では、このオプションでエクスポートされた CSV を直接使用できません。マニフェスト形式は、SageMaker から期待されるマニフェスト形式と互換性がありません。

SageMaker モデルごとに個別のストアド関数を作成します。エンドポイントが特定のモデルに関連付けられ、各モデルは異なるパラメータを受け入れるため、このように関数をモデルにマッピングする必要があります。モデル入力とモデル出力タイプに SQL タイプを使用すると、AWS サービス間でデータをやり取りするタイプ変換エラーを回避できます。モデルを適用できるユーザーを制御できます。また、ランタイム特性を制御するには、最大バッチサイズを表すパラメータを指定します。

現在、すべての Aurora 機械学習関数に NOT DETERMINISTIC プロパティがあります。このプロパティを明示的に指定しなかった場合は、Aurora によって自動的に NOT DETERMINISTIC に設定されます。この要件は、データベースに通知せずに SageMaker モデルを変更できることで実現しています。その場合、Aurora 機械学習関数を呼び出すと、単一のトランザクション内の同じ入力に対して異なる結果が返される可能性があります。

CONTAINS SQL ステートメントで、特性 NO SQLREADS SQL DATAMODIFIES SQL DATA、または CREATE FUNCTION を使用することはできません。

以下は、SageMaker エンドポイントを呼び出して異常を検出する使用例です。SageMaker エンドポイント random-cut-forest-model があります。対応するモデルは、random-cut-forest アルゴリズムによって既にトレーニングされています。モデルは、入力ごとに異常スコアを返します。この例は、スコアが平均スコアから 3 スタンダード偏差 (約 99.9 パーセンタイル) より大きいデータポイントを示しています。

CREATE FUNCTION anomaly_score(value real) returns real alias aws_sagemaker_invoke_endpoint endpoint name 'random-cut-forest-model-demo'; set @score_cutoff = (select avg(anomaly_score(value)) + 3 * std(anomaly_score(value)) from nyc_taxi); select *, anomaly_detection(value) score from nyc_taxi where anomaly_detection(value) > @score_cutoff;

文字列を返す SageMaker 関数の文字セット要件

文字列値を返す SageMaker 関数の戻り値の型として、文字セット utf8mb4 を指定することをお勧めします。それが実用的でない場合は、文字セット utf8mb4 で表される値を保持できるよう、戻り値の型に十分な長さの文字列長を使用します。次の例は、関数の文字セット utf8mb4 を宣言する方法を示しています。

CREATE FUNCTION my_ml_func(...) RETURNS VARCHAR(5) CHARSET utf8mb4 ALIAS ...

現在、文字列を返す各 SageMaker 関数は、戻り値に文字セット utf8mb4 を使用します。SageMaker 関数がその戻り値の型に対して暗黙的または明示的に異なる文字セットを宣言している場合でも、戻り値はこの文字セットを使用します。SageMaker 関数が戻り値に別の文字セットを宣言している場合、長さが十分でないテーブル列に格納すると、返されたデータが暗黙的に切り捨てられる可能性があります。例えば、DISTINCT 句を含むクエリは、テンポラリテーブルを作成します。したがって、クエリ実行中に文字列が内部的に処理される方法が原因で、SageMaker 関数の結果が切り捨てられる場合があります。

SageMaker モデルトレーニング用のデータを Amazon S3 にエクスポートする (高度)

提供されているいくつかのアルゴリズムを使用して、Aurora 機械学習と SageMaker を使い始めることをお勧めします。また、チームのデータサイエンティストによって SQL コードで使用できる SageMaker エンドポイントを提供することをお勧めします。以下に、独自の Amazon S3 バケットを独自の SageMaker モデルと Aurora MySQL DB クラスターで使用する方法についての最低限必要な情報を示します。

機械学習は、トレーニングと推論という 2 つの主要な手順で構成されます。SageMaker モデルをトレーニングするには、データを Amazon S3 バケットにエクスポートします。Amazon S3 バケットは、モデルをデプロイする前にトレーニングする目的で SageMaker ノートブックインスタンスによって使用されます。SELECT INTO OUTFILE S3 ステートメントを使用すると、Aurora MySQL DB クラスターからデータをクエリし、Amazon S3 バケットに保存されているテキストファイルに直接保存できます。これにより、ノートブックインスタンスは、トレーニングのために Amazon S3 バケットからデータを消費します。

Aurora 機械学習は、Aurora MySQL の既存の SELECT INTO OUTFILE 構文を拡張して、データを CSV 形式にエクスポートします。生成された CSV ファイルは、トレーニング目的で、この形式を必要とするモデルで直接使用できます。

SELECT * INTO OUTFILE S3 's3_uri' [FORMAT {CSV|TEXT} [HEADER]] FROM table_name;

このエクステンションは、スタンダードの CSV 形式をサポートしています。

  • TEXT 形式は、既存の MySQL エクスポート形式と同じです。これがデフォルトの形式です。

  • CSV 形式は、RFC-4180 の仕様に従って新しく導入された形式です。

  • オプションのキーワード HEADER を指定すると、出力ファイルに 1 つのヘッダー行が含まれます。ヘッダー行のラベルは、SELECT ステートメントの列名に対応します。

  • キーワード CSV および HEADER を引き続き識別子として使用できます。

SELECT INTO の拡張構文と文法は次のとおりです。

INTO OUTFILE S3 's3_uri' [CHARACTER SET charset_name] [FORMAT {CSV|TEXT} [HEADER]] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]

Aurora MySQL で Aurora 機械学習を使用した場合のパフォーマンスに関する考慮事項

Amazon Bedrock、Amazon Comprehend と SageMaker サービスは、Aurora 機械学習の関数によって呼び出された際には、ほとんどの作業を行います。つまり、これらのリソースを必要に応じて個別にスケーリングできることになります。Aurora MySQL DB クラスターでは、関数呼び出しを最大限効率的に行うことができます。以下に、Aurora 機械学習を使用する際に注意すべきパフォーマンスに関する考慮事項をいくつか示します。

モデルとプロンプト

Amazon Bedrock を使用する場合のパフォーマンスは、使用するモデルとプロンプトに大きく依存します。ユースケースに最適なモデルとプロンプトを選択します。

クエリキャッシュ

Aurora MySQL クエリキャッシュは、Aurora 機械学習関数では機能しません。Aurora MySQL は、Aurora 機械学習関数を呼び出す SQL ステートメントのクエリ結果を、クエリキャッシュに保存しません。

Aurora 機械学習関数呼び出しのバッチ最適化

Aurora クラスターの影響を受ける可能性がある Aurora 機械学習のパフォーマンスの主な側面は、Aurora 機械学習ストアド関数を呼び出すためのバッチモード設定です。通常、機械学習関数はかなりのオーバーヘッドを必要とするため、行ごとに外部サービスを個別に呼び出すことは現実的ではありません。Aurora 機械学習では、多くの行の外部 Aurora 機械学習サービスへの呼び出しを 1 つのバッチに結合することで、このオーバーヘッドを最小限に抑えることができます。Aurora 機械学習は、すべての入力行に対する応答を受け取り、その応答を一度に 1 行ずつ実行中のクエリに返送します。この最適化により、結果を変更せずに Aurora クエリのスループットとレイテンシーが改善されます。

SageMaker エンドポイントに接続されている Aurora ストアド関数を作成するときに、バッチサイズパラメータを定義します。このパラメータは、基礎となる SageMaker の呼び出しごとに転送される行数に影響します。多数の行を処理するクエリの場合、行ごとに個別の SageMaker 呼び出しを行うオーバーヘッドが大規模化する可能性があります。ストアドプロシージャによって処理されるデータセットが大きいほど、バッチサイズを大きくすることができます。

バッチモードの最適化を SageMaker 関数に適用できる場合は、EXPLAIN PLAN ステートメントによって生成されたクエリプランを確認することで判断できます。この場合、実行計画の extra 列には Batched machine learning が含まれます。次の例は、バッチモードを使用する SageMaker 関数の呼び出しを示しています。

mysql> CREATE FUNCTION anomaly_score(val real) returns real alias aws_sagemaker_invoke_endpoint endpoint name 'my-rcf-model-20191126'; Query OK, 0 rows affected (0.01 sec) mysql> explain select timestamp, value, anomaly_score(value) from nyc_taxi; +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ | 1 | SIMPLE | nyc_taxi | NULL | ALL | NULL | NULL | NULL | NULL | 48 | 100.00 | Batched machine learning | +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ 1 row in set, 1 warning (0.01 sec)

組み込みの Amazon Comprehend 関数の 1 つを呼び出す場合、バッチサイズを制御するには、オプションの max_batch_size パラメータを指定します。このパラメータは、各バッチで処理される input_text 値の最大数を制限します。複数の項目を一度に送信することにより、Aurora と Amazon Comprehend 間の往復回数を減らします。バッチサイズの制限は、LIMIT 句を使用したクエリなどで役立ちます。max_batch_size に小さい値を使用することで、入力テキストより Amazon Comprehend を呼び出す回数が増えるのを回避できます。

Aurora 機械学習関数を評価するためのバッチ最適化は、以下の場合に適用されます。

  • 選択リストまたは SELECT ステートメントの WHERE 句に含まれる関数呼び出し。

  • INSERT および REPLACE ステートメントの VALUES リストに含まれる関数呼び出し。

  • UPDATE ステートメントの SET 値の SageMaker 関数。

    INSERT INTO MY_TABLE (col1, col2, col3) VALUES (ML_FUNC(1), ML_FUNC(2), ML_FUNC(3)), (ML_FUNC(4), ML_FUNC(5), ML_FUNC(6)); UPDATE MY_TABLE SET col1 = ML_FUNC(col2), SET col3 = ML_FUNC(col4) WHERE ...;

Aurora 機械学習のモニタリング

次の例に示すように、複数のグローバル変数をクエリすることで、Aurora 機械学習のバッチオペレーションをモニタリングできます。

show status like 'Aurora_ml%';

このステータス変数をリセットするには、FLUSH STATUS ステートメントを使用します。したがって、可変の最後のリセット以降のすべての数値は、合計、平均などを表します。

Aurora_ml_logical_request_cnt

前回のステータスリセット以降、DB インスタンスが Aurora 機械学習サービスに送信されると評価した論理リクエストの数。バッチ処理が使用されているかどうかによっては、この値が Aurora_ml_actual_request_cnt より高くなることがあります。

Aurora_ml_logical_response_cnt

DB インスタンスのユーザーが実行するすべてのクエリで、Aurora MySQL が Aurora 機械学習サービスから受け取るレスポンスの集計カウント。

Aurora_ml_actual_request_cnt

DB インスタンスのユーザーによって実行されたすべてのクエリで、Aurora MySQL が Aurora 機械学習サービスに対して行ったリクエストの集計カウント。

Aurora_ml_actual_response_cnt

DB インスタンスのユーザーが実行するすべてのクエリで、Aurora MySQL が Aurora 機械学習サービスから受け取るレスポンスの集計カウント。

Aurora_ml_cache_hit_cnt

DB インスタンスのユーザーが実行したすべてのクエリで、Aurora MySQL が Aurora 機械学習サービスから受け取る内部キャッシュヒットの集計カウント。

Aurora_ml_retry_request_cnt

前回のステータスリセット以降、DB インスタンスが Aurora 機械学習サービスに送信した再試行リクエストの数。

Aurora_ml_single_request_cnt

DB インスタンスのユーザーが実行するすべてのクエリで、非バッチモードで評価される Aurora 機械学習の関数の集計カウント。

Aurora 機械学習機能から呼び出される SageMaker オペレーションのパフォーマンスのモニタリングについては、Amazon SageMaker のモニタリングを参照してください。