Aurora PostgreSQL での機械学習 (ML) の使用 - Amazon Aurora

Aurora PostgreSQL での機械学習 (ML) の使用

Amazon Aurora の機械学習を使用すると、SQL 言語を使用して、データベースアプリケーションに機械学習ベースの予測を追加できます。Aurora 機械学習では、Aurora データベースと、SageMaker および Amazon Comprehend といった AWS の機械学習 (ML) サービスの、高度に最適化した統合を使用します。

Aurora Machine Learning には以下のような利点があります。

  • ML ベースの予測を既存のデータベースアプリケーションに追加できます。カスタム統合を構築したり、個別のツールを学んだりする必要はありません。関数の呼び出しとして機械学習処理を SQL クエリに直接埋め込むことができます。

  • ML 統合は、ML サービスがトランザクションデータを処理できるようにするための高速な方法です。機械学習操作を実行するために、データベースからデータを移動する必要はありません。データベースアプリケーションで使用するために、機械学習操作の結果を変換または再インポートする必要はありません。

  • 既存のガバナンスポリシーを使用して、基になるデータおよび生成されたインサイトにアクセスできるユーザーを制御できます。

AWS 機械学習サービスは、独自の本番環境でセットアップおよび実行されるマネージドサービスです。Aurora Machine Learning は現在、センチメント分析のために Amazon Comprehend と統合され、さまざまな ML アルゴリズムのために SageMaker と統合されています。

Amazon Comprehend の一般情報については、「Amazon Comprehend」を参照してください。Aurora と Amazon Comprehend を併用する方法の詳細については、「自然言語処理に Amazon Comprehend を使用する」を参照してください。

SageMaker の一般情報については、「SageMaker」を参照してください。Aurora と SageMaker を併用する方法の詳細については、「SageMaker を使用して独自の ML モデルを実行する」を参照してください。

注記

PostgreSQL 用の Aurora 機械学習は、同じ AWS リージョン内にある SageMaker または Amazon Comprehend サービスにのみ、Aurora クラスターを接続します。

Aurora Machine Learning の前提条件

Aurora Machine Learning は、Aurora 機械学習をサポートしている AWS リージョンで、Aurora PostgreSQL の 10.11 あるいは 11.6 およびそれ以降のバージョンを実行している Aurora クラスターであれば、いずれでも使用できます。そのクラスターで Aurora Machine Learning を使用するときは、Aurora PostgreSQL の古いバージョンで実行している Aurora クラスターを新しいバージョンにアップグレードします。詳細については、「Aurora PostgreSQL の PostgreSQL DB エンジンのアップグレード」を参照してください。

リージョンと Aurora バージョンの可用性については、「Aurora Machine Learning」を参照してください。

Aurora Machine Learning の有効化

ML 機能を有効にするには、以下の手順を実行します。

AWS Machine Learning サービスへの IAM アクセスのセットアップ

SageMaker および Amazon Comprehend サービスにアクセスする前に、AWS Identity and Access Management (IAM) のロールをセットアップします。次に、 Aurora PostgreSQL クラスターに IAM ロールを追加します。これらのロールにより、Aurora PostgreSQL データベースのユーザーは AWS ML サービスへのアクセスを許可されます。

IAM セットアップは、次に示すように AWS Management Console を使用して自動的に実行できます。AWS CLI を使用して IAM アクセスをセットアップするには、「AWS CLI を使用して SageMaker および Amazon Comprehend に IAM ロールを手動でセットアップする」を参照してください。

コンソールを使用して自動的に Aurora DB クラスターを AWS のサービスに接続する

Aurora 機械学習では、DB クラスターは、Amazon S3、SageMaker、および Amazon Comprehend を組み合わせて使用する必要があります。Amazon Comprehend では感情分析を行います。SageMaker は、さまざまな機械学習アルゴリズムに対応します。

Aurora Machine Learning では、Amazon S3 を SageMaker モデルのトレーニングにのみ使用します。Aurora Machine Learning で Amazon S3 を使用する必要があるのは、トレーニング済みのモデルがまだ利用可能でなく、トレーニングがユーザーの責任である場合のみです。

DB クラスターをこれらのサービスに接続するには、Amazon サービスごとに AWS Identity and Access Management(IAM)ロールをセットアップする必要があります。IAM ロールにより、DB クラスターのユーザーは対応するサービスで認証できます。

SageMaker、Amazon Comprehend、または Amazon S3 の IAM ロールを生成するには、必要なサービスごとに以下の手順を繰り返します。

DB クラスターを Amazon サービスに接続するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択して、使用する Aurora PostgreSQL DB クラスターを選択します。

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

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

  5. 接続するサービスを次のリストから選択します。

    • Amazon S3

    • Amazon Comprehend

    • SageMaker

  6. [Connect service (サービスの接続)] を選択します。

  7. [Connect cluster (クラスターの接続)] ウィンドウで特定のサービスに必要な情報を入力します。

    • SageMaker の場合、SageMaker エンドポイントの Amazon リソースネーム (ARN) を入力します。

      SageMaker コンソールのナビゲーションペインで、[エンドポイント] を選択し、使用するエンドポイントの ARN をコピーします。エンドポイントが表す内容の詳細については、「Amazon SageMaker でモデルをデプロイする」を参照してください。

    • Amazon Comprehend の場合は、追加のパラメータを指定しません。

    • Amazon S3 の場合は、使用する Amazon S3 バケットの ARN を入力します。

      Amazon S3 バケット ARN の形式は arn:aws:s3:::bucket_name です。使用する Amazon S3 バケットが、SageMaker モデルをトレーニングするための要件を使用してセットアップされていることを確認します。モデルをトレーニングする場合、Aurora DB クラスターには、Amazon S3 バケットにデータをエクスポートする権限と、バケットからデータをインポートする権限が必要です。

      Amazon S3 バケットの ARN の詳細については、Amazon Simple Storage Service ユーザーガイドの「Specifying resources in a policy」を参照してください。SageMaker で Amazon S3 バケットを使用する方法の詳細については、Amazon SageMaker 開発者ガイド の「ステップ 1: Amazon S3 バケットを作成する」を参照してください。

  8. [Connect service (サービスの接続)] を選択します。

  9. Aurora は新しい IAM ロールを作成し、DB クラスターのリスト [Current IAM roles for this cluster (このクラスターの現在の IAM ロール)] に追加します。IAM ロールのステータスは、最初は [進行中] です。IAM ロール名は、接続されたサービスごとに次のパターンで自動生成されます。

    • Amazon S3 IAM ロール名のパターンは rds-cluster_ID-S3-role-timestamp です。

    • SageMaker IAM ロール名のパターンは rds-cluster_ID-SageMaker-role-timestamp です。

    • Amazon Comprehend IAM ロール名のパターンは rds-cluster_ID-Comprehend-role-timestamp です。

    また、Aurora は新しい IAM ポリシーを作成し、それをロールにアタッチします。ポリシー名は同様の命名規則に従い、タイムスタンプも保持します。

モデル推論用の aws_ml 拡張機能のインストール

必要な IAM ロールを作成し、Aurora PostgreSQL DB クラスターに関連付けたら、SageMaker および Amazon Comprehend 機能を使用する関数をインストールします。aws_ml Aurora PostgreSQL 拡張機能は、SageMaker と直接通信する aws_sagemaker.invoke_endpoint 関数を提供します。この aws_ml 拡張機能は、Amazon Comprehend と直接通信する aws_comprehend.detect_sentiment 関数も提供します。

これらの関数を特定のデータベースにインストールするには、psql プロンプトで次の SQL コマンドを入力します。

psql>CREATE EXTENSION IF NOT EXISTS aws_ml CASCADE;

aws_ml デフォルトデータベースで template1 拡張機能を作成した場合、新しく作成する各データベースでその関数を使用できます。

インストールを検証するには、psql プロンプトで次のように入力します。

psql>\dx

Amazon Comprehend の IAM ロールをセットアップする場合は、次のように設定を検証できます。

SELECT sentiment FROM aws_comprehend.detect_sentiment(null, 'I like it!', 'en');

aws_ml 拡張機能をインストールすると、aws_ml 管理者ロールが作成され、rds_superuser ロールに付与されます。aws_sagemaker サービス用と aws_comprehend サービス用に別々のスキーマも作成されます。rds_superuser ロールは、これら両方のスキーマの OWNER になります。

ユーザーまたはロールが aws_ml 拡張機能内の関数にアクセスできるようにするには、それらの関数に対する EXECUTE 権限を付与します。必要に応じて、その後、実行権限を REVOKE で取り消すことができます。EXECUTE 権限は、デフォルトでこれらのスキーマの関数で PUBLIC から取り消されます。マルチテナントデータベース構成で、テナントが関数にアクセスできないようにするには、1 つ以上の ML サービススキーマで REVOKE USAGE を使用します。

aws_ml 拡張機能のインストール済み関数については、「Aurora Machine Learning の PostgreSQL 関数リファレンス」を参照してください。

自然言語処理に Amazon Comprehend を使用する

Amazon Comprehend では、機械学習を使用してテキストからインサイトや関係性を抽出します。ドキュメントの内容に関するインサイトの抽出用に、Amazon Comprehend では自然言語処理を使用しています。ドキュメント内のエンティティ、キーフレーズ、言語、感情、その他の共通要素を認識することでインサイトを作り上げます。機械学習の経験はほとんどなくても、この Aurora Machine Learning サービスを利用することができます。

Aurora Machine Learning は、データベースに格納されているテキストの感情分析に Amazon Comprehend を使用します。感情 は、テキストで表現された意見です。感情分析は、感情を識別して分類し、何か(トピックや製品など)に対する態度が肯定的、否定的、中立的のいずれであるかを判断します。

注記

Amazon Comprehend は現在、一部の AWS リージョンでのみ使用可能です。Amazon Comprehend を使用できる AWS リージョンを確認するには、AWS のサイトで AWS リージョン表のページを参照してください。

例えば、Amazon Comprehend を使用すると、コンタクトセンターのコールインドキュメントを分析して発信者の感情を検出し、発信者とエージェントのダイナミクスをより深く理解できます。詳細については、AWS 機械学習ブログの「コンタクトセンターの通話の分析」を参照してください。

また、単一のクエリを使用して、感情分析をデータベース内の他の情報の分析と組み合わせることができます。例えば、以下を組み合わせた問題について、コールインセンタードキュメントの平均感情を検出できます。

  • 30 日以上営業している。

  • 特定の製品または機能について。

  • ソーシャルメディアの影響が最も大きい顧客が作成。

Aurora Machine Learning から Amazon Comprehend を使用するのは、SQL 関数を呼び出すのと同じくらい簡単です。aws_ml 拡張機能(モデル推論用の aws_ml 拡張機能のインストール)をインストールすると、Amazon Comprehend によって感情分析を実行する aws_comprehend.detect_sentiment 関数が提供されます。

分析するテキストフラグメントごとに、この関数は感情と信頼水準を判断するのに役立ちます。一般的な Amazon Comprehend クエリでは、感情が特定の値 (POSITIVE または NEGATIVE) を持ち、信頼レベルが特定のパーセントより大きいテーブル行を探します。

例えば、次のクエリは、データベーステーブル、myTable.document 内のドキュメントの平均感情を判別する方法を示しています。クエリでは、評価の信頼度が 80% 以上のドキュメントのみが考慮されます。次の例では、英語 (en) が感情テキストの言語です。

SELECT AVG(CASE s.sentiment WHEN 'POSITIVE' then 1 WHEN 'NEGATIVE' then -1 ELSE 0 END) as avg_sentiment, COUNT(*) AS total FROM myTable, aws_comprehend.detect_sentiment (myTable.document, 'en') s WHERE s.confidence >= 0.80;

テーブル行ごとに感情分析が複数回発生しないようにするには、分析の結果を 1 行ごとに 1 回マテリアライズします。対象の行でこれを実行します。次の例では、フランス語 (fr) が感情テキストの言語です。

-- *Example:* Update the sentiment and confidence of French text. -- UPDATE clinician_notes SET sentiment = (aws_comprehend.detect_sentiment (french_notes, 'fr')).sentiment, confidence = (aws_comprehend.detect_sentiment (french_notes, 'fr')).confidence WHERE clinician_notes.french_notes IS NOT NULL AND LENGTH(TRIM(clinician_notes.french_notes)) > 0 AND clinician_notes.sentiment IS NULL;

関数呼び出しの最適化の詳細については、「Aurora Machine Learning を使用する際のベストプラクティス」を参照してください。

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

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

チームが機械学習タスクを分割する方法に応じて、モデルトレーニングを実行しない場合もあります。他ユーザーが SageMaker モデルを提供する場合は、このセクションをスキップできます。

SageMaker モデルをトレーニングするには、データを Amazon S3 バケットにエクスポートします。Amazon S3 バケットは、デプロイ前にモデルをトレーニングするために SageMaker によって使用されます。Aurora PostgreSQL DB クラスターからデータをクエリし、Amazon S3 バケットに保存されているテキストファイルに直接保存できます。その後、SageMaker は、トレーニングのために Amazon S3 バケットからデータを消費します。SageMaker モデルトレーニングの詳細については、「Amazon SageMaker でモデルをトレーニングする」を参照してください。

注記

SageMaker モデルトレーニングまたはバッチスコアリング用に S3 バケットを作成する場合は、必ず S3 バケット名にテキスト sagemaker を含めてください。SageMaker 用の S3 バケットを作成する方法の詳細については、「ステップ 1: Amazon S3 バケットを作成する」を参照してください。

データのエクスポートの詳細については、「Aurora PostgreSQL DB クラスターから Amazon S3 へのデータのエクスポート」を参照してください。

SageMaker を使用して独自の ML モデルを実行する

SageMaker は、完全マネージド型の機械学習サービスです。SageMaker では 、データサイエンティストと開発者は、機械学習モデルを構築し、トレーニングします。その後、本稼働の準備が完了したホスト環境にモデルを直接デプロイできます。

SageMaker によりデータソースへのアクセスが提供されるので、サーバーのハードウェアインフラストラクチャを管理することなく、調査や分析を実行できます。また、SageMaker では、一般的な機械学習アルゴリズムの利用も可能です。これらのアルゴリズムは、分散環境に置かれた非常に大容量のデータセットに対しても、効率良く処理が行えるよう最適化されています。独自のアルゴリズムやフレームワークもネイティブでサポートされるため、SageMaker は、特定のワークフローに適応する柔軟な分散トレーニングオプションを提供します。

注記

Aurora Machine Learning は現在、ContentTypetext/csv 値を介して、カンマ区切り値 (CSV) 形式を読み書きできる SageMaker エンドポイントをサポートしています。現在この形式を受け入れている組み込みの SageMaker アルゴリズムは、Random Cut Forest、Linear Learner、および XGBoost です。

使用するモデルは、Aurora PostgreSQL クラスターと同じ AWS リージョンでデプロイする必要があります。Aurora Machine Learning は、常に Aurora クラスターと同じ AWS リージョンで、SageMaker エンドポイントを呼び出します。

aws_ml 拡張機能をインストールすると(モデル推論用の aws_ml 拡張機能のインストール を参照 )、aws_sagemaker.invoke_endpoint 関数が提供されます。この関数を使用して、SageMaker モデルを呼び出し、SQL データベースアプリケーション内から直接モデル推論を実行します。

SageMaker モデルを呼び出すユーザー定義関数の作成

SageMaker の各モデルに対して aws_sagemaker.invoke_endpoint を呼び出す個別のユーザー定義関数を作成します。ユーザー定義関数は、モデルをホストする SageMaker エンドポイントを表します。この aws_sagemaker.invoke_endpoint 関数は、ユーザー定義関数内で実行されます。ユーザー定義関数には、次のような多くの利点があります。

  • ML モデルには、すべての ML モデルを aws_sagemaker.invoke_endpoint とのみ呼ぶ代わりに、独自の名前を付けることができます。

  • モデルエンドポイントの URL は、SQL アプリケーションコード内の 1 か所だけで指定できます。

  • 各 ML 関数に対する EXECUTE 権限は、個別に制御できます。

  • SQL タイプを使用して、モデルの入力および出力タイプを宣言することができます。SQL は、ML モデルに渡される引数の数と型を強制し、必要に応じて型変換を実行します。SQL タイプを使用すると、SQL NULL も ML モデルで期待される適切なデフォルト値に変換されます。

  • 最初の数行を少し速く返す場合は、最大バッチサイズを小さくすることができます。

ユーザー定義関数を指定するには、SQL データ定義言語 (DDL) ステートメント CREATE FUNCTION を使用します。関数を定義するときは、以下を指定します。

  • モデルへの入力パラメータ。

  • 呼び出す特定の SageMaker エンドポイント。

  • 戻り型。

このユーザー定義関数は、入力パラメータでモデルを実行した後、SageMaker エンドポイントによって計算された推論を返します。次の例では、2 つの入力パラメータを持つ SageMaker モデルのユーザー定義関数を作成します。

CREATE FUNCTION classify_event (IN arg1 INT, IN arg2 DATE, OUT category INT) AS $$ SELECT aws_sagemaker.invoke_endpoint ( 'sagemaker_model_endpoint_name', NULL, arg1, arg2 -- model inputs are separate arguments )::INT -- cast the output to INT $$ LANGUAGE SQL PARALLEL SAFE COST 5000;

次の点に注意してください。

  • aws_sagemaker.invoke_endpoint 関数入力には、任意のデータ型の 1 つ以上のパラメータを指定できます。

    パラメータの詳細については、aws_sagemaker.invoke_endpoint 関数リファレンスを参照してください。

  • この例では、INT 出力型を使用します。ある varchar 型から別の型に出力をキャストする場合は、INTEGERREALFLOAT、または NUMERIC などのPostgreSQL組み込みスカラー型にキャストする必要があります。このような型の詳細については、PostgreSQL ドキュメントの「データ型」を参照してください。

  • 並列クエリ処理を有効にするには、PARALLEL SAFE を指定します。詳細については、「並列クエリ処理の活用」を参照してください。

  • 関数を実行するためのコストを見積もるには COST 5000 を指定します。関数の推定実行コストを示す正の数を cpu_operator_cost の単位で使用します 。

配列を入力として SageMaker モデルに渡す

この aws_sagemaker.invoke_endpoint 関数は、PostgreSQL 関数の上限である、最大 100 個の入力パラメータを持つことができます。SageMaker モデルが同じ型のパラメータを 100 個以上必要とする場合は、モデルパラメータを配列として渡します。

次の例では、SageMaker 回帰モデルへの入力として配列を渡すユーザー定義関数を作成します。

CREATE FUNCTION regression_model (params REAL[], OUT estimate REAL) AS $$ SELECT aws_sagemaker.invoke_endpoint ( 'sagemaker_model_endpoint_name', NULL, params -- model input parameters as an array )::REAL -- cast output to REAL $$ LANGUAGE SQL PARALLEL SAFE COST 5000;

SageMaker モデルの呼び出し時にバッチサイズを指定する

次の例では、バッチサイズのデフォルトを NULL に設定する SageMaker モデルのユーザー定義関数を作成します。この関数では、呼び出し時に異なるバッチサイズを指定することもできます。

CREATE FUNCTION classify_event ( IN event_type INT, IN event_day DATE, IN amount REAL, -- model inputs max_rows_per_batch INT DEFAULT NULL, -- optional batch size limit OUT category INT) -- model output AS $$ SELECT aws_sagemaker.invoke_endpoint ( 'sagemaker_model_endpoint_name', max_rows_per_batch, event_type, event_day, COALESCE(amount, 0.0) )::INT -- casts output to type INT $$ LANGUAGE SQL PARALLEL SAFE COST 5000;

次の点に注意してください。

  • オプションの max_rows_per_batch パラメータを使用すると、バッチモード関数呼び出しの行数を制御できます。NULL の値を使用すると、クエリオプティマイザは最大バッチサイズを自動的に選択します。詳細については、「Aurora Machine Learning 関数呼び出しのバッチモード実行の最適化」を参照してください。

  • デフォルトでは、パラメータの値として NULL を渡すと、SageMaker に渡す前に空の文字列に変換されます。この例では、入力のタイプが異なります。

  • テキスト以外の入力、または空の文字列以外の値をデフォルトにする必要があるテキスト入力がある場合は、COALESCE ステートメントを使用します。COALESCE を使用して、aws_sagemaker.invoke_endpoint への呼び出しで NULL を目的の NULL 置換値に変換します 。この例の amount パラメータでは、NULL 値が 0.0 に変換されます。

複数の出力を持つ SageMaker モデルの呼び出し

次の例では、複数の出力を返す SageMaker モデルのユーザー定義関数を作成します。関数は、aws_sagemaker.invoke_endpoint 関数の出力を対応するデータ型にキャストする必要があります。例えば、組み込み PostgreSQL ポイント型を (x,y) ペアまたはユーザー定義のコンポジット型に使用できます。

このユーザー定義関数は、出力にコンポジット型を使用して複数の出力を返すモデルから値を返します。

CREATE TYPE company_forecasts AS ( six_month_estimated_return real, one_year_bankruptcy_probability float); CREATE FUNCTION analyze_company ( IN free_cash_flow NUMERIC(18, 6), IN debt NUMERIC(18,6), IN max_rows_per_batch INT DEFAULT NULL, OUT prediction company_forecasts) AS $$ SELECT (aws_sagemaker.invoke_endpoint( 'endpt_name', max_rows_per_batch, free_cash_flow, debt))::company_forecasts; $$ LANGUAGE SQL PARALLEL SAFE COST 5000;

コンポジット型の場合、モデル出力に表示されるのと同じ順序でフィールドを使用し、aws_sagemaker.invoke_endpoint の出力をコンポジット型にキャストします。呼び出し元は、名前または PostgreSQL「*」表記で個々のフィールドを抽出することができます。

Aurora Machine Learning を使用する際のベストプラクティス

aws_ml 関数呼び出しのほとんどの作業は、外部 Aurora Machine Learning サービスで行われます。この分離により、Aurora クラスターから独立した機械学習サービスのリソースをスケーリングできます。Aurora 内では主に、ユーザー定義関数呼び出しを可能な限り効率化することに焦点を当てています。Aurora クラスターから影響を与えることができる側面には、次のようなものがあります。

  • max_rows_per_batch 関数への呼び出し aws_ml の設定。

  • データベースインスタンスの仮想 CPU の数。これは、ML 関数の実行時にデータベースが使用する最大並列度を決定します。

  • 並列クエリ処理を制御する PostgreSQL パラメータ。

Aurora Machine Learning 関数呼び出しのバッチモード実行の最適化

通常、PostgreSQL は関数を一度に1行ずつ実行します。Aurora Machine Learning は、このオーバーヘッドを最小限に抑えるため、バッチモード実行と呼ばれるアプローチを使用して、多くの行による外部 Aurora Machine Learning サービスの呼び出しをバッチ処理に結合します。バッチモードでは、Aurora Machine Learning は入力行のバッチに対する応答を受け取り、その応答を一度に 1 行ずつ実行中のクエリに返送します。この最適化により、PostgreSQL クエリオプティマイザを制限することなく、Aurora クエリのスループットが向上します。

関数が SELECT リスト、WHERE 句、または HAVING 句から参照される場合、Aurora は自動的にバッチモードを使用します。トップレベルの単純な CASE 式は、バッチモードの実行の対象であることに注意してください。最上位レベルの検索 CASE 式は、最初の WHEN 句がバッチモード関数呼び出しを伴う単純な述語である場合にも、バッチモード実行の対象となります。

ユーザー定義関数は LANGUAGE SQL 関数で、PARALLEL SAFECOST 5000 を指定する必要があります。

SELECT ステートメントから FROM 句への関数の移行

通常、バッチモード実行の対象となる aws_ml 関数は、Aurora によって自動的に FROM 句に移行されます。

対象のバッチモード関数から FROM 句への移行は、クエリごとのレベルで手動で調べることができます。これを行うには、EXPLAIN ステートメント (および ANALYZE および VERBOSE) を使用し、各バッチモード Function Scan の下に「バッチ処理」情報を見つけます。クエリを実行せずに EXPLAIN(VERBOSE 付き)を使用することもできます。次に、関数への呼び出しが、元のステートメントで指定されていないネストされたループ結合の下に Function Scan と表示されるかどうかを観察します。

次の例では、プランにネストされたループ結合演算子が存在すると、Aurora が anomaly_score 関数を移行したことを示しています。この関数を SELECT リストから、バッチモード実行の対象である、FROM 句に移行しました。

EXPLAIN (VERBOSE, COSTS false) SELECT anomaly_score(ts.R.description) from ts.R; QUERY PLAN ------------------------------------------------------------- Nested Loop Output: anomaly_score((r.description)::text) -> Seq Scan on ts.r Output: r.id, r.description, r.score -> Function Scan on public.anomaly_score Output: anomaly_score.anomaly_score Function Call: anomaly_score((r.description)::text)

バッチモードの実行を無効にするには、apg_enable_function_migration パラメータを false に設定します。これにより、SELECT から aws_ml 句への FROM 関数の移行が防止されます。以下にその方法を示します。

SET apg_enable_function_migration = false;

apg_enable_function_migration パラメータは、クエリプラン管理の Aurora PostgreSQL apg_plan_mgmt 拡張機能によって認識される Grand Unified Configuration (GUC) パラメータです。セッションで関数の移行を無効にするには、クエリプラン管理を使用して、結果のプランを approved プランとして保存します。実行時に、クエリプラン管理によって、approved プランが apg_enable_function_migration 設定で適用されます。この強制は、apg_enable_function_migration GUC パラメータの設定に関係なく発生します。詳細については、「Aurora PostgreSQL のクエリ実行計画の管理」を参照してください。

max_rows_per_batch パラメータを使用する

max_rows_per_batch および aws_sagemaker.invoke_endpoint 関数の aws_comprehend.detect_sentiment パラメータは、Aurora Machine Learning サービスに転送される行数に影響します。ユーザー定義関数で処理されるデータセットが大きいほど、バッチサイズを大きくすることができます。

バッチモード関数は、多数の行に Aurora Machine Learning 関数呼び出しのコストを分散させる行のバッチを構築することにより、効率を向上させます。ただし、SELECT 句が原因で LIMIT ステートメントが早期終了した場合、クエリが使用する行よりも多くの行にわたってバッチを構築できます。この方法では、AWS アカウントに追加料金が発生する可能性があります。バッチモード実行の利点を得て、大きすぎるバッチの作成を避けるには、関数呼び出しで max_rows_per_batch パラメータに小さい値を使用します。

バッチモードの実行を使用するクエリの EXPLAIN (VERBOSEANALYZE) を実行すると、ネストされたループ結合の下にある FunctionScan 演算子が表示されます。EXPLAIN によって報告されるループの数は、FunctionScan 演算子から行がフェッチされた回数を示します。ステートメントが LIMIT 句を使用する場合、フェッチの数は一貫しています。バッチのサイズを最適化するには、max_rows_per_batch パラメータをこの値に設定します。ただし、バッチモード関数が WHERE 句または HAVING 句の述語で参照されている場合、事前にフェッチの数を知ることができない可能性があります。この場合、ループをガイドラインとして使用し、max_rows_per_batch で実験して、パフォーマンスを最適化する設定を見つけます。

バッチモード実行の検証

関数がバッチモードで実行されたかどうかを確認するには、EXPLAIN ANALYZE を使用します。バッチモードの実行が使用された場合、クエリプランは「バッチ処理」セクションに情報を含めます。

EXPLAIN ANALYZE SELECT user-defined-function(); Batch Processing: num batches=1 avg/min/max batch size=3333.000/3333.000/3333.000 avg/min/max batch call time=146.273/146.273/146.273

この例では、3,333 行を含む 1 つのバッチがあり、処理に 146.273 ミリ秒かかりました。「バッチ処理」セクションには、次の項目が表示されます。

  • この関数スキャン操作に対して存在したバッチ数

  • バッチサイズの平均、最小および最大

  • バッチ実行時間の平均、最小および最大

通常、最終バッチは残りのバッチよりも小さく、多くの場合、平均よりかなり小さい最小バッチサイズになります。

最初の数行をより速く返すには、max_rows_per_batch パラメータを小さい値に設定します。

ユーザー定義関数で LIMIT を使用するときに ML サービスへのバッチモード呼び出し回数を減らすには、max_rows_per_batch パラメータの値を小さくします。

並列クエリ処理の活用

多数のローを処理する際のパフォーマンスを大幅に向上させるために、並列クエリ処理とバッチモード処理を組み合わせることができます。SELECTCREATE TABLE AS SELECT、および CREATE MATERIALIZED VIEW ステートメントに対して並列クエリ処理を使用できます。

注記

PostgreSQL はまだデータ操作言語(DML)ステートメントの並列クエリをサポートしていません。

並列クエリ処理は、データベース内と ML サービス内の両方で行われます。データベースのインスタンスクラスのコア数によって、クエリの実行中に使用できる並列性の程度が制限されます。データベースサーバーは、並列ワーカーのセット間でタスクを分割する並列クエリ実行プランを構築できます。その後、これらのワーカーのそれぞれは、数万行(または各サービスで許可される行数)を含むバッチリクエストを構築できます。

すべての並列ワーカーからのバッチ結合されたリクエストは、AWS のサービス (SageMaker など) のエンドポイントに送信されます。したがって、AWS のサービスエンドポイントの背後にあるインスタンスの数とタイプによって、有効に利用できる並列性の度合いも制限されます。2 コアのインスタンスクラスでも、並列クエリ処理の大幅なメリットを受けることができます。ただし、高い K 度で並列処理を完全に利用するには、少なくとも K 個のコアを持つデータベースインスタンスクラスが必要です。また、K 個のバッチリクエストを並行して処理できるように AWS のサービスを設定する必要もあります。SageMaker では、ML モデルの SageMaker エンドポイントを設定して、十分に高性能なインスタンスクラスの K 初期インスタンスを持つように設定する必要があります。

並列クエリ処理を利用するには、渡す予定のデータを含むテーブルの parallel_workers 格納パラメータを設定します。parallel_workers は、aws_comprehend.detect_sentiment などのバッチモード関数に設定します。オプティマイザが並列クエリプランを選択した場合、AWS ML サービスはバッチと並列の両方で呼び出すことができます。aws_comprehend.detect_sentiment 関数で以下のパラメータを使用すると、四方向並列処理でプランを取得できます。

-- If you change either of the following two parameters, you must restart -- the database instance for the changes to take effect. -- -- SET max_worker_processes to 8; -- default value is 8 -- SET max_parallel_workers to 8; -- not greater than max_worker_processes -- SET max_parallel_workers_per_gather to 4; -- not greater than max_parallel_workers -- You can set the parallel_workers storage parameter on the table that the data -- for the ML function is coming from in order to manually override the degree of -- parallelism that would otherwise be chosen by the query optimizer -- ALTER TABLE yourTable SET (parallel_workers = 4); -- Example query to exploit both batch-mode execution and parallel query -- EXPLAIN (verbose, analyze, buffers, hashes) SELECT aws_comprehend.detect_sentiment(description, 'en')).* FROM yourTable WHERE id < 100;

並列クエリの制御の詳細については、PostgreSQL ドキュメントの「並列プラン」を参照してください。

マテリアライズドビューとマテリアライズド列の使用

SageMaker や Amazon Comprehend などの AWS のサービスをデータベースから呼び出すと、それらのサービスの料金ポリシーに基づきアカウントが課金されます。アカウントへの請求を最小限に抑えるために、AWS サービスを呼び出した結果をマテリアライズド列に生成して、AWS のサービスが入力行ごとに複数回呼び出されないようにすることができます。必要に応じて、materializedAt タイムスタンプカラムを追加して、カラムがマテリアライズされた時刻を記録できます。

通常の単一行 INSERT ステートメントのレイテンシーは、通常、バッチモード関数を呼び出すレイテンシーよりもはるかに短くなります。したがって、アプリケーションが実行するすべての単一行 INSERT に対してバッチモード関数を呼び出すと、アプリケーションのレイテンシー要件を満たすことができない場合があります。AWS のサービスをマテリアライズド列に呼び出した結果をマテリアライズするには、通常、高性能アプリケーションはマテリアライズド列に値を設定する必要があります。これを行うために、大量の行のバッチを同時に処理する UPDATE ステートメントを定期的に発行します。

UPDATE では、実行中のアプリケーションに影響を与える可能性のある行レベルのロックが行われます。したがって、SELECT ... FOR UPDATE SKIP LOCKED を使用するか、MATERIALIZED VIEW を使用する必要があります。

大量の行をリアルタイムで操作する分析クエリは、バッチモードのマテリアライズとリアルタイム処理を組み合わせることができます。これを行うために、これらのクエリは、事前マテリアライズド結果の UNION ALL をアセンブルし、まだマテリアライズド結果がない行をクエリします。場合によっては、このような UNION ALL が複数の場所で必要になるか、またはサードパーティーのアプリケーションによってクエリが生成されます。その場合は、VIEW を作成し、UNION ALL 操作をカプセル化して、この詳細が SQL アプリケーションの残りの部分に表示されないようにすることができます。

マテリアライズドビューを使用すると、スナップショットで任意の SELECT ステートメントの結果をマテリアライズできます。また、これを使用して、将来いつでもマテリアライズドビューを更新することもできます。現在、PostgreSQL は増分更新をサポートしていないため、マテリアライズドビューが更新されるたびにマテリアライズドビューが完全に再計算されます。

CONCURRENTLY オプションを使用してマテリアライズドビューをリフレッシュできます。このオプションを使用すると、排他ロックを取らずにマテリアライズドビューの内容が更新されます。これにより、SQL アプリケーションはマテリアライズドビューの更新中にマテリアライズドビューから読み取ることができます。

Aurora Machine Learning のモニタリング

aws_ml パッケージ内の関数を監視するには、track_functions パラメータを設定してから、PostgreSQL pg_stat_user_functions view をクエリします。

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

セッションレベルで track_functions を設定するには、以下を実行します。

SET track_functions = 'all';

次のいずれかの値を使用します。

  • all – インラインに配置されていない C 言語関数と SQL 言語関数を追跡します。aws_ml 関数を追跡するには、これらの関数が C で実装されているため、all を使用します。

  • pl – 手続き型言語関数のみを追跡します。

  • none – 関数の統計情報追跡を無効にします。

track_functions を有効にして、ユーザー定義の ML 関数を実行した後、pg_stat_user_functions ビューをクエリして情報を取得します。ビューには、各関数の callstotal_time、および self_time の数が含まれます。aws_sagemaker.invoke_endpoint 関数と aws_comprehend.detect_sentiment 関数の統計を表示するには、aws_ で始まるスキーマ名で結果をフィルタします。

run your statement SELECT * FROM pg_stat_user_functions WHERE schemaname LIKE 'aws_%'; SELECT pg_stat_reset(); -- To clear statistics

aws_sagemaker.invoke_endpoint 関数を呼び出す SQL 関数の名前を見つけるには、 PostgreSQL pg_proc catalog テーブル内の関数のソースコードをクエリします。

SELECT proname FROM pg_proc WHERE prosrc LIKE '%invoke_endpoint%';

クエリ計画管理を使用した ML 関数のモニタリング

クエリプラン管理の apg_plan_mgmt 拡張機能を使用してプランを取得した場合は、これらの関数名を参照するワークロード内のすべてのステートメントを検索できます。検索では、plan_outline をチェックして、バッチモードの実行が使用されたかどうかを確認できます。また、実行時間やプランコストなどのステートメント統計をリストすることもできます。バッチモードファンクションスキャンを使用するプランには、プランのアウトラインに FuncScan 演算子が含まれます。結合として実行されない関数には、FuncScan 演算子は含まれません。

クエリプラン管理の詳細については、「Aurora PostgreSQL のクエリ実行計画の管理」を参照してください。

バッチモードを使用しない aws_sagemaker.invoke_endpoint 関数への呼び出しを検索するには、次のステートメントを使用します。

\dx apg_plan_mgmt SELECT sql_hash, plan_hash, status, environment_variables, sql_text::varchar(50), plan_outline FROM pg_proc, apg_plan_mgmt.dba_plans WHERE prosrc LIKE '%invoke_endpoint%' AND sql_text LIKE '%' || proname || '%' AND plan_outline NOT LIKE '%"FuncScan"%';

前述の例では、SQL 関数を呼び出す、ワークロード内のすべてのステートメントが検索され、aws_sagemaker.invoke_endpoint 関数が呼び出されます。

これらの各ステートメントの詳細なランタイム統計を取得するには、apg_plan_mgmt.get_explain_stmt 関数を呼び出します。

SELECT apg_plan_mgmt.get_explain_stmt(sql_hash, plan_hash, 'analyze,verbose,buffers') FROM pg_proc, apg_plan_mgmt.dba_plans WHERE prosrc LIKE '%invoke_endpoint%' AND sql_text LIKE '%' || proname || '%' AND plan_outline NOT LIKE '%"FuncScan"%';

Aurora Machine Learning の PostgreSQL 関数リファレンス

aws_comprehend.detect_sentiment

Amazon Comprehend を使用して感情分析を実行します。使用方法の詳細については、「自然言語処理に Amazon Comprehend を使用する」を参照してください。

構文

aws_comprehend.detect_sentiment ( IN input_text varchar, IN language_code varchar, IN max_rows_per_batch int, OUT sentiment varchar, OUT confidence real) )

入力パラメータ

input_text

感情を検出するテキスト。

language_code

input_text の言語。有効な値については、「Amazon Comprehend でサポートされる言語」を参照してください。

max_rows_per_batch

バッチモード処理のバッチあたりの最大行数。詳細については、「Aurora Machine Learning 関数呼び出しのバッチモード実行の最適化」を参照してください。

出力パラメータ

感情

テキストの感情。有効な値は、POSITIVE、NEGATIVE、NEUTRAL、MIXED です。

信頼度

sentiment 値の信頼度。値の範囲は、100% の 1.0 から 0% の 0.0 です。

aws_sagemaker.invoke_endpoint

モデルをトレーニングし、SageMaker サービスを使用して実稼働環境にデプロイすると、クライアントアプリケーションは aws_sagemaker.invoke_endpoint 関数を使用してモデルから推論を取得します。モデルは、指定されたエンドポイントでホストされ、データベースインスタンスと同じ AWS リージョンに存在する必要があります。使用方法の詳細については、「SageMaker を使用して独自の ML モデルを実行する」を参照してください。

構文

aws_sagemaker.invoke_endpoint( IN endpoint_name varchar, IN max_rows_per_batch int, VARIADIC model_input "any", OUT model_output varchar )

入力パラメータ

endpoint_name

AWS リージョンに依存しないエンドポイント URL。

max_rows_per_batch

バッチモード処理のバッチあたりの最大行数。詳細については、「Aurora Machine Learning 関数呼び出しのバッチモード実行の最適化」を参照してください。

model_input

ML モデルの 1 つ以上の入力パラメータ。これらは、任意のデータ型にすることができます。

PostgreSQL では、1 つの関数に対して最大 100 の入力パラメータを指定できます。配列のデータ型は 1 次元でなければなりませんが、SageMaker モデルで期待される多数の要素を含めることができます。SageMaker モデルへの入力の数は、SageMaker 5 MB のメッセージサイズ制限によってのみ制限されます。

出力パラメータ

model_output

SageMaker モデルの、テキストとしての出力パラメータ。

使用に関する注意事項

aws_sagemaker.invoke_endpoint 関数は、同じ AWS リージョンのモデルエンドポイントにのみ接続します。データベースインスタンスに、複数の AWS リージョンのレプリカがある場合は、必ず、各 Amazon SageMaker モデルをそれらのすべての AWS リージョンにデプロイします。

aws_sagemaker.invoke_endpoint への呼び出しは、データベースインスタンスの SageMaker IAM ロールを使用して認証されます。

SageMaker モデルエンドポイントは個別のアカウントをスコープとし、パブリックではありません。endpoint_name の URL には、アカウント ID は含まれません。SageMaker は、データベースインスタンスの SageMaker IAM ロールによって提供される認証トークンからアカウント ID を決定します。

AWS CLI を使用して SageMaker および Amazon Comprehend に IAM ロールを手動でセットアップする

注記

AWS Management Console を使用する場合、AWS によって自動的に IAM セットアップが実行されます。この場合、次の情報をスキップして、「コンソールを使用して自動的に Aurora DB クラスターを AWS のサービスに接続する」の手順に従うことができます。

AWS CLI または RDS API を使用して SageMaker または Amazon Comprehend のために IAM ロールをセットアップするには、以下の手順を実行します。

  1. IAM ポリシーを作成して、Aurora PostgreSQL クラスターによって起動される SageMaker エンドポイントを指定するか、Amazon Comprehend へのアクセスを有効にします。

  2. IAM ロールを作成して、Aurora PostgreSQL データベースクラスターによる AWS の ML サービスに対するアクセスを許可します。また、前に作成した IAM ポリシーを、ここで作成した IAM ロールにアタッチします。

  3. 先に作成済みの IAM ロールを Aurora PostgreSQL データベースクラスターに関連付けて、AWS の ML サービスへのアクセスを許可します。

AWS CLI を使用して SageMaker にアクセスするための IAM ポリシーを作成する

注記

Aurora は、IAM ポリシーを自動的に作成できます。次の情報をスキップして、「コンソールを使用して自動的に Aurora DB クラスターを AWS のサービスに接続する」の手順に使うことができます。

次のポリシーは、Aurora PostgreSQL がユーザーに代わって SageMaker 関数を呼び出すために必要なアクセス許可を追加します。データベースアプリケーションが単一のポリシーで Aurora PostgreSQL クラスターからアクセスする必要があるすべての SageMaker エンドポイントを指定できます。

注記

このポリシーにより、SageMaker エンドポイントの AWS リージョンを指定できます。ただし Aurora PostgreSQL クラスターは、クラスターと同じ AWS リージョンにデプロイされた SageMaker モデルのみを呼び出すことができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeRCFEndPoint", "Effect": "Allow", "Action": "sagemaker:InvokeEndpoint", "Resource": "arn:aws:sagemaker:region:123456789012:endpoint/endpointName" } ] }

次の AWS CLI コマンドでは、これらのオプションを指定して、IAM ポリシーを作成します。

aws iam create-policy --policy-name policy_name --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeRCFEndPoint", "Effect": "Allow", "Action": "sagemaker:InvokeEndpoint", "Resource": "arn:aws:sagemaker:region:123456789012:endpoint/endpointName" } ] }'

次のステップについては、「SageMaker と Amazon Comprehend にアクセスするための IAM ロールを作成する」を参照してください。

Amazon Comprehend にアクセスするための IAM ポリシーを AWS CLI により作成する

注記

Aurora は、IAM ポリシーを自動的に作成できます。次の情報をスキップして、「コンソールを使用して自動的に Aurora DB クラスターを AWS のサービスに接続する」の手順に使うことができます。

次のポリシーは、Aurora PostgreSQL がユーザーに代わって Amazon Comprehend を呼び出すために必要なアクセス許可を追加します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeComprehendDetectSentiment", "Effect": "Allow", "Action": [ "comprehend:DetectSentiment", "comprehend:BatchDetectSentiment" ], "Resource": "*" } ] }

Amazon Comprehend へのアクセスを許可する IAM ポリシーを作成するには

  1. IAM マネジメントコンソールを開きます。

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

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

  4. [Visual editor (ビジュアルエディタ)] タブで、[Choose a service (サービスの選択)] を選択し、[Comprehend] を選択します。

  5. [アクション] で、[Detect Sentiment (感情の検出)] および [BatchDetectSentiment] を選択します。

  6. [ポリシーの確認] を選択します。

  7. [ 名前] に IAM ポリシーの名前を入力します。IAM ロールを作成して Aurora DB クラスターに関連付ける際に、この名前を使用します。オプションで [Description] 値を追加することもできます。

  8. [Create policy] を選択します。

次のステップについては、「SageMaker と Amazon Comprehend にアクセスするための IAM ロールを作成する」を参照してください。

SageMaker と Amazon Comprehend にアクセスするための IAM ロールを作成する

注記

Aurora は、自動的に IAM ロールを作成できます。次の情報をスキップして、「コンソールを使用して自動的に Aurora DB クラスターを AWS のサービスに接続する」の手順に使うことができます。

IAM ポリシーを作成した後、Aurora PostgreSQL DB クラスターがデータベースユーザーに代わって ML サービスにアクセスできるようにするための IAM ロールを作成します。IAM ロールを作成するには、「IAM ユーザーにアクセス許可を委任するロールの作成」で説明されている手順に従います。

作成する IAM ロールに前述のポリシーをアタッチします。詳細については、「IAM ユーザーまたはロールへの IAM ポリシーのアタッチ」を参照してください。

IAM ロールの詳細については、IAM ユーザーガイドIAM ロールをご参照ください。

次のステップについては、「AWS CLI による IAM ロールと Aurora PostgreSQL DB クラスターの関連付け」を参照してください。

AWS CLI による IAM ロールと Aurora PostgreSQL DB クラスターの関連付け

注記

Aurora は、自動的に DB クラスターに IAM ロールを関連付けることができます。次の情報をスキップして、「コンソールを使用して自動的に Aurora DB クラスターを AWS のサービスに接続する」の手順に使うことができます。

IAM アクセスをセットアップする最後のプロセスは、IAM ロールとその IAM ポリシーを Aurora PostgreSQL DB クラスターに関連付けることです。次の作業を行います。

  1. DB クラスターの関連付けられたロールのリストにロールを追加します。

    ロールを DB クラスターに関連付けるには、AWS Management Console または add-role-to-db-cluster AWS CLI コマンドを使用します。

    • コンソールを使用して PostgreSQL DB clusterの IAM ロールを追加するには

      1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

      2. 詳細を表示するには、PostgreSQL DB クラスターの名前を選択します。

      3. [接続とセキュリティ] タブの [IAM ロールの管理] セクションで、[このクラスターに IAM ロールを追加] で追加するロールを選択します。

      4. [機能] で、[SageMaker] または [Comprehend] を選択します。

      5. [Add role] を選択します。

    • CLI を使用して PostgreSQL DB クラスターの IAM ロールを追加するには

      次のコマンドを使用して、my-db-cluster という名前の PostgreSQL DB クラスターにロールを追加します。your-role-arn を、以前のステップで書き留めたロール ARN に置き換えます。--feature-name オプションの値には、使用するサービスに応じて、SageMakerComprehend、または s3Export を使用します。

      Linux、macOS、Unix の場合:

      aws rds add-role-to-db-cluster \ --db-cluster-identifier my-db-cluster \ --feature-name external-service \ --role-arn your-role-arn \ --region your-region

      Windows の場合:

      aws rds add-role-to-db-cluster ^ --db-cluster-identifier my-db-cluster ^ --feature-name external-service ^ --role-arn your-role-arn ^ --region your-region
  2. 関連する AWS ML サービスのクラスターレベルのパラメータを、各 IAM ロールの ARN に設定します。

    Aurora クラスターで使用する予定の AWS の ML サービスに応じて、electroencephalographicmiscomprehended、または両方のパラメータを使用します。

    クラスターレベルのパラメータは、DB クラスターパラメータグループにグループ化されます。上記のクラスターパラメータを設定するには、既存のカスタム DB クラスターグループを使用するか、新しいクラスターグループを作成します。DB クラスターの新しいパラメータグループを作成するには、以下に示すように、例えば、create-db-cluster-parameter-group から AWS CLI コマンドを呼び出します。

    aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name AllowAWSAccessToExternalServices \ --db-parameter-group-family aurora-postgresql-group --description "Allow access to Amazon S3, Amazon SageMaker, and Amazon Comprehend"

    適切なクラスターレベルの単一あるいは複数のパラメータと関連する IAM ロールの ARN 値を DB クラスターのパラメータグループに設定します。次の作業を行います。

    aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name AllowAWSAccessToExternalServices \ --parameters "ParameterName=aws_default_s3_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraS3Role,ApplyMethod=pending-reboot" \ --parameters "ParameterName=aws_default_sagemaker_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraSageMakerRole,ApplyMethod=pending-reboot" \ --parameters "ParameterName=aws_default_comprehend_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraComprehendRole,ApplyMethod=pending-reboot"

    新しい DB クラスターパラメータグループを使用するように DB クラスターを変更します。次に、クラスターを再起動します。以下にその方法を示します。

    aws rds modify-db-cluster --db-cluster-identifier your_cluster_id --db-cluster-parameter-group-nameAllowAWSAccessToExternalServices aws rds failover-db-cluster --db-cluster-identifier your_cluster_id

インスタンスが再起動すると、IAM ロールが DB クラスターに関連付けられています。