

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Logstash 將內部部署 Oracle 資料庫遷移至 Amazon OpenSearch Service
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash"></a>

*Aditya Goteti，Amazon Web Services*

## 總結
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-summary"></a>

此模式說明如何使用 Logstash 將資料從現場部署 Oracle 資料庫移至 Amazon OpenSearch Service。它包含架構考量，以及一些必要的技能集和建議。資料可以來自單一資料表，也可以來自需要執行全文搜尋的多個資料表。 

OpenSearch Service 可以在虛擬私有雲端 (VPC) 中設定，也可以使用 IP 型限制公開放置。此模式說明在 VPC 中設定 OpenSearch Service 的情況。Logstash 用於從 Oracle 資料庫收集資料、將其剖析為 JSON 格式，然後將資料饋送至 OpenSearch Service。 

## 先決條件和限制
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ Java 8 (Logstash 6.4.3 必要）
+ 內部部署資料庫伺服器與 VPC 中的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體之間的連線，使用 AWS Virtual Private Network (AWS VPN) 建立
+ 從資料庫擷取要推送至 OpenSearch Service 所需資料的查詢
+ Oracle Java Database Connectivity (JDBC) 驅動程式

**限制**
+ Logstash 無法識別從資料庫硬刪除的記錄 

**產品版本**
+ Oracle 資料庫 12c
+ OpenSearch Service 6.3
+ Logstash 6.4.3

## Architecture
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-architecture"></a>

**來源技術堆疊**
+ 內部部署 Oracle 資料庫
+ 內部部署 AWS VPN

**目標技術堆疊**
+ VPC
+ EC2 執行個體
+ OpenSearch Service 
+ Logstash
+ NAT Gateway （用於 EC2 執行個體上的作業系統更新，以及安裝 Java 8、Logstash 和外掛程式）

**資料遷移架構**

![\[如何使用 Logstash 將資料從內部部署 Oracle 資料庫移至 Amazon OpenSearch Service。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/09f6d2de-de2f-4ed6-af93-34b71b75a263/images/df6a61fb-09fb-49d4-a7e8-b04e88c003df.png)


## 工具
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-tools"></a>
+ Logstash 6.4.3
+ JDBC 輸入外掛程式 ([下載和更多資訊](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html))
+ Logstash 輸出外掛程式 ([logstash-output-amazon\$1es](https://github.com/awslabs/logstash-output-amazon_es))
+ Oracle JDBC 驅動程式

## 史詩
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-epics"></a>

### 規劃遷移
<a name="plan-the-migration"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 識別來源資料的大小。 | 來源資料的大小是您用來判斷索引中要設定之碎片數量的參數之一。 | DBA，資料庫開發人員 | 
| 分析每個資料欄的資料類型和對應的資料。 | 在文件中找到先前看不到的欄位時，OpenSearch Service 會動態映射資料類型。如果有任何特定資料類型或格式 （例如日期欄位） 需要明確宣告，請在建立索引期間識別欄位並定義這些欄位的映射。 | 應用程式擁有者、開發人員、資料庫開發人員 | 
| 判斷是否有任何具有主索引鍵或唯一索引鍵的資料欄。 | 若要避免在更新或插入期間重複 Amazon OpenSearch Service 中的記錄，您需要在`amazon_es`外掛程式的輸出區段中設定 `document_id`設定 （例如， `document_id => "%{customer_id}"` `customer_id`是主索引鍵）。 | 應用程式擁有者、開發人員 | 
| 分析新增記錄的數量和頻率；檢查記錄的刪除頻率。 | 需要此任務才能了解來源資料的成長速率。如果資料密集讀取且插入很少見，您可以擁有單一索引。如果頻繁插入新記錄且未刪除，碎片大小可以輕鬆超過建議的 50 GB 大小上限。在這種情況下，您可以透過在 Logstash 和程式碼中設定索引模式來動態建立索引，您可以在其中使用別名來存取索引。 | 應用程式擁有者、開發人員 | 
| 決定需要多少個複本。 |  | 應用程式擁有者、開發人員 | 
| 決定要在索引上設定的碎片數量。 |  | 應用程式擁有者、開發人員 | 
| 識別專用主節點、資料節點和 EC2 執行個體的執行個體類型。 | 如需詳細資訊，請參閱[相關資源](#migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources)一節。 | 應用程式擁有者、開發人員 | 
| 判斷所需的專用主節點和資料節點數量。 | 如需詳細資訊，請參閱[相關資源](#migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources)一節。 |  | 

### 遷移資料
<a name="migrate-data"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 啟動 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 Service 文件](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/cloudwatch-alarms.html)。 |  | 
| 建立索引。 |  | 開發人員 | 
| 啟動 Logstash。 | 執行 Logstash 做為背景服務。Logstash 會執行設定的 SQL 查詢、提取資料、將其轉換為 JSON 格式，並將其饋送至 OpenSearch Service。對於初始載入，請勿在 Logstash 組態檔案中設定排程器。 | 開發人員 | 
| 檢查文件。 | 檢查索引上的文件數量，以及來源資料庫中是否存在所有文件。在初始載入期間，它們會新增至索引，並用來停止 Logstash。變更 Logstash 組態，根據用戶端需求新增以固定間隔執行的排程器，然後重新啟動 Logstash。Logstash 只會挑選上次執行後更新或新增的記錄，而上次執行時間戳記會存放在以 `last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run"` Logstash 組態檔案中 屬性設定的檔案中。 | 開發人員 | 

## 相關資源
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources"></a>
+ [建議的 CloudWatch 警示](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/cloudwatch-alarms.html) 
+ [專用 Amazon OpenSearch Service 主節點](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains-dedicatedmasternodes.html) 
+ [調整 Amazon OpenSearch Service 網域的大小](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/sizing-domains.html) 
+ [Logstash 文件](https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html) 
+ [JDBC 輸入外掛程式](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)
+ [Logstash 輸出外掛程式](https://github.com/awslabs/logstash-output-amazon_es)
+ [Amazon OpenSearch Service 網站](https://aws.amazon.com/elasticsearch-service/) 