使用持久性資料儲存
您可以使用持久性資料儲存將 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 秘密連結。
- 按一下 Code Engine 專案頁面上的專案名稱。
- 從 Components 頁面,按一下 Persistent data stores。
- 從持久性資料儲存頁面,按一下建立。
- 從「建立持久性資料儲存」頁面,完成下列步驟:
- 提供名稱;例如,
mysecret-hmac。 - 指定是否要選擇現有的 COS 資料桶規格,或是否要手動新增。
- 選擇 COS 範例或手動指定其名稱。
- 選取儲存桶或手動指定其名稱。
- 選擇驗證 COS 範例所需的 HMAC 存取秘訣。
- 按一下建立以建立持久性資料儲存。
- 提供名稱;例如,
步驟 3:使用主控台將資料儲存掛載到工作負載中
建立持久性資料儲存空間後,您可以在建立或更新應用程式或工作時,將其掛載為磁碟區掛載。
安裝至應用程式
-
導覽到您的應用程式。
- 從 Code Engine 專案頁面,按一下專案名稱。 按一下 Applications(應用程式) 以處理您的應用程式。
- 從 Applications(應用程式)頁面,按一下要更新的應用程式名稱,或按一下 Create(建立 )建立新應用程式。
-
選取「設定」索引標籤。
-
從卷掛載索引標籤,按一下新增。
-
選擇磁碟區類型為持久性資料儲存。
-
請選擇一個持久性資料儲存庫。
-
如果您的應用程式僅應存取具有該子路徑前綴的儲存桶中的對象,請指定相對儲存桶路徑(可選),例如
path/in/bucket。 當您想要隔離對儲存桶內特定資料夾的存取時,這將非常有用。 子路徑必須是 COS 資料桶中的有效前綴。 只有該路徑下的內容才能從掛載的目錄中存取。 -
指定安裝路徑。 這是應用程式容器內可以存取磁碟區掛載資料的目錄,例如
/mnt/bucket。 -
選擇存取權限的值,即讀寫或唯讀。
-
按一下新增以建立磁碟區掛載。
-
按一下「部署」儲存您的變更並部署應用程式修訂版。
當您更新應用程式時,您的應用程式會建立新的修訂版,並將流量路由到該實例。
裝入工作
-
請前往您的職缺頁面。
- 從 Code Engine 專案頁面,按一下專案名稱。 按一下工作,處理您的工作和工作執行。
- 從工作頁面,按一下工作索引標籤,然後按一下您要更新或按一下建立新工作的工作名稱。
-
選取「設定」索引標籤。
-
從卷掛載索引標籤,按一下新增。
-
選擇磁碟區類型為持久性資料儲存。
-
請選擇一個持久性資料儲存庫。
-
如果您的作業運行僅應存取具有該子路徑前綴的儲存桶中的對象,請指定相對儲存桶路徑(可選),例如
path/in/bucket。 當您想要隔離對儲存桶內特定資料夾的存取時,這將非常有用。 子路徑必須是 COS 資料桶中的有效前綴。 只有該路徑下的內容才能從掛載的目錄中存取。 -
指定安裝路徑。 這是作業執行容器內可以存取磁碟區掛載資料的目錄,例如
/mnt/bucket。 -
選擇存取權限的值,即讀寫或唯讀。
-
按一下新增以建立磁碟區掛載。
-
按一下部署,以儲存變更並部署工作。
-
按一下提交工作。
開始之前
在使用持久化資料儲存之前,請確保符合下列先決條件。
- 您必須有一個 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 應用程式或工作因單一檔案作業而被觸發一次以上,這可能會影響下游處理或事件驅動的工作流程。
由於這些限制,此功能並不適用於所有工作負載。 它最適合主要讀取大型檔案的工作負載,例如在深度學習或資料分析中,可以達到良好的吞吐量。 不建議需要低延遲、頻繁小寫入或交易檔案作業的工作負載使用。
下一步
現在您已瞭解如何使用持久性資料儲存,請探索更進階的主題: