RDS for MySQL
Amazon RDS for MySQL で OpenSearch Ingestion パイプラインを設定するには、次の手順を実行します。
トピック
RDS for MySQL の前提条件
OpenSearch Ingestion パイプラインを作成する前に、次の手順を実行します。
-
Amazon RDS でカスタム DB パラメータグループを作成して、バイナリログ記録を設定し、次のパラメータを設定します。
binlog_format=ROW binlog_row_image=full binlog_row_metadata=FULLまた、
binlog_row_value_optionsパラメータがPARTIAL_JSONに設定されていないことも確認してください。詳細については、「Aurora MySQL バイナリログの設定」を参照してください。
-
RDS for MySQL DB インスタンスを選択または作成し、前のステップで作成したパラメータグループを DB インスタンスに関連付けます。
-
データベースで自動バックアップが有効になっていることを確認します。詳細については、「自動バックアップの保持」を参照してください。
-
24 時間など、レプリケーションが発生するのに十分な時間でバイナリログの保持を設定します。詳細については、「Amazon RDS ユーザーガイド」の「バイナリログ構成の設定と表示」を参照してください。
-
Amazon RDS と でパスワード管理を使用して、Amazon RDS インスタンスでAWS Secrets Managerユーザー名とパスワード認証を設定します。Secrets Manager シークレットを作成するで、ユーザー名とパスワードの組み合わせを作成することもできます。
-
完全な初期スナップショット機能を使用する場合は、AWS KMS keyと Amazon RDS から Amazon S3 にデータをエクスポートするための IAM ロールを作成します。
IAM ロールには、次の許可ポリシーが必要です。
ロールにはまた、次の信頼関係が必要です:
-
OpenSearch Service ドメインまたは OpenSearch Serverless コレクションを選択または作成します。詳細については、「Creating OpenSearch Service domains」および「Creating collections」を参照してください。
-
リソースベースのポリシーをドメインにアタッチするか、データアクセスポリシーをコレクションにアタッチします。これらのアクセスポリシーにより、OpenSearch Ingestion は Amazon RDS DB インスタンスからドメインまたはコレクションにデータを書き込むことができます。
ステップ 1: パイプラインロールを設定する
Amazon RDS パイプラインの前提条件を設定したら、パイプライン設定で使用するパイプラインロールを設定します。また、Amazon RDS ソースの次のアクセス許可をロールに追加します。
ステップ 2: パイプラインを作成する
次のような OpenSearch Ingestion パイプラインを設定します。サンプルパイプラインは、Amazon RDS インスタンスをソースとして指定します。
version: "2" rds-mysql-pipeline: source: rds: db_identifier: "instance-id" engine: mysql database: "database-name" tables: include: - "table1" - "table2" s3_bucket: "bucket-name" s3_region: "bucket-region" s3_prefix: "prefix-name" export: kms_key_id: "kms-key-id" iam_role_arn: "export-role-arn" stream: true aws: sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" region: "us-east-1" authentication: username: ${{aws_secrets:secret:username}} password: ${{aws_secrets:secret:password}} sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com"] index: "${getMetadata(\"table_name\")}" index_type: custom document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external" aws: sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" region: "us-east-1" extension: aws: secrets: secret: secret_id: "rds-secret-id" region: "us-east-1" sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" refresh_interval: PT1H
事前設定された Amazon MSK ブループリントを使用して、このパイプラインを作成できます。詳細については、「ブループリントの使用」を参照してください。
Amazon Aurora をソースとして使用するには、パイプラインの VPC アクセスを設定する必要があります。選択する VPC は、Amazon Aurora ソースが使用するのと同じ VPC である必要があります。次に、1 つ以上のサブネットと 1 つ以上の VPC セキュリティグループを選択します。パイプラインには Aurora MySQL データベースへのネットワークアクセスが必要であるため、パイプラインの VPC セキュリティグループからデータベースポートへのインバウンドトラフィックを許可する VPC セキュリティグループが Aurora クラスターに設定されていることも確認する必要があります。詳細については、「セキュリティグループによるアクセス制御」を参照してください。
AWS マネジメントコンソール を使用してパイプラインを作成する場合は、Amazon Aurora をソースとして使用するために VPC にパイプラインをアタッチする必要もあります。これを行うには、[ネットワーク設定] セクションを見つけ、[VPC にアタッチ] を選択し、提供されたデフォルトオプションのいずれかから CIDR を選択するか、独自の CIDR を選択します。RFC 1918 のベストカレントプラクティス
カスタム CIDR を指定するには、ドロップダウンメニューから [その他] を選択します。OpenSearch Ingestion と Amazon RDS 間の IP アドレスの衝突を回避するには、Amazon DRDS VPC の CIDR が OpenSearch Ingestion の CIDR と異なることを確認してください。
詳細については、「Configuring VPC access for a pipeline」を参照してください。
データ整合性
パイプラインは、Amazon RDS インスタンスから変更を継続的にポーリングまたは受信し、OpenSearch インデックス内の対応するドキュメントを更新することで、データ整合性を確保します。
OpenSearch Ingestion は、データの耐久性を確保するためにエンドツーエンドの確認応答をサポートしています。パイプラインがスナップショットまたはストリームを読み取る際に、並列処理用のパーティションが動的に作成されます。パイプラインは、OpenSearch ドメインまたはコレクション内のすべてのレコードを取り込んだ後に確認応答を受信すると、パーティションを完了としてマークします。OpenSearch Serverless 検索コレクションに取り込みたい場合は、パイプラインでドキュメント ID を生成できます。OpenSearch Serverless 時系列コレクションに取り込みたい場合は、パイプラインがドキュメント ID を生成しないため、パイプラインシンク設定の document_id: "${getMetadata(\"primary_key\")}" を省略する必要があることに留意してください。
また、OpenSearch Ingestion パイプラインは、着信イベントアクションを、対応する一括インデックス作成アクションにマッピングして、ドキュメントの取り込みをサポートします。これにより、データ整合性が維持され、Amazon RDS 内のすべてのデータ変更が OpenSearch 内の対応するドキュメントの変更とリコンサイルされます。
データ型のマッピング
OpenSearch Ingestion パイプラインは、MySQL データ型を、消費する OpenSearch Service ドメインまたはコレクションに適した表現にマッピングします。OpenSearch でマッピングテンプレートが定義されていない場合、OpenSearch は最初に送信されたドキュメントに基づいて動的マッピング
次の表に、MySQL データ型と対応する OpenSearch フィールドタイプを示します。明示的なマッピングが定義されていない場合、デフォルトの OpenSearch フィールドタイプ列には OpenSearch の対応するフィールドタイプが表示されます。この場合、OpenSearch は動的マッピングを使用してフィールドタイプを自動的に決定します。推奨 OpenSearch フィールドタイプ列は、マッピングテンプレートで明示的に指定することが推奨される対応するフィールドタイプです。これらのフィールドタイプは MySQL のデータ型とより密接に連携しており、通常、OpenSearch で使用できる検索機能を改善できます。
| MySQL のデータ型 | デフォルトの OpenSearch フィールドタイプ | 推奨される OpenSearch フィールドタイプ |
|---|---|---|
| BIGINT | long | long |
| BIGINT UNSIGNED | long | 符号なしロング |
| BIT | long | ビット数に応じてバイト、ショート、整数、ロング |
| DECIMAL | text | double またはキーワード |
| DOUBLE | フロート | double |
| FLOAT | フロート | フロート |
| INT | long | integer |
| INT UNSIGNED | long | long |
| MEDIUMINT | long | integer |
| MEDIUMINT UNSIGNED | long | integer |
| NUMERIC | text | double またはキーワード |
| SMALLINT | long | short |
| SMALLINT UNSIGNED | long | integer |
| TINYINT | long | バイト |
| TINYINT UNSIGNED | long | short |
| BINARY | text | バイナリ |
| BLOB | text | バイナリ |
| CHAR | text | text |
| ENUM | text | キーワード |
| LONGBLOB | text | バイナリ |
| LONGTEXT | text | text |
| MEDIUMBLOB | text | バイナリ |
| MEDIUMTEXT | text | text |
| SET | text | キーワード |
| TEXT | text | text |
| TINYBLOB | text | バイナリ |
| TINYTEXT | text | text |
| VARBINARY | text | バイナリ |
| VARCHAR | text | text |
| DATE | long (エポックミリ秒単位) | date |
| DATETIME | long (エポックミリ秒単位) | date |
| TIME | long (エポックミリ秒単位) | date |
| TIMESTAMP | long (エポックミリ秒単位) | date |
| YEAR | long (エポックミリ秒単位) | date |
| GEOMETRY | text (WKT 形式) | geo_shape |
| GEOMETRYCOLLECTION | text (WKT 形式) | geo_shape |
| LINESTRING | text (WKT 形式) | geo_shape |
| MULTILINESTRING | text (WKT 形式) | geo_shape |
| MULTIPOINT | text (WKT 形式) | geo_shape |
| MULTIPOLYGON | text (WKT 形式) | geo_shape |
| POINT | text (WKT 形式) | geo_point または geo_shape |
| POLYGON | text (WKT 形式) | geo_shape |
| JSON | text | オブジェクト |
OpenSearch Ingestion パイプラインでデッドレターキュー (DLQ) を設定することをお勧めします。キューが設定済みである場合、OpenSearch Service は、動的マッピングの失敗により取り込めなかったすべての失敗したドキュメントをキューに送信します。
自動マッピングが失敗した場合は、パイプライン設定で template_type と template_content を使用して明示的なマッピングルールを定義できます。あるいは、パイプラインを開始する前に、検索ドメインまたはコレクションにマッピングテンプレートを直接作成することもできます。
制限
RDS for MySQL 用に OpenSearch Ingestion パイプラインを設定する際には、次の制限を考慮してください。
-
統合は、パイプラインごとに 1 つの MySQL データベースのみをサポートします。
-
統合は現在、クロスリージョンデータインジェストをサポートしていません。Amazon RDS インスタンスと OpenSearch ドメインは同じ AWS リージョン に存在する必要があります。
-
統合は現在、クロスアカウントデータインジェストをサポートしていません。Amazon RDS インスタンスと OpenSearch Ingestion パイプラインが同じ AWS アカウント にある必要があります。
-
Amazon RDS インスタンスで、サポートされている唯一の認証メカニズムである Secrets Manager を使用して認証が有効になっていることを確認します。
-
既存のパイプライン設定を更新して、別のデータベースや別のテーブルからデータを取り込むことはできません。パイプラインのデータベース名やテーブル名を更新するには、新しいパイプラインを作成する必要があります。
-
データ定義言語 (DDL) ステートメントは一般的にサポートされていません。以下の場合、データ整合性は維持されません。
-
プライマリキーが変更されます (追加/削除/名前変更)。
-
テーブルは削除/切り捨てられます。
-
列名またはデータ型が変更されました。
-
-
同期する MySQL テーブルにプライマリキーが定義されていない場合、データ整合性は保証されません。更新/削除を OpenSearch に同期できるようにするには、OpenSearch シンク設定でカスタム
document_idオプションを適切に定義する必要があります。 -
カスケード削除アクションを使用した外部キー参照はサポートされていないため、RDS for MySQL と OpenSearch の間でデータの不整合が発生する可能性があります。
-
Amazon RDS マルチアベイラビリティーゾーン DB クラスターはサポートされていません。
-
サポートされているバージョン: MySQL バージョン 8.0 以降。
推奨される CloudWatch アラーム
取り込みパイプラインのパフォーマンスをモニタリングするには、次の CloudWatch メトリクスをお勧めします。これらのメトリクスは、エクスポートから処理されたデータ量、ストリームから処理されたイベント数、エクスポートとストリームイベントの処理エラー、宛先に書き込まれたドキュメントの数を特定するのに役立ちます。これらのメトリクスの 1 つが、指定された時間にわたって指定された値を超えた場合にアクションを実行するように CloudWatch アラームを設定できます。
| メトリクス | 説明 |
|---|---|
pipeline-name.rds.credentialsChanged |
このメトリクスは、AWS シークレットがローテーションされる頻度を示します。 |
pipeline-name.rds.executorRefreshErrors |
このメトリクスは、AWS シークレットの更新に失敗したことを示します。 |
pipeline-name.rds.exportRecordsTotal |
このメトリクスは、Amazon Aurora からエクスポートされたレコードの数を示します。 |
pipeline-name.rds.exportRecordsProcessed |
このメトリクスは、OpenSearch Ingestion パイプラインによって処理されたレコードの数を示します。 |
pipeline-name.rds.exportRecordProcessingErrors |
このメトリクスは、Amazon Aurora クラスターからデータを読み取る際の OpenSearch Ingestion パイプラインの処理エラーの数を示します。 |
pipeline-name.rds.exportRecordsSuccessTotal |
このメトリクスは、正常に処理されたエクスポートレコードの合計数を示します。 |
pipeline-name.rds.exportRecordsFailedTotal |
このメトリクスは、処理に失敗したエクスポートレコードの合計数を示します。 |
pipeline-name.rds.bytesReceived |
このメトリクスは、OpenSearch Ingestion パイプラインによって受信された合計バイト数を示します。 |
pipeline-name.rds.bytesProcessed |
このメトリクスは、OpenSearch Ingestion パイプラインによって処理されたバイトの合計数を示します。 |
pipeline-name.rds.streamRecordsSuccessTotal |
このメトリクスは、ストリームから正常に処理されたレコードの数を示します。 |
pipeline-name.rds.streamRecordsFailedTotal |
このメトリクスは、ストリームから処理に失敗したレコードの合計数を示します。 |