

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

# Aurora PostgreSQL
<a name="aurora-PostgreSQL"></a>

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

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

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

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

1. Amazon Aurora で[カスタム DB クラスターパラメータグループを作成](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.Aurora.html)して、論理レプリケーションを設定します。

   ```
   rds.logical_replication=1
       aurora.enhanced_logical_replication=1
       aurora.logical_replication_backup=0
       aurora.logical_replication_globaldb=0
   ```

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

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-PostgreSQL-pipeline"></a>

ソースとして Aurora PostgreSQL クラスター を指定する OpenSearch Ingestion パイプラインを次のように設定します。

```
version: "2"
aurora-postgres-pipeline:
  source:
    rds:
      db_identifier: "cluster-id"
      engine: aurora-postgresql
      database: "database-name"
      tables:
        include:
          - "schema1.table1"
          - "schema2.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 を選択するか、独自の 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-PostgreSQL-pipeline-mapping"></a>

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

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


| Aurora PostgreSQL データ型 | デフォルトの OpenSearch フィールドタイプ | 推奨される OpenSearch フィールドタイプ | 
| --- | --- | --- | 
| smallint | long | short | 
| integer | long | integer | 
| bigint | long | long | 
| decimal | text | double またはキーワード | 
| numeric[ (p, s) ] | text | double またはキーワード | 
| real | float | float | 
| double precision | float | double | 
| smallserial | long | short | 
| シリアル | long | integer | 
| bigserial | long | long | 
| money | オブジェクト | オブジェクト | 
| character varying(n) | text | text | 
| varchar(n) | text | text | 
| character(n) | text | text | 
| char(n) | text | text | 
| bpchar(n) | text | text | 
| bpchar | text | text | 
| text | text | text | 
| enum | text | text | 
| bytea | text | バイナリ | 
| timestamp [ (p) ] [ without time zone ] | long (エポックミリ秒単位) | date | 
| timestamp [ (p) ] with time zone | long (エポックミリ秒単位) | date | 
| date | long (エポックミリ秒単位) | date | 
| time [ (p) ] [ without time zone ] | long (エポックミリ秒単位) | date | 
| time [ (p) ] with time zone | long (エポックミリ秒単位) | date | 
| interval [ fields ] [ (p) ] | text (ISO8601 形式) | text | 
| boolean | boolean | boolean | 
| point | text (WKT 形式) | geo\$1shape | 
| LINE | text (WKT 形式) | geo\$1shape | 
| lseg | text (WKT 形式) | geo\$1shape | 
| box | text (WKT 形式) | geo\$1shape | 
| パス | text (WKT 形式) | geo\$1shape | 
| Polygon (ポリゴン) | text (WKT 形式) | geo\$1shape | 
| circle | オブジェクト | オブジェクト | 
| cidr | text | text | 
| inet | text | text | 
| macaddr | text | text | 
| macaddr8 | text | text | 
| bit(n) | long | バイト、ショート、整数、ロング (ビット数によって異なります) | 
| bit varying(n) | long | バイト、ショート、整数、ロング (ビット数によって異なります) | 
| json | オブジェクト | オブジェクト | 
| JSONB | オブジェクト | オブジェクト | 
| jsonpath | text | text | 

OpenSearch Ingestion パイプラインでデッドレターキュー (DLQ) を設定することをお勧めします。キューが設定済みである場合、OpenSearch Service は、動的マッピングの失敗により取り込めなかったすべての失敗したドキュメントをキューに送信します。

自動マッピングが失敗した場合は、パイプライン設定で `template_type` と `template_content` を使用して明示的なマッピングルールを定義できます。あるいは、パイプラインを開始する前に、検索ドメインまたはコレクションにマッピングテンプレートを直接作成することもできます。

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

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

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