Aurora MySQL - Amazon OpenSearch Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Aurora MySQL

Amazon Aurora for Aurora MySQL で OpenSearch Ingestion パイプラインを設定するには、次の手順を実行します。

Aurora MySQL の前提条件

OpenSearch Ingestion パイプラインを作成する前に、次の手順を実行します。

  1. Amazon Aurora でカスタム Aurora DB クラスターパラメータグループを作成して、バイナリログ記録を設定します

    aurora_enhanced_binlog=1 binlog_backup=0 binlog_format=ROW binlog_replication_globaldb=0 binlog_row_image=full binlog_row_metadata=full

    さらに、 binlog_transaction_compressionパラメータが に設定されていないことON、および binlog_row_value_optionsパラメータが に設定されていないことを確認しますPARTIAL_JSON

  2. Aurora MySQL DB クラスターを選択または作成し、前のステップで作成したパラメータグループを DB クラスターに関連付けます。

  3. バイナリログの保持期間を 24 時間以上に設定します

  4. Aurora および でのパスワード管理を使用して、Amazon Aurora AWS Secrets Managerクラスターでユーザー名とパスワード認証を設定します。Secrets Manager シークレットを作成することで、ユーザー名とパスワードの組み合わせを作成することもできます。

  5. 完全な初期スナップショット機能を使用する場合は、 AWS KMS key と Amazon Aurora から Amazon S3 にデータをエクスポートするための IAM ロールを作成します。

    IAM ロールには、次のアクセス許可ポリシーが必要です。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ExportPolicy", "Effect": "Allow", "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::s3-bucket-used-in-pipeline", "arn:aws:s3:::s3-bucket-used-in-pipeline/*" ] } ] }

    ロールには、次の信頼関係も必要です。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  6. OpenSearch Service ドメインまたは OpenSearch Serverless コレクションを選択または作成します。詳細については、「Creating OpenSearch Service domains」および「Creating collections」を参照してください。

  7. リソースベースのポリシーをドメインにアタッチするか、データアクセスポリシーをコレクションにアタッチします。これらのアクセスポリシーにより、OpenSearch Ingestion は Amazon Aurora DB クラスターからドメインまたはコレクションにデータを書き込むことができます。

ステップ 1: パイプラインロールを設定する

Amazon Aurora パイプラインの前提条件を設定したら、パイプライン設定で使用するパイプラインロールを設定します。また、Amazon Aurora ソースの次のアクセス許可をロールに追加します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allowReadingFromS3Buckets", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject", "s3:GetBucketLocation", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::s3_bucket", "arn:aws:s3:::s3_bucket/*" ] }, { "Sid": "allowNetworkInterfacesGroup1", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission" ], "Resource": [ "arn:aws:ec2:*:account-id:network-interface/*", "arn:aws:ec2:*:account-id:subnet/*", "arn:aws:ec2:*:account-id:security-group/*" ] }, { "Sid": "allowNetworkInterfacesGroup2", "Effect": "Allow", "Action": [ "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DetachNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": [ "arn:aws:ec2:*:account-id:network-interface/*", "arn:aws:ec2:*:account-id:subnet/*", "arn:aws:ec2:*:account-id:security-group/*" ], "Condition": { "StringEquals": { "aws:RequestTag/OSISManaged": "true" } } }, { "Sid": "allowDescribeEC2", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "allowTagCreation", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:account-id:network-interface/*", "Condition": { "StringEquals": { "aws:RequestTag/OSISManaged": "true" } } }, { "Sid": "AllowDescribeInstances", "Effect": "Allow", "Action": [ "rds:DescribeDBInstances" ], "Resource": [ "arn:aws:rds:region:account-id:db:*" ] }, { "Sid": "AllowDescribeClusters", "Effect": "Allow", "Action": [ "rds:DescribeDBClusters" ], "Resource": [ "arn:aws:rds:region:account-id:cluster:DB-id" ] }, { "Sid": "AllowSnapshots", "Effect": "Allow", "Action": [ "rds:DescribeDBClusterSnapshots", "rds:CreateDBClusterSnapshot", "rds:AddTagsToResource" ], "Resource": [ "arn:aws:rds:region:account-id:cluster:DB-id", "arn:aws:rds:region:account-id:cluster-snapshot:DB-id*" ] }, { "Sid": "AllowExport", "Effect": "Allow", "Action": [ "rds:StartExportTask" ], "Resource": [ "arn:aws:rds:region:account-id:cluster:DB-id", "arn:aws:rds:region:account-id:cluster-snapshot:DB-id*" ] }, { "Sid": "AllowDescribeExports", "Effect": "Allow", "Action": [ "rds:DescribeExportTasks" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "region", "aws:ResourceAccount": "account-id" } } }, { "Sid": "AllowAccessToKmsForExport", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:DescribeKey", "kms:RetireGrant", "kms:CreateGrant", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:region:account-id:key/export-key-id" ], { "Sid": "AllowPassingExportRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::account-id:role/export-role" ] }, { "Sid": "SecretsManagerReadAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:*:account-id:secret:*" ] } ] }

ステップ 2: パイプラインを作成する

次のような OpenSearch Ingestion パイプラインを設定します。サンプルパイプラインは、Amazon Aurora クラスターをソースとして指定します。

version: "2" aurora-mysql-pipeline: source: rds: db_identifier: "cluster-id" engine: aurora-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 Aurora ブループリントを使用して、このパイプラインを作成できます。詳細については、「ブループリントの使用」を参照してください。

Amazon Aurora をソースとして使用するには、パイプラインの VPC アクセスを設定する必要があります。選択する VPC は、Amazon Aurora ソースが使用する VPC と同じである必要があります。次に、1 つ以上のサブネットと 1 つ以上の VPC セキュリティグループを選択します。パイプラインには Aurora MySQL データベースへのネットワークアクセスが必要であるため、パイプラインの VPC セキュリティグループからデータベースポートへのインバウンドトラフィックを許可する VPC セキュリティグループが Aurora クラスターに設定されていることも確認する必要があります。詳細については、「セキュリティグループによるアクセスの制御」を参照してください。

を使用してパイプライン AWS Management Console を作成する場合は、ソースとして Amazon Aurora を使用するには、パイプラインを VPC にアタッチする必要があります。これを行うには、[ネットワーク設定] セクションを見つけ、[VPC にアタッチ] チェックボックスをオンにして、提供されたデフォルトオプションのいずれかから CIDR を選択するか、独自のものを選択します。RFC 1918 のベストカレントプラクティスで定義されているように、プライベートアドレス空間から任意の CIDR を使用できます。

カスタム CIDR を指定するには、ドロップダウンメニューから [その他] を選択します。OpenSearch Ingestion と Amazon Aurora の間の IP アドレスの衝突を回避するには、Amazon Aurora VPC CIDR が OpenSearch Ingestion の CIDR と異なることを確認してください。

詳細については、「Configuring VPC access for a pipeline」を参照してください。

データ整合性

パイプラインは、Amazon Aurora クラスターから変更を継続的にポーリングまたは受信し、OpenSearch インデックス内の対応するドキュメントを更新することで、データの整合性を確保します。

OpenSearch Ingestion は、データの耐久性を確保するためにエンドツーエンドの確認応答をサポートしています。パイプラインがスナップショットまたはストリームを読み取る際に、並列処理用のパーティションが動的に作成されます。パイプラインは、OpenSearch ドメインまたはコレクション内のすべてのレコードを取り込んだ後に確認応答を受信すると、パーティションを完了としてマークします。OpenSearch Serverless 検索コレクションに取り込みたい場合は、パイプラインでドキュメント ID を生成できます。OpenSearch Serverless 時系列コレクションに取り込む場合は、パイプラインがドキュメント ID を生成しないため、パイプラインシンク設定document_id: "${getMetadata(\"primary_key\")}"で を省略する必要があることに注意してください。

また、OpenSearch Ingestion パイプラインは、着信イベントアクションを、対応する一括インデックス作成アクションにマッピングして、ドキュメントの取り込みをサポートします。これによりデータの整合性が保たれるため、Amazon Aurora のすべてのデータ変更が OpenSearch の対応するドキュメントの変更と照合されます。

データ型のマッピング

OpenSearch Ingestion パイプラインは、MySQL データ型を、消費する OpenSearch Service ドメインまたはコレクションに適した表現にマッピングします。OpenSearch でマッピングテンプレートが定義されていない場合、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_contenttemplate_typeと を使用して明示的なマッピングルールを定義できます。あるいは、パイプラインを開始する前に、検索ドメインまたはコレクションにマッピングテンプレートを直接作成することもできます。

制限

Aurora MySQL の OpenSearch Ingestion パイプラインを設定するときは、次の制限を考慮してください。

  • 統合は、パイプラインごとに 1 つの MySQL データベースのみをサポートします。

  • 統合は現在、クロスリージョンデータインジェストをサポートしていません。Amazon Aurora クラスターと OpenSearch ドメインは同じ に存在する必要があります AWS リージョン。

  • 統合は現在、クロスアカウントデータインジェストをサポートしていません。Amazon Aurora クラスターと OpenSearch Ingestion パイプラインは同じ に存在する必要があります AWS アカウント。

  • Amazon Aurora クラスターで、サポートされている唯一の認証メカニズムである Secrets Manager を使用して認証が有効になっていることを確認します。

  • 既存のパイプライン設定を更新して、別のデータベースや別のテーブルからデータを取り込むことはできません。パイプラインのデータベースやテーブル名を更新するには、パイプラインを停止して、更新された設定で再起動するか、新しいパイプラインを作成する必要があります。

  • データ定義言語 (DDL) ステートメントは通常サポートされていません。以下の場合、データ整合性は維持されません。

    • プライマリキーが変更されます (add/delete/rename)。

    • テーブルは削除/切り捨てられます。

    • 列名またはデータ型が変更されます。

  • 同期する MySQL テーブルにプライマリキーが定義されていない場合、データ整合性は保証されません。更新/削除を OpenSearch に同期できるようにするには、OpenSearch シンク設定でカスタムdocument_idオプションを適切に定義する必要があります。

  • カスケード削除アクションを使用した外部キー参照はサポートされていないため、Aurora MySQL と OpenSearch の間でデータの不整合が発生する可能性があります。

  • サポートされているバージョン: Aurora MySQL バージョン 3.05.2 以降。

推奨される 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 このメトリクスは、ストリームから処理に失敗したレコードの合計数を示します。