假設你已經用Google Cloud Functions部署了你的程式,但現在你想將這些程式轉成以容器的形式運行在Google的Cloud Run上的話該怎麼做呢?
一般來說程式開法者將程式主體開發好後,如果要打包成容器的話,最簡單的方式就是在本機寫好dockerfile,用相關docker指令在本機將程式封裝打包起來成為一個image,然後再推送到某個容器鏡像空間上,未來要部署的話,就下一些額外的docker指令將服務端口發佈出去,這樣使用者就可以透過http去使用這個服務。
Google Cloud Run提供無伺服器服務,允許使用者執行無狀態HTTP工作負載,Google系統負責所有基礎設施的管理、配置和擴展,使用者可以花更多時間撰寫程式碼開發功能上,它可以在數秒內,根據使用者負載自動向上擴展或是向下縮減規模,(甚至將資源縮到零)像其他按需付費的服務一樣,用多少付多少。
現在我們來看看如何將既有的Cloud Functions轉成為Cloud Run的形式運行:
整個過程非常簡單,也不用修改既有程式內容,主要步驟如下:
- 複製Cloud Functions程式碼內容到Google Cloud Shell的目錄下
- 執行gcloud指令,把程式自動轉為容器,並自動上傳到Google Artifact Registry構建註冊表空間
- 在Google Cloud Console中,將打包好的鏡像,發佈到Cloud Run的服務中
詳細步驟:
1. 複製Cloud Functions程式碼內容
登入shell.cloud.google.com,將存在於Cloud Functions中的相關程式主要檔案,如此例中的Python的main.py和requirements.txt兩個檔案的內容複製到shell中的目錄下:
2. 執行gcloud指令,把程式自動轉為容器,並自動上傳到Google Artifact Registry
在Command line執行以下指令:
$ gcloud builds submit –pack image=asia-east1-docker.pkg.dev/gcp-asus-storage/cftest/cloudrun1,env=GOOGLE_FUNCTION_TARGET=hello_world
以上指令以Cloud Build結合Google Cloud Buildpacks自動偵測當前目錄中的Cloud Functions程式類別,並將之容器化到Artifact Registry空間,指令結構為:
# gcloud builds submit –pack image=gcr.io/[project-id]/my-app,env=GOOGLE_FUNCTION_TARGET=xxxx
GOOGLE_FUNCTION_TARGET環境變數為buildpacks的指示,說明執行程式的進入點,詳細可參閱這裡.
3. 將打包好的鏡像,發佈到Cloud Run的服務中
從Google Cloud Console裡至上述步驟所生成的鏡像,點選”部署至Cloud Run”.
指定相關設定然後點選”建立”按鍵
在Cloud Run部署完成後,我們就可以直接查看Cloud Run自動發佈出來的服務網址,用這個網址可以和其他的Google Cloud服務整合,例如Cloud Scheduler或Cloud Functions,我們就可定期執行基於HTTP REST呼叫的程式了.
最後可以點選Cloud Run發佈的endpoint查看一下服務是否被正常部署!
大家看完了以上這些步驟是否覺得Cloud Functions轉成Cloud Run非常簡單?透過Cloud Build和Cloud Run可以為IT人員簡化很多基礎設施的準備工作,未來也可整合Cloud Run的”持續透過原始碼存放區部署新的修訂版本”的功能,達到自動化部署容器服務的目標。 希望這篇文章對大家有一點幫助,謝謝!