附註:

在 OCI 通知中發布訊息、觸發函數並在 OCI 物件儲存的儲存桶中建立檔案

簡介

您可以設定發布訂閱服務,例如將訊息推送至可發出警示的端點的 Oracle Cloud Infrastructure (OCI) 通知,並透過設定的訂閱採取動作;不僅支援 Oracle Cloud Infrastructure Monitoring 或 OCI Connector Hub 使用個案,但也可以從客戶應用程式產生事件,當事件觸發 OCI 通知時,應用程式傳送訊息時,必須代表立即執行的 API 訊息。

架構可能較為複雜或較不複雜,但對於此使用案例,用戶端會提出 HTTP POST 要求,在主體中傳送具有特定屬性的 JSON 建立檔案,例如檔案名稱、要在 OCI 物件儲存中建立檔案的儲存桶名稱,以及要在檔案內建立的訊息。

接著,在 Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) 中部署並在 Node.js 中開發的 API REST 應用程式,會從要求主體和此應用程式中取得 JSON,OCI 程式庫則用於在 OCI 通知中發布已訂閱並開發 Node.js 函數的訊息,以在 OCI 物件儲存的特定儲存桶中建立文字檔並傳送 JSON 參數。

OCI 架構

OCI 架構

使用案例架構

使用案例架構

在本教學課程中,我們將從上一個服務開始設定,直到達到 Oracle Cloud Infrastructure (OCI) 中的第一個服務為止:

目標

必要條件

作業 1:在 OCI 物件儲存中建立儲存桶

  1. 登入 OCI 主控台,瀏覽至儲存物件儲存與封存儲存儲存桶,然後選取偏好的區間

  2. 按一下建立儲存設定 (Create Bucket) ,然後輸入下列資訊。

    • 分組名稱:輸入分組的名稱。例如,data 或其他名稱。
    • 預設儲存層:針對此教學課程,選取標準
    • 加密:選取使用 Oracle 管理的金鑰進行加密
    • 資源記錄日誌:選取已啟用資源記錄日誌,可觀察儲存桶中發生的情況。

    建立儲存桶

作業 2:設定和建立 OCI 函數

  1. 前往 OCI 主控台,瀏覽至開發人員服務函數應用程式,然後選取區間

  2. 按一下建立應用程式,然後輸入下列資訊。

    • 名稱:輸入函數應用程式的名稱。
    • VCN: 選取以先決條件建立的 VCN。
    • 子網路: 選取在先決條件中建立的子網路。在此教學課程中,我們設定了公用子網路。
    • 資源配置: 選取與此應用程式支援之處理器相關的資源配置。本教學課程為 GENERIC_X86

    建立函數應用程式

  3. Enable the logs to track the execution and see errors of the OCI Functions application, so in the detail of the function application, under Resources, click Logs and select Enable Log configuring the compartment, Log Group, Log Name and the time of the Log Retention.

    啟用日誌函數應用程式

工作 3:使用 FDK Node.js 設定、開發及推播 OCI 函數以建立新的文字檔

使用 FDK Node.js 設定、開發及推送 OCI 函數,以從 JSON 參數在特定儲存桶中建立新文字檔。

注意:請設定您的從屬端,例如:桌面、PC、膝上型電腦或虛擬機器 (VM) 以及您將使用 Fn 專案之功能的相關資訊環境,因為 OCI 函數是由 Fn Project 開放原始碼引擎提供技術支援,以便在 OCI Functions 上執行建立、讀取、更新及刪除作業。

如 Introduction 中的架構所示,我們將使用 OCI 中的 Oracle Linux 8 VM (管理主機)。

  1. 前往 OCI 主控台,瀏覽至開發人員服務函數應用程式,然後按一下您的函數應用程式。

  2. 資源區段底下,按一下開始使用,然後選取本機設定以使用外部 Oracle Linux VM。

    本機設定

    注意:您必須已經安裝下列元件。

    • OCI 命令行介面 (CLI)。

    • Oracle Linux 中的 Node.js。

      sudo yum update
      sudo yum install -y nodejs
      node --version
      

      OCI FDK 函數必須支援 Node.js 版本。

      OCI 函數支援的版本 - node.js

      如果不支援此版本,則必須執行下列指令。

      範例:

      sudo yum module reset nodejs
      sudo yum module enable nodejs:18
      sudo yum module install nodejs
      
    • VM 中已安裝 Fn Project CLI。如需詳細資訊,請參閱安裝 Fn 專案 CLI

  3. 以想要的程式設計語言建立您的專案。在本教學課程中,我們將使用 Node.js。若要建立新專案,請執行下列指令。

    fn init --runtime node "Name_Of_Your_Project"
    

    範例:

    fn init --runtime node app_mess_createFile_os_function
    
  4. 若要存取專案資料夾,請執行下列指令。

    cd "Name_Of_Your_Project"/
    

    範例:

    cd app_mess_createFile_os_function/
    
  5. 入門中指定的區間和您區域的 Oracle Functions API URL 建立和更新特定相關資訊環境。

    fn create context "specific_context" --provider oracle
    
    fn use context "specific_context"
    
    fn update context "your_compartment_id"
    
    fn update context api-url "your_api_url"
    

    範例:

    fn create context Developer_OCI --provider oracle
    
    fn use context Developer_OCI
    
    fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaa4ixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
    fn update context api-url https://functions.sa-vinhedo-1.oraclecloud.com
    
  6. 輸入將植入應用程式映像檔的 Oracle Cloud Infrastructure Container Registry 路徑。

    注意:如果您沒有 Oracle Cloud Infrastructure Container Registry,則必須建立此儲存區域以推送功能映像檔。

    1. 前往開發人員服務容器與使用者自建物件容器登錄,然後按一下建立儲存區域

    2. 輸入下列資訊,然後按一下建立

      • 在區間中建立: 選取您的區間,
      • 存取:選取公用
      • 儲存庫名稱:輸入儲存庫名稱。

      建立 Oracle Cloud Infrastructure 容器登錄

    確定已建立 Oracle Cloud Infrastructure Container Registry 之後,請設定此儲存區域的路徑,直到相關資訊環境中的前置碼為止。

    fn update context registry "regionID.ocir.io/tenancy_namespace/[repo-name-prefix]"
    

    範例:

    fn update context registry vcp.ocir.io/idccixxxxx/apigwrepo
    
  7. 登入 Oracle Cloud Infrastructure Container Registry。

    注意:若要登入、建置、提取映像檔並將其推送至儲存區域,您必須具備:

    請執行下列命令以登入 Oracle Cloud Infrastructure Container Registry。

    sudo docker login -u 'tenancy_namespace/username' regionID.ocir.io
    
    Password: xxxxxx
    

    範例 (在此範例中,使用者名稱與 Oracle Identity Cloud Service 同盟,因此必須包含此使用者名稱):

    sudo docker login -u 'idccixxxxx/OracleIdentityCloudService/ivan.v.vasquez@oracle.com' vcp.ocir.io
    
    Password: xxxxxx
    

    登入

  8. 設定 OCI 函數之後,我們將開發 Node.js 程式以在特定儲存桶中建立文字檔。

    我們已在 Task 3.3 中建立函數專案,它會在專案資料夾中建立下列檔案:

    • func.js (在此檔案中,我們寫入 node.js 專案邏輯)。
    • func.yaml (此為函數組態檔)。
    • package.json (此檔案指定專案邏輯所需的 Node.js 相依性)。

    在此專案中,我們需要新增下列 Node.js OCI SDK 相依性; oci-objectstorageoci-common 。請執行下列命令來安裝相依性。

    npm install oci-common
    

    新增相依性 oci-common

    npm install oci-objectstorage
    

    新增相依性 oci-objectstorage

    我們可以看到在 package.json 檔案中新增的相依性。

    已新增相依性

    我們將使用組態檔從程式碼進行 OCI 認證,類似於設定 OCI CLI 的程序,其中金鑰和組態檔都放置在 Fn Project 資料夾中。

    函數專案資料夾

    下列是 Node.js 原始程式碼,每個程式碼片段的詳細資訊都會加上註解說明。

    • func.js.

      //Dependencies are added
      const fdk= require('@fnproject/fdk');
      const os = require("oci-objectstorage");
      const common = require("oci-common");
      
      //method invoked when is triggered the function
      fdk.handle(async function(input){
      try{
          //declaration of constants such as tenancy namespace and region
          const namespace = 'idccixxxxx';
          const region = 'sa-vinhedo-1';
          //declaration of variables required such as bucket name, file name and text for create the file text in a specific bucket
          let bucketName = 'data';
          let objectName = 'empty.txt';
          let fileMessage = 'Empty!'
      
          //Getting json values from input variable
          if (input.objectName) {
              objectName = input.objectName;
          }
      
          if (input.bucketName){
              bucketName = input.bucketName;
          }
      
          if (input.fileMessage){
              fileMessage = input.fileMessage;
          }
      
          //Creation of Authentication, using Config File Authentication Object
          const configurationFilePath = "config";
          const configProfile = "DEFAULT";
          const provider = new common.ConfigFileAuthenticationDetailsProvider(
          configurationFilePath,
          configProfile
          );
      
          //Creation of Object Storage Client using authentication object
          const client = new os.ObjectStorageClient({authenticationDetailsProvider: provider});
          client.regionId = region;
      
          //The object to upload to the object store.
          const putObjectRequest = {
              namespaceName: namespace, //namespace of your object storage
              bucketName: bucketName,   //name of the bucket where the file will be placed
              objectName: objectName,   //name of the text file
              putObjectBody: generateStreamFromString(fileMessage) //The body that will be uploaded in the object stored
          };
      
          //Put the text file object in the object storage specified
          const response = await client.putObject(putObjectRequest);
      
          return {'message': 'Bucket Name: ' + bucketName+' - FileName: '+objectName+ ' \nMessage: '+fileMessage}
          }catch (error) {
          console.error('Error uploading to Object Storage:', error);
          }
      })
      
      //return ReadableStream object required by putObjectBody, using the string message that will write in the text file
      function generateStreamFromString(data) {
      let Readable = require("stream").Readable;
      let stream = new Readable();
      stream.push(data); // the string you want
      stream.push(null);
      return stream;
      }
      

    注意:請從此處下載 OCI Functions Projectapp_mess_createFile_os_function.zip

  9. 專案已建立,請確定您持續登入 Oracle Cloud Infrastructure Container Registry。我們將在 Oracle Cloud Infrastructure Container Registry 中建置及推送映像檔,並在 OCI Functions 應用程式中部署此功能。

    1. 前往 OCI 主控台,瀏覽至開發人員服務函數應用程式,然後按一下您的函數應用程式。

      在我們的本機機器中,我們必須位於 OCI Functions 專案資料夾中。

      fn deploy --app name_of_your_function_application
      

      範例:

      fn deploy --app fn-demo-apgw
      

      部署 Oracle Cloud Infrastructure 容器登錄中的功能

    2. 若要驗證映像檔已部署在 Oracle Cloud Infrastructure Container Registry 中,請前往 OCI 主控台,然後瀏覽至開發人員服務容器與使用者自建物件容器登錄

      存入 Oracle Cloud Infrastructure Container Registry 中的 OCI 主控台映像檔

      若要檢查此函數是否已部署在 OCI Functions 應用程式中,請前往 OCI 主控台並瀏覽至開發人員服務函數應用程式,按一下您的函數應用程式,並查看該影像在 Oracle Cloud Infrastructure Container Registry 路徑中參照。

      存入部署於 OCI 函數中的 OCI 主控台映像檔

  10. 從本機機器執行測試,執行下列 Fn Project 命令,使用 JSON 格式提供的參數模擬輸入。

    echo -n '{"jsonVariable": "value"}' | fn invoke application_function_name function_name
    

    範例:

    echo -n '{"objectName": "tutorialFileText.txt", "bucketName":"data", "fileMessage":"This an example message, for this tutorial in the text file"}' | fn invoke fn-demo-apgw app_mess_createfile_os_function
    

    呼叫函數

    若要複查儲存桶中建立的檔案,請前往儲存物件儲存與封存儲存儲存桶,然後按一下您的儲存桶並驗證該檔案是否存在。

    驗證儲存桶

    複查檔案

作業 4:建立新的 OCI 通知主題和將 OCI 函數關聯為端點的訂閱

  1. 建立及使用 OCI 通知。將訊息發布在此服務內的主題中時,會對端點產生觸發程式。此端點將是「工作 3」中建立的函數。

    前往 OCI 主控台,瀏覽至開發人員服務應用程式整合以及通知。按一下建立主題,然後輸入此主題的名稱。

    在 OCI 通知中建立主題

    在 OCI 通知中建立的主題

  2. 若要建立此主題的訂閱,請按一下您的主題並建立訂閱。在本教學課程中,我們將選取 Functions 作為端點。您可以選取端點,例如電子郵件、Slack、SMS、PagerDuty 或 HTTPS URL,然後選取函數區間Oracle Functions 應用程式函數

    正在建立訂閱

    已建立訂閱

    注意:在 OCI 通知中,如有需要,我們可以使用不同的端點建立多個訂閱。

  3. 在 OCI 通知中,我們可以發布內含必要變數的 JSON 格式訊息,類似於我們在 OCI 函數的任務 3 中所執行的作業。

    前往 OCI 主控台,瀏覽至開發人員服務應用程式整合以及通知。按一下您的主題並輸入訊息,如下圖所示。

    執行 OCI 通知

    若要驗證您的儲存桶,請前往儲存物件儲存與封存儲存儲存桶。按一下您的儲存桶,然後驗證檔案是否存在。

    從 OCI 通知測試

    複查從 OCI 通知建立的測試檔案

作業 5:在 Oracle Cloud Infrastructure Container Engine for Kubernetes 中建立及設定 Kubernetes 叢集

在這項任務中,我們將建立一個簡單的 Kubernetes 叢集。如需詳細資訊,請參閱建立 OKE 叢集

  1. 前往 OCI 主控台,瀏覽至開發人員服務容器與使用者自建物件,然後按一下 Kubernetes 叢集 (OKE)

  2. 叢集頁面中,按一下建立叢集

  3. 我們有兩個工作流程可建立叢集。按一下自訂建立送出

    • 快速建立:這比較簡單、更快速,而且會自動部署 OKE 所需的所有元素,例如:

      • 虛擬雲端網路 (VCN)
      • 網際網路閘道 (IG)
      • NAT 閘道 (NAT)
      • 服務閘道 (SGW)
      • Kubernetes 叢集
      • Kubernetes 工作節點與節點集區
    • 自訂建立:對於客戶已經擁有服務、網路、基礎架構的企業環境,請務必自訂 OKE 部署,以符合規範,並符合用戶端架構、資源及遵循最佳實務。

      在本教學課程中,我們將選取自訂建立來保留上面顯示的架構。

    建立 OKE 叢集的選項

  4. 輸入叢集名稱區間Kubernetes 版本,然後按一下下一步

    建立叢集

  5. 網路設定頁面中,輸入下列資訊,然後按下一步

    • 網路類型:選取 VCN 原生 Pod 網路。如需詳細資訊,請參閱 POD 網路
    • VCN: 選取您的 VCN。
    • 子網路: 選取專用和公用子網路。在本教學課程中,我們使用公用子網路作為負載平衡器,而專用子網路則用於 API 端點。

    網路設定

  6. 節點集區頁面中,輸入下列資訊。

    • 名稱:輸入節點集區的名稱。
    • 區間:選取您的區間。
    • 節點類型:選取受管理節點類型。如需詳細資訊,請參閱比較虛擬節點與受管理節點
    • 版本:選取 Kubernetes 的版本。
    • 節點位置組態:
      • 可用性網域:設定可用性網域。
      • 工作節點子網路: 設定將在此節點集區中建立之節點的專用子網路。
      • 容錯域:選取要在其中分配節點的容錯域。
    • 資源配置和映像檔: 選取工作節點的資源配置和映像檔,
      • 節點資源配置:選取 VM.Standard.E3.Flex Shape (16GB RAM memory and 1 OCPU)
      • 影像:選取 Oracle-Linux-8.9-2024.01.26-0-OKE-1.28.2-679 影像。
    • 節點數目:輸入 1,此教學課程的 1 就是足夠的。
    • 開機磁碟區: 將不會修改開機磁碟區參數。
    • Pod 通訊: 選取專用子網路。

    節點集區 1

    節點集區 2

  7. 複查 Kubernetes 叢集組態,然後按一下建立叢集

    注意: 按一下建立叢集之前,請確定已在負載平衡器、API 端點以及工作節點的每個 OKE 網路子網路中設定所有傳入和傳出安全清單規則。如需詳細資訊,請參閱 Network Resource Configuration for Cluster Creation and Deployment

    複查 OKE

    若要驗證 Kubernetes 叢集,請瀏覽至開發人員服務容器與使用者自建物件Kubernetes 叢集 (OKE)

    已建立 OKE 叢集

  8. 若要存取 Kubernetes 叢集,請按一下 Kubernetes 叢集名稱和存取叢集

    您可以看到 Cloud Shell 存取已停用並啟用本機存取,因為選取 API 端點子網路時,我們選擇了專用子網路 (亦即更安全且存取 Kubernetes 叢集的唯一方法是使用本機機器,因此我們與管理主機 Oracle Linux VM 本教學課程中所使用的組態完全相同。選取本機存取

    存取叢集

    注意:我們必須安裝 OCI CLI、Docker 和 kubectl。如需詳細資訊,請參閱 Installing kubectl

  9. 管理主機就緒之後,請執行下列命令,從您的本機機器存取 Kubernetes 叢集。

    1. 驗證 OCI CLI 版本。

      oci -v
      
    2. 在您的本位目錄中建立 kubeconfig 目錄。

      mkdir -p $HOME/.kube
      
    3. 使用 VCN 原生專用端點建立 kubeconfig 檔案。

      oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.sa-vinhedo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --file $HOME/.kube/config --region sa-vinhedo-1 --token-version 2.0.0  --kube-endpoint PRIVATE_ENDPOINT
      
    4. 設定 kubeconfig 環境變數。

      export KUBECONFIG=$HOME/.kube/config
      
  10. 若要驗證 Kubernetes 叢集的存取,請執行 kubectl 命令。

    • 取得 OKE 工作節點。

      kubectl get nodes
      

      kubectl 取得節點

    • 取得 OKE Pod。

      kubectl get pods -A
      

      kubectl 取得 Pod

工作 6:在 Node.js 中開發及部署 API REST 應用程式,並在 OCI 通知中發布訊息

在本教學課程中,我們將在 Node.js 中開發及部署 API REST 應用程式,以從 HTTP Post 要求主體取得 JSON,並在 OCI Notifications 中將此 JSON 主體發布為訊息。

我們將建立 Node.js 專案、建立專案、將其推送至 Oracle Cloud Infrastructure Container Registry 並於 OKE 中部署。我們將使用為 OCI Functions 設定的現有 Oracle Linux 管理主機,因此已經安裝 Node.js 和 Docker。

  1. 執行下列指令,在本機機器本位目錄中建立包含專案名稱的資料夾,並將目錄變更為專案資料夾。

    mkdir api_rest_application_oke
    
    cd api_rest_application_oke
    
  2. 若要初始化專案,請執行下列指令並設定 package.json 檔案,如下圖所示。

    npm init
    

    nodejs 專案

  3. 開發 Node.js 程式碼之前,必須先安裝專案所需的程式庫。

    • API REST 應用程式必須像 Web 應用程式一樣運作,因此我們需要 express 程式庫。

      npm install express
      

      正在安裝 Express 程式庫

    • 我們需要從 HTTP POST 要求取得 JSON 主體,因此需要 body-parser 程式庫。

      npm install body-parser
      

      安裝 body-parser 程式庫

    • 此應用程式需要向 OCI 進行認證,才能存取其服務,因此我們需要 oci-common 程式庫。

      npm install oci-common
      

      安裝 oci-common 程式庫

    • 若要在來自要求主體的 OCI 通知中發布訊息,我們需要 oci-ons 程式庫。

      npm install oci-ons
      

      安裝 OCI-ons 程式庫

    我們的 package.json 具有下列相依性。

    package.json 檔案

  4. 設定 Node.js 專案之後,我們就可以在 index.js 檔案中建立程式碼。以下是原始程式碼。

    我們將使用組態檔從程式碼進行 OCI 認證,與設定 OCI CLI 的方式類似。在這兩種情況下,金鑰和組態檔都放置在 API REST 應用程式專案資料夾中,如下圖所示。

    API Rest 專案中的組態檔

    • index.js.

      //Dependencies are added
      const ons = require("oci-ons"); //oci notifications library
      const common = require("oci-common"); //oci authentication library
      const express = require('express'); //web application framework
      const bodyParser = require('body-parser');//extract information from an incoming HTTP request
      
      
      
      //invocation of express framework
      const app = express();
      //definition of port that We will be used to listen the requests from the client side
      const port = 8080;
      
      
      //Create a default authentication provider that uses the DEFAULT
      const provider = new common.ConfigFileAuthenticationDetailsProvider(
                      "config",
                  "DEFAULT"
              );
      
      
      //Use in the body HTTP POST request json format
      app.use(bodyParser.json());
      //creation of POST endpoint
      app.post('/api/receive-json', (req, res) => {
          const jsonData = req.body;
      
              //If the Body is empty or not json format return error
              if (!jsonData) {
                  return res.status(400).json({ error: 'Invalid JSON data in the request body' });
              }
      
              (async () => {
                  try {
      
                  // Create OCI Notifications Client with OCI Authentication Object
                  const client = new ons.NotificationDataPlaneClient({ authenticationDetailsProvider: provider });
      
                  // Create constant message object required for OCI Notifications
                  const messageDetails = {
                      title: "PUBLISH_MESSAGE", //Message Title
                      body: JSON.stringify(jsonData) //Body Message
                  };
      
                  //Create publish Message Request in a specific topic in OCI Notifications
                  const publishMessageRequest = ons.requests.PublishMessageRequest = {
                          topicId: "ocid1.onstopic.oc1.sa-vinhedo-1.amaaaaaan4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                      messageDetails: messageDetails
                  };
      
      
      
                  //Publish Message sending Publish Message Request object previously created
                  const publishMessageResponse = await client.publishMessage(publishMessageRequest);
      
                  } catch (error) {
                  //error log
                  console.log("publishMessage Failed with error  " + error);
                  }
              })();
      
          res.json({ success: true, message: 'JSON data received successfully' });
      });
      
      //listening for a specific port
      app.listen(port, () => {
      console.log(`Server is running at http://localhost:${port}`);
      });
      
  5. 在同一個資料夾中建立 Dockerfile,這可讓我們建立容器映像檔。

    FROM node:14
    WORKDIR /usr/src/app
    COPY package*.json ./
    RUN npm install
    COPY . .
    EXPOSE 8080
    CMD [ "node", "index.js" ]
    
  6. 在本機 Docker 儲存區域中建立及推送專案的映像檔。

    docker build . -t apirestapp:latest
    

    組建 Docker 映像檔

    驗證本機 Docker 儲存區域中的映像檔。

    docker images
    

    檢查嵌入器圖片

    注意:

    • 您必須要有 Oracle Cloud Infrastructure 容器登錄。請參閱工作 3.6。

      建立 OKE 應用程式儲存庫

    • 您必須登入 Oracle Cloud Infrastructure Container Registry,因為我們使用的本機機器管理員主機必須登入。請參閱工作 3.7。

  7. 我們可以在 Oracle Cloud Infrastructure Container Registry 中標記 API REST 應用程式映像檔。

    docker tag apirestapp:latest vcp.ocir.io/idccixxxxx/oke_application/oke_apirest_application_repository:latest
    

    在本機 Docker 儲存區域中驗證。

    docker images
    

    標記 OKE 應用程式

    將映像檔推送至 Oracle Cloud Infrastructure 容器登錄。

    docker push vcp.ocir.io/idccixxxxx/oke_application/oke_apirest_application_repository:latest
    

    推送 OKE 應用程式

    若要複查 Oracle Cloud Infrastructure Container Registry 中的 OKE 映像檔應用程式,請前往開發人員服務容器與使用者自建物件容器登錄

    OKE Containe 登錄中的影像

  8. 映像檔在 Oracle Cloud Infrastructure Container Registry 中之後,我們便可以前往本機 Oracle Linux VM 管理主機,並在 OKE 中部署此映像檔。對於此教學課程,請執行下列命令以建立 OKE 的命名空間和加密密碼。

    1. 存取專案資料夾。

      cd api_rest_application_oke/
      
    2. 建立 OKE 的命名空間。

      kubectl create namespace ns-tutorial
      

      建立命名空間 Oke

    3. 檢查命名空間。

      kubectl get namespace ns-tutorial
      

      驗證命名空間餘量

    4. 建立 OKE 的加密密碼。

      kubectl create secret -n ns-tutorial generic ocir --from-file=.dockerconfigjson=../.docker/config.json --type=kubernetes.io/dockerconfigjson
      

      建立加密密碼金鑰

    5. 驗證加密密碼。

      kubectl get secrets -A
      

      驗證加密密碼 OK

  9. 我們已經準備好 OKE 環境,因此將應用程式映像檔從 Oracle Cloud Infrastructure Container Registry 部署到 OKE。

    注意:若要部署應用程式映像檔,必須要有資訊清單檔案。在本教學課程中,下列 yaml 檔案是資訊清單檔案,可用來部署應用程式,以及建立 OCI Load Balancer 中以 80 連接埠監聽的傳入服務。

    • apirest_application_manifest.yaml.

      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: app-restapi
      namespace: ns-tutorial
      labels:
          app: app-restapi
      spec:
      replicas: 1
      selector:
          matchLabels:
          app: app-restapi
      template:
          metadata:
          labels:
              app: app-restapi
          spec:
          containers:
          - name: app-restapi
              image: vcp.ocir.io/idccixxxxx/oke_application/oke_apirest_application_repository:latest
              ports:
              - containerPort: 8080
          imagePullSecrets:
          - name: ocir
      
      apiVersion: v1
      kind: Service
      metadata:
      name: svc-restapp
      namespace: ns-tutorial
      spec:
      selector:
          app: app-restapi
      ports:
          - port: 80
          targetPort: 8080
      type: LoadBalancer
      
    • 在您儲存資訊清單檔案的資料夾中執行 kubectl 指令。

      kubectl apply -f apirest_application_manifest.yaml
      

      現在會部署應用程式,並在 OKE 中建立傳入負載平衡器服務。

      在 OKE 中套用資訊清單

    • 若要驗證在 OKE 中建立的 Pod 與服務,請執行下列指令。

      kubectl get pods -A
      

      OKE PODS

      kubectl get svc -A
      

      OKE 服務

    注意:請從以下位置下載 API REST 應用程式專案:api_rest_application_oke.zip

作業 7:要求含 JSON 主體的 HTTP POST 至 API REST 應用程式之負載平衡器中顯示的 URL

In this task, we will make an HTTP POST request with JSON message body from Postman client that contains the basic data to create a file in a bucket.此要求將會傳送至 OKE 中的 API REST 應用程式,並在 OCI 通知主題中推送訊息,將會觸發邏輯功能,在特定儲存桶中建立文字檔,如簡介中的架構所示。

  1. 若要安裝 Postman,請參閱 Postman Installation

  2. 開啟 Postman 應用程式。

    1. 按一下漢堡功能表的檔案,然後選取新建

      Postman 選單

    2. 選取 HTTP

      HTTP 選項

    3. 輸入 OKE 中部署之 API REST 應用程式所顯示的 URL:http://"IP ADDRESS LOAD BALANCER"/api/receive-json,然後選取 POST 方法。在 Body 標記中,選取原始並在空白欄位中輸入 JSON 訊息。

      Postman 要求

  3. 按一下傳送即可傳送要求。

    答案要求 Postman

    若要驗證在 OCI 物件儲存中特定儲存桶中建立的檔案,請前往儲存物件儲存與封存儲存儲存桶,然後按一下您的儲存桶。

    此教學課程中特定儲存桶的上次建立檔案

    最後一個文字檔案

在本教學課程中,您將使用 OCI Notifications 搭配新的使用案例,整合了一些部署在 OKE、OCI Functions 和 OCI Object Storage 中的 API、OCI SDK、Kubernetes 應用程式等服務。

認可

其他學習資源

瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center