附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
使用 OCI 函數將資料串流至 Oracle Autonomous Transaction Processing 資料庫
簡介
在本教學課程中,我們將瞭解如何使用 Oracle Cloud Infrastructure (OCI) 服務建置及部署即時資料串流管線。管線會運用 OCI Connector Hub 和 OCI 函數,將資料從 OCI 串流串流串流串流串流串流串流串流至 Oracle Autonomous Database。此函數是以 Java 撰寫,採用資源主體認證方法,以安全地存取 OCI 服務和資料庫公事包來建立與 Oracle Autonomous Database 的連線。
OCI Streaming: OCI 提供一系列工具來處理雲端中的資料,而 OCI Streaming 是為高傳輸量、即時資料串流量而量身打造的服務。透過利用 OCI Streaming,開發人員可以建構可擴展且可靠的資料管線,以有效地擷取、處理和分發資料串流。
OCI Functions: OCI Functions 是一個完全受管理、多租用戶、高度可擴展、隨選、Functions-as-a-Service 平台。它建立在企業級 OCI 上,並由 Fn Project 開放原始碼引擎提供技術支援。如果您想要專注於編寫程式碼以滿足業務需求,請使用 OCI Functions。
資源主體認證:您可以使用資源主體認證及存取 OCI 資源。資源主體由暫時階段作業記號和安全證明資料組成,讓 OCI Functions 能夠向其他 OCI 服務 (例如 OCI Streaming) 自行認證。
OCI Connector Hub: OCI Connector Hub 是雲端訊息匯流排平台,提供單一窗格,用於描述、執行和監控在 OCI 服務之間移動資料時的互動。
注意:
- 本教程僅為教育和研究目的而設計。它為學習者提供一個環境,讓他們在受控制的環境中實驗並取得實際經驗。請注意,本教學課程中使用的安全組態和措施可能不適用於實際情況。
- 真實世界應用程式的安全考量通常更複雜且動態。因此,在實作此處在生產環境中示範的任何技術或組態之前,必須進行全面的安全評估和複查。此複查應涵蓋所有安全層面,包括存取控制、加密、監督與合規性,以確保系統符合組織的安全原則和標準。
- 從實驗室環境轉變為實際部署時,安全性應永遠是首要任務。
目標
- 建立可即時處理訊息的無縫資料串流管線。當新訊息發布到 OCI 串流時,OCI Functions 會自動轉寄並處理該訊息,然後將資料載入 Oracle Autonomous Transaction Processing (ATP) 資料庫。此端對端解決方案使用 OCI 服務展示有效率的資料擷取與轉換,確保串流與資料庫系統之間的安全且可擴展整合。
必要條件
-
Oracle Cloud Infrastructure:
-
具有管理層級存取權限的 Oracle 帳戶。
-
用以建立資源的區間。
注意:請記下區間名稱和區間 ID。
-
具有專用子網路的 VCN。如需詳細資訊,請參閱建立虛擬雲端網路。
注意:請注意,VCN OCID 和子網路名稱,串流集區和函數都需要此名稱。
-
在 VCN 的專用子網路上建立串流集區。如需詳細資訊,請參閱建立串流集區。
-
在之前建立的相同串流集區上建立名為
myfirststream
的串流。如需詳細資訊,請參閱建立串流。 -
Oracle Autonomous Database。如需詳細資訊,請參閱 Oracle Autonomous Database 。
-
用於儲存加密密碼的 OCI 保存庫。如需詳細資訊,請參閱建立保存庫。
-
可供登入 OCI 容器登錄的 OCI 認證權杖。如需詳細資訊,請參閱產生認證權杖以啟用 Oracle Cloud Infrastructure Registry 的登入。
-
-
OCI Cloud Shell 環境:
- 需要有 OCI Cloud Shell 才能將函數部署至 OCI,如果您沒有 OCI Cloud Shell,可以改用堡壘主機。如需詳細資訊,請參閱堡壘主機總覽。
作業 1:設定動態群組
登入 OCI 主控台,瀏覽至您的網域,按一下動態群組,然後建立包含以下資訊的群組。
-
群組名稱:輸入
MyFunctions
。ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
作業 2: 建立原則
前往 OCI 主控台,瀏覽至原則並使用下列資訊建立原則。
-
原則名稱:輸入
FunctionsPolicies
。Allow dynamic-group MyFunctions to {STREAM_INSPECT, STREAM_READ, STREAM_CONSUME, STREAM_PRODUCE} in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read objects in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read secret-bundles in compartment YOUR-COMPARTMENT-NAME
作業 3:建立 OCI 容器登錄
-
移至 OCI 主控台,瀏覽至開發人員服務的容器和使用者自建物件,選取容器登錄,然後按一下建立儲存區域,為功能映像檔建立專用儲存區域。
-
儲存庫名稱:輸入
lab/fn-java-event-to-atp
。
-
-
檢查儲存區域,並記下命名空間。
-
開啟應安裝 OCI CLI 和 Docker 的 OCI Cloud Shell,然後繼續登入登錄。檢查您所在區域的正確 URL。本教學課程使用 Brazil East (Sao Paulo) ,其中登錄 URL 為
gru.ocir.io
。注意:您需要在「先決條件」區段中建立的使用者認證權杖。
docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
作業 4:建立 OCI 物件儲存的儲存桶以儲存您的資料庫公事包
前往 OCI 主控台,瀏覽至儲存、物件儲存與封存儲存、儲存桶,然後按一下建立儲存桶以建立名稱為 Wallet
的新儲存桶,以儲存您的資料庫公事包壓縮檔。
作業 5:下載資料庫公事包並將其儲存在 OCI 物件儲存的儲存桶
注意:此程式碼範例示範如何使用公事包安全地連線至 Oracle Autonomous Database。若要繼續進行,您需要設定公事包證明資料並建立密碼,才能在此教學課程中使用。
-
移至 OCI 主控台,瀏覽至 Oracle Database ,按一下 Autonomous Database 並選取您的 ATP。
-
按一下資料庫連線。
-
輸入您的公事包密碼並記下,您需要在應用程式中設定此密碼。
-
前往在作業 4 中建立的 OCI 物件儲存的儲存桶,然後按一下上傳以上傳下載的公事包壓縮檔。
作業 6:安全地將資料庫憑證和公事包密碼儲存在 Vault 中
注意:為先決條件,請確定您已建立保存庫。
-
移至 OCI 主控台,瀏覽至識別與安全的保存庫並選取您的保存庫。
-
按一下加密密碼、建立加密密碼,然後使用下列資訊建立加密密碼。
加密密碼名稱 數值 MYRDBMS_WALLET_PASSWORD
您的錢包密碼,使用純文字格式 MYRDBMS_DB_PASSWORD
您的資料庫密碼 (純文字) 注意:請確定您為秘密類型範本選取純文字。
對 MYRDBMS_DB_PASSWORD
重複此程序,並記下將用於函數組態的 OCID。
作業 7:建立 Java OCI 函數以接收事件訊息並插入至 ATP 資料庫
注意:請確定您選取的專用子網路與串流集區的相同子網路。
-
前往 OCI 主控台,瀏覽至開發人員服務、函數、應用程式,然後按一下建立應用程式。
-
請前往已安裝 Docker、OCI、Fn Project CLI 的 OCI Cloud Shell,然後執行下列命令以起始此函數。
注意:如果您遵循這些工作,現在已經執行您的 Docker 登入命令 (如果沒有的話),請繼續進行「工作 3」中的 Docker 日誌步驟。
-
檢查目前的相關資訊環境,因為您使用的是 OCI Cloud Shell,因此必須在目前的相關資訊環境中設定。
fn list context
-
執行下列命令以更新您的函數設定值,以便能夠從在「工作 3」中建立的容器登錄中提取映像檔。
fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn list context
注意:在此教學課程中,我們使用 Brazil East (Sao Paulo) 區域,如果您使用其他區域,則必須變更 API URL 和 REGISTRY 位置。
-
執行下列命令,檢查您建立的應用程式是否列在您的 OCI Cloud Shell 上。
注意: 確定您的 OCI Cloud Shell 使用 Network:Public
fn list apps
-
從此處取得 Java 函數範例程式碼: fn-java-event-to-atp.zip 並將其上傳至您的 OCI Cloud Shell,然後繼續解壓縮檔案。
-
按一下右上方的輪狀結構功能表,然後選取上傳以上傳檔案。
-
執行下列指令以解壓縮檔案。
# check your file is there ls -lrt # unzip the file unzip fn-java-event-to-atp.zip # check again ls -lrt
注意:此簡潔的 Java 專案會從 OCI Connector Hub 擷取 JSON 資料輸入、根據預先定義的格式進行剖析,然後順暢地將擷取的資訊插入您的 ATP 資料庫中。若要確保正確的資料插入,請參考下列步驟,以取得 ATP 資料庫中所需訊息格式與對應表格的指引。
-
在您的 OCI Cloud Shell 中,執行下列命令以建立程式碼並部署函數。
fn deploy --app MyApp # After deploy complete, check the function is there: fn list functions MyApp |grep fn-java-event-to-atp
-
移至 OCI 主控台,瀏覽至開發人員服務、函數、應用程式,選取您的應用程式 (
Myapp
),然後按一下您的函數。注意:此教學課程的 Java 範例程式碼使用組態變數來建立資料庫連線。請確定您提供環境中的適當值,以保證執行成功。
-
建立下列所有組態。
加密密碼名稱 / 金鑰 | 數值 |
---|---|
WALLET_BUCKET | 公事包 |
WALLET_OBJECT | 您壓縮檔的名稱 |
BUCKET_NAMESPACE | 您的儲存桶命名空間 |
DB_USER | 您的資料庫使用者名稱 |
DB_SERVICE_NAME | 您在資料庫連線詳細資訊中找到的資料庫服務名稱 |
DB_PASSWORD_OCID_VAULT | 貼上您的加密密碼 OCID |
DB_WALLET_PASSWORD_OCID_VAULT | 貼上您的加密密碼 OCID |
作業 8:在可承諾量資料庫上建立新表格
在 ATP 資料庫上建立一個名為 MY_TABLE
的新表格,以便從串流接收資料。
-
選取下載公事包的 Oracle Autonomous Database,按一下資料庫動作下拉式功能表,然後按一下 SQL 。
-
執行下列表格建立 DDL 命令。
注意:此實驗室使用 ADMIN 使用者進行資料庫連線。若您的使用者名稱不同,請替換。
CREATE TABLE "ADMIN"."MY_TABLE" ( "CODE" VARCHAR2(50 BYTE), "NAME" VARCHAR2(500 BYTE) ) ;
作業 9:設定 OCI 連線器中心,在新訊息到達串流時呼叫函數
現在您已建立函數和新表格來儲存資料,現在就是將所有資料連結在一起的時候了!我們會透過設定從 OCI Streaming、OCI Connector Hub 流向 OCI Functions 的管線,最後再到您的 OCI Functions 進行此操作。
-
移至 OCI 主控台,瀏覽至 Analytics & AI 、訊息傳遞,然後按一下 Connector Hub 。
-
按一下建立連線器,然後輸入下列資訊。
- 連線器名稱:輸入
StreamingToFN
。 - 來源:選取串流。
- 目標:選取函數。
注意:您必須確定您已經建立名稱為
myfirststream
的串流集區和串流。 - 連線器名稱:輸入
-
在設定來源中,選取您的串流集區和串流。
-
在設定目標中,選取 MyApp 作為函數應用程式,選取 fn-java-event-to-atp 作為函數。
注意:您可能需要建立建立連線器頁面上建議的其他原則。
作業 10:在 OCI 串流上建立訊息並驗證管線運作
注意:提供的 Java 程式碼範例是設計來處理特定 JSON 結構中的訊息。程式碼會剖析此 JSON 以擷取必要資料,然後將它插入
MY_TABLE
表格中。若偏離預期的 JSON 格式,將會導致剖析錯誤,並防止順利插入資料庫。
JSON 範例訊息:
{"code": "001", "name":"Larry"}
遵循其步驟:
-
前往 OCI 主控台,瀏覽至 Analytics & AI 、 Messaging 、 Streaming ,選取您的串流 (
myfirststream
),然後按一下產生測試訊息。 -
在資料中,輸入範例 JSON 訊息,然後按一下產生。
注意:串流管線在第一次執行時可能會發生冷啟動,因此可能會發生明顯的延遲。這是連線器中心第一次嘗試傳送訊息時,發生函數初始化的結果。
作業 11:驗證到達資料庫的資料
-
選取下載公事包的 Oracle Autonomous Database,按一下資料庫動作下拉式功能表,然後按一下 SQL 。
-
執行下列查詢。
select * from admin.my_table;
疑難排解與秘訣
-
啟用函數的日誌並檢查是否有任何錯誤。如需記錄日誌的詳細資訊,請參閱儲存及檢視函數日誌。
-
請按照「先決條件」段落的詳細說明來驗證所有原則。
-
啟用 OCI 連線器中心的日誌。如需詳細資訊,請參閱連線器中心的日誌。
相關連結
認可
- 作者 - Joao Tarla (Oracle LAD A-Team 解決方案工程師)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Stream Data to Oracle Autonomous Transaction Processing Database using OCI Functions
G25956-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.