

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

# Aurora MySQL
<a name="aurora-mysql"></a>

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

**Topics**
+ [Aurora MySQL の前提条件](#aurora-mysql-prereqs)
+ [ステップ 1: パイプラインロールを設定する](#aurora-mysql-pipeline-role)
+ [ステップ 2: パイプラインを作成する](#aurora-mysql-pipeline)
+ [データ整合性](#aurora-mysql-pipeline-consistency)
+ [データ型のマッピング](#aurora-mysql-pipeline-mapping)
+ [制限事項](#aurora-mysql-pipeline-limitations)
+ [推奨される CloudWatch アラーム](#aurora-mysql-pipeline-metrics)

## Aurora MySQL の前提条件
<a name="aurora-mysql-prereqs"></a>

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

1. [バイナリログを構成するために、Amazon Aurora でカスタムの Aurora DB クラスター パラメータグループを作成します。](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.setting-up.html#zero-etl.parameters)

   ```
   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` に設定されていないことを確認してください。

1. [Aurora MySQL DB クラスターを選択または作成](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.Aurora.html)し、前のステップで作成したパラメータグループを DB クラスターに関連付けます。

1. [バイナリログの保持期間を 24 時間以上に設定します。](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/mysql-stored-proc-configuring.html)

1. Amazon Aurora クラスターで [Aurora と AWS Secrets Managerのパスワード管理](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html)を使用して、ユーザー名とパスワード認証を設定します。[Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)で、ユーザー名とパスワードの組み合わせを作成することもできます。

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

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

------
#### [ JSON ]

****  

   ```
   {
       "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}}/*"
               ]
           }
       ]
   }
   ```

------

   ロールにはまた、次の信頼関係が必要です:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "export.rds.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. OpenSearch Service ドメインまたは OpenSearch Serverless コレクションを選択または作成します。詳細については、「[Creating OpenSearch Service domains](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains)」および「[Creating collections](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-create)」を参照してください。

1. [リソースベースのポリシー](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource)をドメインにアタッチするか、[データアクセスポリシー](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html)をコレクションにアタッチします。これらのアクセスポリシーにより、OpenSearch Ingestion は Amazon Aurora DB クラスターからドメインまたはコレクションにデータを書き込むことができます。

## ステップ 1: パイプラインロールを設定する
<a name="aurora-mysql-pipeline-role"></a>

Amazon Aurora パイプラインの前提条件を設定したら、パイプライン設定で使用する[パイプラインロールを設定します](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security-overview.html#pipeline-security-sink)。また、Amazon Aurora ソースの次のアクセス許可をロールに追加します。

------
#### [ JSON ]

****  

```
{
    "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": "allowNetworkInterfacesActions",
    "Effect": "Allow",
    "Action": [
    "ec2:AttachNetworkInterface",
    "ec2:CreateNetworkInterface",
    "ec2:CreateNetworkInterfacePermission",
    "ec2:DeleteNetworkInterface",
    "ec2:DeleteNetworkInterfacePermission",
    "ec2:DetachNetworkInterface",
    "ec2:DescribeNetworkInterfaces"
    ],
    "Resource": [
    "arn:aws:ec2:*:{{111122223333}}:network-interface/*",
    "arn:aws:ec2:*:{{111122223333}}:subnet/*",
    "arn:aws:ec2:*:{{111122223333}}:security-group/*"
    ]
    },
    {
    "Sid": "allowDescribeEC2",
    "Effect": "Allow",
    "Action": [
    "ec2:Describe*"
    ],
    "Resource": "*"
    },
    {
    "Sid": "allowTagCreation",
    "Effect": "Allow",
    "Action": [
    "ec2:CreateTags"
    ],
    "Resource": "arn:aws:ec2:*:{{111122223333}}:network-interface/*",
    "Condition": {
    "StringEquals": {
    "aws:RequestTag/OSISManaged": "true"
    }
    }
    },
    {
    "Sid": "AllowDescribeInstances",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBInstances"
    ],
    "Resource": [
    "arn:aws:rds:{{us-east-2}}:{{111122223333}}:db:*"
    ]
    },
    {
    "Sid": "AllowDescribeClusters",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBClusters"
    ],
    "Resource": [
    "arn:aws:rds:{{us-east-2}}:{{111122223333}}:cluster:{{DB-id}}"
    ]
    },
    {
    "Sid": "AllowSnapshots",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBClusterSnapshots",
    "rds:CreateDBClusterSnapshot",
    "rds:AddTagsToResource"
    ],
    "Resource": [
    "arn:aws:rds:{{us-east-2}}:{{111122223333}}:cluster:{{DB-id}}",
    "arn:aws:rds:{{us-east-2}}:{{111122223333}}:cluster-snapshot:{{DB-id}}*"
    ]
    },
    {
    "Sid": "AllowExport",
    "Effect": "Allow",
    "Action": [
    "rds:StartExportTask"
    ],
    "Resource": [
    "arn:aws:rds:{{us-east-2}}:{{111122223333}}:cluster:{{DB-id}}",
    "arn:aws:rds:{{us-east-2}}:{{111122223333}}:cluster-snapshot:{{DB-id}}*"
    ]
    },
    {
    "Sid": "AllowDescribeExports",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeExportTasks"
    ],
    "Resource": "*",
    "Condition": {
    "StringEquals": {
    "aws:RequestedRegion": "{{us-east-2}}",
    "aws:ResourceAccount": "{{111122223333}}"
    }
    }
    },
    {
    "Sid": "AllowAccessToKmsForExport",
    "Effect": "Allow",
    "Action": [
    "kms:Decrypt",
    "kms:Encrypt",
    "kms:DescribeKey",
    "kms:RetireGrant",
    "kms:CreateGrant",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*"
    ],
    "Resource": [
    "arn:aws:kms:{{us-east-2}}:{{111122223333}}:key/{{export-key-id}}"
    ]
    },
    {
    "Sid": "AllowPassingExportRole",
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": [
    "arn:aws:iam::{{111122223333}}:role/{{export-role}}"
    ]
    },
    {
    "Sid": "SecretsManagerReadAccess",
    "Effect": "Allow",
    "Action": [
    "secretsmanager:GetSecretValue"
    ],
    "Resource": [
    "arn:aws:secretsmanager:*:{{111122223333}}:secret:*"
    ]
    }
    ]
    }
```

------

## ステップ 2: パイプラインを作成する
<a name="aurora-mysql-pipeline"></a>

次のような 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 ブループリントを使用して、このパイプラインを作成できます。詳細については、「[ブループリントの使用](pipeline-blueprint.md)」を参照してください。

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

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

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

詳細については、「[Configuring VPC access for a pipeline](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html#pipeline-vpc-configure)」を参照してください。

## データ整合性
<a name="aurora-mysql-pipeline-consistency"></a>

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

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

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

## データ型のマッピング
<a name="aurora-mysql-pipeline-mapping"></a>

OpenSearch Ingestion パイプラインは、MySQL データ型を、消費する OpenSearch Service ドメインまたはコレクションに適した表現にマッピングします。OpenSearch でマッピングテンプレートが定義されていない場合、OpenSearch は最初に送信されたドキュメントに基づいて[動的マッピング](https://opensearch.org/docs/latest/field-types/#dynamic-mapping)を持つフィールドタイプを自動的に決定します。マッピングテンプレートを使用して、OpenSearch で最適なフィールドタイプを明示的に定義することもできます。

次の表に、MySQL データ型と対応する OpenSearch フィールドタイプを示します。明示的なマッピングが定義されていない場合、*デフォルトの OpenSearch フィールドタイプ*列には OpenSearch の対応するフィールドタイプが表示されます。この場合、OpenSearch は動的マッピングを使用してフィールドタイプを自動的に決定します。*推奨 OpenSearch フィールドタイプ*列は、マッピングテンプレートで明示的に指定することが推奨される対応するフィールドタイプです。これらのフィールドタイプは MySQL のデータ型とより密接に連携しており、通常、OpenSearch で使用できる検索機能を改善できます。


| MySQL のデータ型 | デフォルトの OpenSearch フィールドタイプ | 推奨される OpenSearch フィールドタイプ | 
| --- | --- | --- | 
| BIGINT | long | long | 
| BIGINT UNSIGNED | long | 符号なしロング | 
| BIT | long | ビット数に応じてバイト、ショート、整数、ロング | 
| DECIMAL | text | double またはキーワード | 
| DOUBLE | float | double | 
| FLOAT | float | 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` を使用して明示的なマッピングルールを定義できます。あるいは、パイプラインを開始する前に、検索ドメインまたはコレクションにマッピングテンプレートを直接作成することもできます。

## 制限事項
<a name="aurora-mysql-pipeline-limitations"></a>

Aurora MySQL 用に OpenSearch Ingestion パイプラインを設定する際には、次の制限を考慮してください。
+ 統合は、パイプラインごとに 1 つの MySQL データベースのみをサポートします。
+ 統合は現在、クロスリージョンデータインジェストをサポートしていません。Amazon Aurora クラスターと OpenSearch ドメインは同じ AWS リージョンに存在する必要があります。
+ 統合は現在、クロスアカウントデータインジェストをサポートしていません。Amazon Aurora クラスターと OpenSearch Ingestion パイプラインは同じ AWS アカウントに存在する必要があります。
+ Amazon Aurora クラスターで、Secrets Manager を使用した認証が有効になっているのを確認します。これが唯一サポートされている認証メカニズムとなります。
+ 既存のパイプライン設定を更新して、別のデータベースや別のテーブルからデータを取り込むことはできません。パイプラインのデータベースやテーブル名を更新するには、パイプラインを停止して、更新された設定で再起動するか、新しいパイプラインを作成する必要があります。
+ データ定義言語 (DDL) ステートメントは一般的にサポートされていません。以下の場合、データ整合性は維持されません。
  + プライマリキーが変更されます (追加/削除/名前変更)。
  + テーブルは削除/切り捨てられます。
  + 列名またはデータ型が変更されました。
+ 同期する MySQL テーブルにプライマリキーが定義されていない場合、データ整合性は保証されません。更新/削除を OpenSearch に同期できるようにするには、OpenSearch シンク設定でカスタム `document_id` オプションを適切に定義する必要があります。
+ カスケード削除アクションを使用した外部キー参照はサポートされていないため、Aurora MySQL と OpenSearch の間でデータの不整合が発生する可能性があります。
+ サポートされているバージョン: Aurora MySQL バージョン 3.05.2 以降。

## 推奨される CloudWatch アラーム
<a name="aurora-mysql-pipeline-metrics"></a>

取り込みパイプラインのパフォーマンスをモニタリングするには、次の 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 | このメトリクスは、ストリームから処理に失敗したレコードの合計数を示します。 | 