Logstash を使用してオンプレミスの Oracle データベースを Amazon OpenSearch Service に移行する - AWS 規範ガイダンス

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

Logstash を使用してオンプレミスの Oracle データベースを Amazon OpenSearch Service に移行する

作成者: Aditya Goteti (AWS)

環境:PoC またはパイロット

ソース: Oracle データベース

ターゲット: Amazon OpenSearch Service

R タイプ: リプラットフォーム

ワークロード: ‬Oracle

テクノロジー: 移行、データベース

AWS サービス: Amazon OpenSearch Service

[概要]

このパターンでは、Logstash を使用してオンプレミスの Oracle データベースから Amazon OpenSearch Service にデータを移動する方法について説明します。アーキテクチャ上の考慮事項、必要なスキルセットと推奨事項が含まれます。データは単一テーブル、または全文検索を実行する必要がある複数テーブルからのものです。 

OpenSearch サービスは Virtual Private Cloud (VPC) 内で設定することも、IP ベースの制限でパブリックに配置することもできます。このパターンは、 OpenSearch サービスが VPC 内で設定されるシナリオを示しています。Logstash は、Oracle データベースからデータを収集し、JSON 形式に解析してから、データを OpenSearch Service にフィードするために使用されます。 

前提条件と制限

前提条件

  • アクティブなAWS アカウント

  • Java 8 (Logstash 6.4.3 で必要)

  • AWS 仮想プライベートネットワーク (AWS VPN) を使用して確立される、オンプレミスデータベースサーバーと VPC 内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンス間の接続性

  • データベースから OpenSearch Service にプッシュされる必要なデータを取得するクエリ

  • Java Database Connectivity (JDBC) ドライバー 

制限

  • Logstash はデータベースから物理削除されるレコードは識別できない 

製品バージョン

  • Oracle Database 12c

  • OpenSearch サービス 6.3

  • Logstash 6.4.3

アーキテクチャ

ソーステクノロジースタック

  • オンプレミスの Oracle データベース

  • オンプレミス AWS VPN

ターゲットテクノロジースタック

  • VPC

  • EC2 インスタンス

  • OpenSearch サービス 

  • Logstash

  • NAT ゲートウェイ (EC2 インスタンスのオペレーティングシステムアップデート、Java 8、Logstash、プラグインのインストール用)

データ移行アーキテクチャ

Logstash を使用してオンプレミスの Oracle データベースから Amazon OpenSearch Service にデータを移動する方法。

ツール

エピック

タスク説明必要なスキル

ソースデータベースのサイズを特定します。

ソースデータのサイズは、インデックスに設定するシャードの数の決定に使用するパラメータの 1 つです。

DBA、データベース開発者

各列のデータ型と対応するデータを分析します。

OpenSearch サービスでは、ドキュメント内で以前に見えないフィールドが見つかったときに、データ型を動的にマッピングします。明示的に宣言する必要のある特定のデータ型または形式 (日付フィールドなど) がある場合は、インデックス作成時にフィールドを特定し、そのフィールドのマッピングを定義します。

アプリ所有者、開発者、データベース開発者

プライマリーキーまたは一意キーがある列があるかどうかを確認します。

更新または挿入中に Amazon OpenSearch Service のレコードが重複しないようにするには、amazon_esプラグインの出力セクションで document_id 設定を構成する必要があります (例: customer_idがプライマリキーdocument_id => "%{customer_id}"の場合)。

アプリ所有者、開発者

追加された新しいレコードの数と頻度を分析し、レコードがどのような頻度で削除されるかを確認します。

このタスクは、ソースデータの増加率を把握するために必要です。データの読み取り量が多く、挿入がまれな場合は、1 つのインデックスにできます。新しいレコードが頻繁に挿入され、削除されない場合、シャードサイズは推奨最大サイズの 50 GB を簡単に超える可能性があります。この場合は、Logstash とエイリアスを使用してアクセスできるコードでインデックスパターンを設定することで、インデックスを動的に作成できます。

アプリ所有者、開発者

必要なレプリカの数を決定します。

アプリ所有者、開発者

インデックスに設定するシャード数を決定します。

アプリ所有者、開発者

専用マスターノード、データノード、EC2 インスタンスのインスタンスタイプを特定します。

詳細については、関連リソースセクションを参照してください。

アプリ所有者、開発者

必要な専用マスターノードとデータノード数を決定します。

詳細については、関連リソースセクションを参照してください。

タスク説明必要なスキル

EC2 インスタンスを起動します。

AWS VPN が接続されている VPC 内で EC2 インスタンスを起動します。

Amazon VPC コンストラクト、AWS VPN

EC2 インスタンスに Logstash をインストールします。

開発者

Logstash プラグインをインストールします。

必要な Logstash プラグイン jdbc-input logstash-output-amazon_es をインストールします。

開発者

Logstash を設定します。

Logstashキーストアを作成して、AWS Secrets Manager キー、データベース認証情報などの機密情報を保存し、そのレファレンスを Logstash 設定ファイルに置きます。

開発者

デッドレターキューと永続キューを設定します。

デフォルトで、データにマッピングエラーまたはその他の問題が含まれるために処理できないイベントが Logstash で遭遇すると、Logstash パイプラインは失敗したイベントをハングまたはドロップします。このような状況でデータ損失を防ぐため、失敗したイベントをドロップせずにデッドレターキューに書き込むように Logstash を設定できます。異常終了時のデータ損失に対して保護するために、Logstash にはメッセージキューをディスクに保存する永続キュー機能があります。永続キューは Logstash のデータに永続性を提供します。

開発者

Amazon OpenSearch Service ドメインを作成します。

AWS Identity and Access Management (IAM) 認証情報を使用したリクエストの署名を必要としないアクセスポリシーを使用して Amazon OpenSearch Service ドメインを作成します。Amazon OpenSearch Service ドメインは、同じ VPC 内に作成する必要があります。また、分析に基づいてインスタンスタイプを選択し、専用ノードとマスターノードの数を設定する必要があります。

開発者

必要な Amazon OpenSearch Service ログを設定します。

詳細については、OpenSearch 「サービスドキュメント」を参照してください。

インデックスを作成します。

開発者

Logstash を起動します。

Logstash をバックグラウンドサービスとして実行します。Logstash は、設定された SQL クエリを実行し、データをプルして JSON 形式に変換し、 OpenSearch サービスにフィードします。初回ロードの場合は、Logstash 設定ファイルでスケジューラーを設定しないでください。

開発者

ドキュメントを確認します。

インデックスの文書数と、すべての文書がソースデータベースに存在するかどうかを確認します。初回ロード時にインデックスに追加され、Logstash の停止に使用されます。

Logstashの設定を変更して、クライアントの要件に応じて一定の間隔で実行されるスケジューラーを追加し、Logstash を再起動します。Logstash は前回の実行後に更新または追加されたレコードのみを選択し、最終実行タイムスタンプは Logstash 設定ファイルの last_run_metadata_path => “/usr/share/logstash/.logstash_jdbc_last_run” プロパティで設定したファイルに保存されます。

開発者

関連リソース