翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Aurora MySQL
Amazon Aurora for Aurora MySQL で OpenSearch Ingestion パイプラインを設定するには、次の手順を実行します。
トピック
Aurora MySQL の前提条件
OpenSearch Ingestion パイプラインを作成する前に、次の手順を実行します。
-
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
。 -
Aurora MySQL DB クラスターを選択または作成し、前のステップで作成したパラメータグループを DB クラスターに関連付けます。
-
Aurora および でのパスワード管理を使用して、Amazon Aurora AWS Secrets Managerクラスターでユーザー名とパスワード認証を設定します。Secrets Manager シークレットを作成することで、ユーザー名とパスワードの組み合わせを作成することもできます。
-
完全な初期スナップショット機能を使用する場合は、 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" } ] }
-
OpenSearch Service ドメインまたは OpenSearch Serverless コレクションを選択または作成します。詳細については、「Creating OpenSearch Service domains」および「Creating collections」を参照してください。
-
リソースベースのポリシーをドメインにアタッチするか、データアクセスポリシーをコレクションにアタッチします。これらのアクセスポリシーにより、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 を指定するには、ドロップダウンメニューから [その他] を選択します。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 は最初に送信されたドキュメントに基づいて動的マッピング
次の表に、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_content
で template_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 |
このメトリクスは、ストリームから処理に失敗したレコードの合計数を示します。 |