我如何處理只在特定時間需要的雲中的虛擬機?
我目前正在本地伺服器上處理影片,我想將其外包給雲端。我對Google云非常熟悉,這就是我選擇Google的原因。該過程將包括:
- 將影片文件上傳到 Cloud Storage
- 在 Compute Engine 實例中處理文件
- 將處理後的影片儲存到 Cloud Storage
平均而言,我每天需要 1 小時的 Compute Engine 實例。是否有一種簡單的方法可以自動啟動實例並按需關閉它?我該怎麼做呢?
有一種更簡單的方法可以做到這一點。
GCP 提供了一項名為Cloud Functions的服務。在其中,您可以放置由 Events 或Triggers呼叫的腳本。其中之一是通過 Cloud Storage 事件啟動的Cloud Storage 觸發器,例如對象創建(上傳文件)或對象刪除(刪除文件)。
Cloud Function 可以讀取文件(在本例中為影片),執行其中的所有過程並返回結果,或者在您的情況下,將結果儲存在 GCS 儲存桶中(可能與上傳文件的位置相同,可以成為另一個)。在這裡,您可以找到與剛剛上傳的文件進行互動的程式碼範例。
要儲存您處理過的影片,請查看Cloud Storage 客戶端庫。根據您將使用的語言(雲儲存和雲函式支持的語言是Node.js、Python、Go、Java和C#),您應該檢查程式碼範例以將結果上傳到儲存桶中。
與 Compute Engine 相比,使用 Cloud Functions 是一種更便宜的選擇,因為您只會在需要時使用這些資源。這裡唯一的缺點是您受到此服務支持的記憶體和 CPU的限制。
如果資源(記憶體中從 128MB 到 4096MB)不適合您要執行的過程,您也可以按照以下步驟操作:
- 使用您的案例所需的機器類型創建一個 Compute Engine 實例。放置一個腳本,所有過程都將完成。一旦創建並設置好一切,請停止它。
- 使用 GCS 事件觸發器(使用已提供的文件)創建一個雲函式,並且無論何時呼叫它,通過程式碼重新啟動您的 GCE。這可以通過Compute Engine 客戶端庫或API來完成(我可以想到使用您喜歡的語言的 HTTPS 請求)。
- 將所有資訊發送到您的 GCE 並讓機器工作(您可能需要添加一些程式碼以等待 Cloud Functions 中 GCE 的回答)。
- 結束後,將文件上傳到 Cloud Storage 並讓 Cloud Functions 知道一切都已完成。
- 收到此確認後,請告訴 Cloud Functions 再次停止您的 GCE。
請記住,Compute Engine 會按 VM 的執行時間向您收費,因此這種替代方案還可以以合理的價格為您提供所需資源的解決方案。
使用 Cloud Scheduler 調度 GCE也是一種選擇,但您並不真正知道何時使用 GCE,因此使用 Cloud Functions 將涉及更少的產品和更少的工作量。