使用持久性資料儲存

您可以使用持久性資料儲存將 IBM Cloud Object Storage (COS) 儲存桶掛載到您的 IBM Cloud® Code Engine 應用程式或作業。 此功能可讓您的工作負載使用標準檔案作業,透過本機檔案系統存取 COS 資料桶的內容。

Code Engine 中的持久化資料儲存是對 Code Engine 不管理的現有資料儲存的參照。 目前,IBM Cloud Object Storage 是唯一支援的資料儲存類型。 透過建立 COS 資料桶的參照,您可以直接將它掛載到應用程式或作業容器的檔案系統中。

開始之前

在使用持久化資料儲存之前,請確保符合下列先決條件。

  • 您必須有一個 IBM Cloud Object Storage 實例
  • 您必須為 Object Storage 啟用 HMAC 認證的 實例建立服務認證。 HMAC 認證至少需要 Writer 服務存取角色才能從儲存桶讀取或寫入。 如果您只需要讀取存取權限,請選擇「內容閱讀器」服務存取角色。
  • 您的 Object Storage 實例中必須有可用的水桶。 如需詳細資訊,請參閱 建立新儲存桶
  • 您必須有一個 Code Engine 項目,並且必須選擇它作為當前上下文。

步驟 1:使用主控台在 Code Engine 中建立 HMAC secret

要安全存取您的 COS 儲存桶,Code Engine 需要與您的 Object Storage 範例相關聯的 HMAC 認證。 您可以將這些憑證儲存於 Code Engine 專案內的秘密中。

請遵循 從控制台建立 HMAC 秘 密,以建立格式為 HMAC 的秘密。

根據提示提供 COS 服務憑證中的相應值。

步驟 2:使用主控台建立持久性資料儲存庫

現在,在 Code Engine 中建立持久性資料儲存資源。 此資源可作為您 COS 資料桶的參考,並將其與您建立的 HMAC 秘密連結。

  1. 按一下 Code Engine 專案頁面上的專案名稱。
  2. 從 Components 頁面,按一下 Persistent data stores
  3. 從持久性資料儲存頁面,按一下建立
  4. 從「建立持久性資料儲存」頁面,完成下列步驟:
    1. 提供名稱;例如,mysecret-hmac
    2. 指定是否要選擇現有的 COS 資料桶規格,或是否要手動新增
    3. 選擇 COS 範例或手動指定其名稱。
    4. 選取儲存桶或手動指定其名稱。
    5. 選擇驗證 COS 範例所需的 HMAC 存取秘訣
    6. 按一下建立以建立持久性資料儲存。

步驟 3:使用主控台將資料儲存掛載到工作負載中

建立持久性資料儲存空間後,您可以在建立或更新應用程式或工作時,將其掛載為磁碟區掛載

安裝至應用程式

  1. 導覽到您的應用程式。

    • Code Engine 專案頁面,按一下專案名稱。 按一下 Applications(應用程式) 以處理您的應用程式。
    • 從 Applications(應用程式)頁面,按一下要更新的應用程式名稱,或按一下 Create(建立 )建立新應用程式。
  2. 選取「設定」索引標籤。

  3. 從卷掛載索引標籤,按一下新增

  4. 選擇磁碟區類型持久性資料儲存

  5. 請選擇一個持久性資料儲存庫

  6. 如果您的應用程式僅應存取具有該子路徑前綴的儲存桶中的對象,請指定相對儲存桶路徑(可選),例如 path/in/bucket。 當您想要隔離對儲存桶內特定資料夾的存取時,這將非常有用。 子路徑必須是 COS 資料桶中的有效前綴。 只有該路徑下的內容才能從掛載的目錄中存取。

  7. 指定安裝路徑。 這是應用程式容器內可以存取磁碟區掛載資料的目錄,例如 /mnt/bucket

  8. 選擇存取權限的值,即讀寫唯讀

  9. 按一下新增以建立磁碟區掛載。

  10. 按一下「部署」儲存您的變更並部署應用程式修訂版。

當您更新應用程式時,您的應用程式會建立新的修訂版,並將流量路由到該實例。

裝入工作

  1. 請前往您的職缺頁面。

    • Code Engine 專案頁面,按一下專案名稱。 按一下工作,處理您的工作和工作執行。
    • 從工作頁面,按一下工作索引標籤,然後按一下您要更新或按一下建立新工作的工作名稱。
  2. 選取「設定」索引標籤。

  3. 從卷掛載索引標籤,按一下新增

  4. 選擇磁碟區類型持久性資料儲存

  5. 請選擇一個持久性資料儲存庫

  6. 如果您的作業運行僅應存取具有該子路徑前綴的儲存桶中的對象,請指定相對儲存桶路徑(可選),例如 path/in/bucket。 當您想要隔離對儲存桶內特定資料夾的存取時,這將非常有用。 子路徑必須是 COS 資料桶中的有效前綴。 只有該路徑下的內容才能從掛載的目錄中存取。

  7. 指定安裝路徑。 這是作業執行容器內可以存取磁碟區掛載資料的目錄,例如 /mnt/bucket

  8. 選擇存取權限的值,即讀寫唯讀

  9. 按一下新增以建立磁碟區掛載。

  10. 按一下部署,以儲存變更並部署工作。

  11. 按一下提交工作

開始之前

在使用持久化資料儲存之前,請確保符合下列先決條件。

  • 您必須有一個 IBM Cloud Object Storage 實例
  • 您必須為 Object Storage 啟用 HMAC 認證的 實例建立服務認證。 HMAC 認證至少需要 Writer 服務存取角色才能從儲存桶讀取或寫入。 如果您只需要讀取存取權限,請選擇「內容閱讀器」服務存取角色。
  • 您必須執行下列指令來安裝 IBM Cloud Object Storage 外掛程式:
    ibmcloud plugin install cloud-object-storage
    
  • 您的 Object Storage 實例中必須有可用的水桶。 如需詳細資訊,請參閱 建立新儲存桶
  • 您必須有一個 Code Engine 項目,並且必須選擇它作為當前上下文。

步驟 1:使用 CLI 在 Code Engine 中建立 HMAC secret

要安全存取您的 COS 儲存桶,Code Engine 需要與您的 Object Storage 範例相關聯的 HMAC 認證。 您可以將這些憑證儲存於 Code Engine 專案內的秘密中。

若要建立 hmac 格式的秘密,請使用 secret create 指令。

ibmcloud ce secret create --name my-hmac-secret --format hmac --secret-access-key-prompt --access-key-id-prompt

命令提示時,請提供 COS 服務憑證中的相應值。secret create 命令提示時,提供 COS 服務憑證的相應值。

步驟 2:使用 CLI 建立持久性資料儲存庫

現在,在 Code Engine 中建立持久性資料儲存資源。 此資源可作為您 COS 資料桶的參考,並將其與您建立的 HMAC 秘密連結。

ibmcloud ce persistentdatastore create --name my-cos-bucket-pds --cos-bucket-name my-cos-bucket --cos-access-secret my-hmac-secret
  • my-cos-bucket-pds 改為資料儲存的唯一名稱。
  • my-cos-bucket 改為您 COS 儲存桶的確切名稱。
  • 以 HMAC 密碼的名稱取代 my-hmac-secret

步驟 3:使用 CLI 將資料儲存掛載到工作負載中

建立持久性資料儲存後,您可以在建立或更新應用程式或工作時掛載它。 使用 --mount-data-store 選項,格式為 MOUNT_PATH=PDS_NAME.

安裝至應用程式

以下指令會建立一個名為 myapp 的應用程式,並將 my-cos-bucket-pds 資料儲存掛載到應用程式容器內的 /mnt/bucket 目錄。

ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds

裝入工作

同樣地,此指令會建立一個名為 myjob 的工作,並將相同的資料儲存掛載到 /mnt/bucket 目錄。

ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds

在儲存桶內安裝子路徑

您也可以掛載 COS 資料埇內的特定子路徑,方法是使用冒號 (:) 將相對路徑附加到掛載定義。當您想要隔離對 COS 資料桶內特定資料夾的存取時,這個方法非常有用。

例如,僅將 my-cos-bucket-pds 資料儲存中的 path/in/bucket 目錄掛載到 /mnt/bucket

ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket

或是為了工作

ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket

注意: path/in/bucket 必須是您 COS 桶中的有效前綴。 只有該路徑下的內容才能從掛載的目錄中存取。

步驟 4:存取掛載資料儲存區中的檔案

一旦您的應用程式或工作開始執行,程式碼就可以與已掛載的 COS 資料桶互動,就好像它是一個本機目錄一樣。 支援所有標準檔案系統作業。

例如,在您的容器內,您可以列出檔案、讀取內容和寫入新檔案:

# List files in the bucket
ls -l /mnt/bucket
# Read a file from the bucket
cat /mnt/bucket/my-document.txt
# Write a new file to the bucket
echo "Hello from Code Engine" > /mnt/bucket/new-file.txt

限制

掛載使用 s3fs,它為 S3-compatible 存儲提供了基於 FUSE 的檔案系統介面。 請注意下列限制:

  • 持久化資料儲存庫的數量:
    • 有一項限制,允許每個應用程式或工作最多掛載兩個持久性資料儲存。
  • 效能:
    • Object Storage 對於需要立即存取的作業,它們比本機檔案系統慢。
    • 修改檔案的作業,例如隨機寫入或追加,需要在後端重新寫入整個物件,由於沒有隨機寫入存取,所以速度會很慢,效率也不高。
    • 元資料作業(例如列出目錄)的效能可能很差。
  • 一致性:
    • IBM Cloud Object Storage 為新物件提供強大的讀寫後一致性,但對於物件的覆寫和刪除,則提供最終一致性。 這表示在更新或刪除之後,讀取作業可能會暫時傳回過時的資料。
    • 從掛載外部(例如,直接透過 COS API 或其他用戶端)對儲存桶所做的變更,不會立即被偵測到,而且可能在一段時間內都看不到。
  • 檔案系統語義:
    • 不完全支援標準 POSIX 檔案系統功能。 具體來說,沒有檔案或目錄的原子重命名,沒有硬連結
  • 並行性:
    • 掛載同一水桶的多個用戶端(例如多個應用程式實體)之間沒有協調。 從不同的實體同時寫入相同的檔案可能會導致資料遺失或損毀。
  • 事件訂閱:
    • 如果您已為 Object Storage 桶設定事件訂閱,請注意透過掛載執行的檔案建立作業可能會產生多個更新事件。 這可能會導致您的 Code Engine 應用程式或工作因單一檔案作業而被觸發一次以上,這可能會影響下游處理或事件驅動的工作流程。

由於這些限制,此功能並不適用於所有工作負載。 它最適合主要讀取大型檔案的工作負載,例如在深度學習或資料分析中,可以達到良好的吞吐量。 不建議需要低延遲、頻繁小寫入或交易檔案作業的工作負載使用。

下一步

現在您已瞭解如何使用持久性資料儲存,請探索更進階的主題: