開始從 Heroku 移轉至 Code Engine
歡迎 Heroku 使用者使用 IBM Cloud® Code Engine。
Code Engine 是一個完全受管理的無伺服器平台,用於執行容器化工作負載。Code Engine 甚至會從原始碼為您建置容器映像檔。 Code Engine體驗的設計可讓您專注於編寫程式碼,而不是託管程式碼所需的基礎架構。
Code Engine 是在下列關鍵目標的情況下設計的。
- 聚焦於您的程式碼。Code Engine 提供簡化的開發人員體驗。 不需要瞭解或管理基礎架構。
- 支援現代執行時期性質,例如自動調整、閒置時調整為零,以及與受管理服務和安全無縫整合。
- 支援所有雲端原生型應用程式,不論它們是 12 因子應用程式、事件驅動功能或執行至完成批次工作。 如果可以併櫃,則 Code Engine 可以執行它。
- 僅為您實際使用的資源付費。
如果你來自希羅庫的背景,很多這些特徵聽起來都很熟悉。 不過,Code Engine 也包含一些新功能,可讓您超越 Heroku 所提供的功能,包括可調整為零且不產生任何費用的應用程式。 此外,Code Engine 還需要包含 免費層級的「隨收隨付制」帳戶。 因此,在您通過使用者體驗的語法差異之後,您和您的應用程式將會感覺就在 Code Engine中。
目標
- 瞭解 Code Engine 與 Heroku 之間的相似性。
- 瞭解在 Code Engine中部署應用程式的一般程序。
- 使用 Code Engine,從本端系統上的程式碼部署應用程式。
必要條件
您需要先設定帳戶並安裝 CLI,才能開始使用 Code Engine。
-
所有 Code Engine 使用者都必須具有「隨收隨付制」帳戶。
-
雖然您可以透過主控台使用 Code Engine,但本文件中的範例著重於指令行。 因此,您必須安裝 Code Engine CLI。
ibmcloud plugin install code-engine
如需相關資訊,請參閱設定 Code Engine CLI。 如需 CLI 的相關資訊,請參閱 Code Engine CLI 參考資料。
比較 Heroku 與 Code Engine 術語
開始在 Code Engine中部署應用程式之前,請先瞭解 Code Engine的基本觀念。 下表說明 Cloud Foundry 與 Code Engine之間的一些高階術語差異。
Heroku | Code Engine | 說明 |
---|---|---|
不適用 | 資源群組和專案 | 工作量分組。 每一個分組的特定工作量選項由使用者定義。 「資源群組」是 IBM Cloud 概念,而 "projects" 是 Code Engine 特定。 專案提供工作量之間的隔離層次。 請參閱 管理專案。 |
迪諾斯 | 容器 | Dyno 是一個輕量型容器,可執行您的 Heroku 程式碼並為您管理。 在 Code Engine中,基礎儲存器基於 Kubernetes 並自動為您管理。 |
應用程式 | 應用程式 (APP) | 回應來自 REST API、網頁要求或事件 (例如,事件) 的 HTTP 要求的工作量。Code Engine 要求應用程式包含 HTTP 伺服器作為程式碼的一部分。Code Engine 應用程式會根據送入的負載自動擴增及縮減。 必要的話,您可以配置最小及最大比例。 依預設,應用程式會在埠 8080 上接聽。 您可以使用主控台或 CLI --port 旗標來置換此行為。 請參閱 在 Code Engine中使用應用程式。 |
不適用 | 工作或批次工作 | 工作會平行執行一個以上執行碼實例。 與處理 HTTP 要求的應用程式不同,工作設計為執行一次並結束。 建立工作時,您可以指定每次執行工作時使用的工作量配置資訊。 請參閱 使用工作及工作執行。 |
heroku create 及 git push heroku main 或 heroku container:push web |
app create |
建立應用程式的程序。 使用 Heroku,您可以建立應用程式,然後將程式碼推送至其中。 您的程式碼是建置並部署在該單一步驟中。 使用Code Engine,您可以從映像儲存庫中提取容器映像,從GitHub,或從系統上的本機檔案中提取程式碼,所有這些都來自單一命令。 您可以根據 Dockerfile 或使用 Paketo 建置套件來建置程式碼。 您可以從 CLI 中的單一步驟,以及從 Code Engine 主控台進行建置。 請參閱 規劃建置。 |
自訂網域 | 自訂網域對映 | 這兩個服務都可讓您定義及管理工作量的外部 URL。Code Engine 從主控台提供 自訂網域對映 支援。 您也可以透過 IBM Cloud Internet Services 或您選擇的任何其他網域提供者來新增 自訂網域。 |
如需 Code Engine的其他術語和功能,請參閱 瞭解 Code Engine。
登入 IBM Cloud。
請遵循下列步驟來登入 IBM Cloud 帳戶並以資源群組為目標。
-
登入 IBM Cloud CLI。
ibmcloud login
-
執行下列指令將資源群組設為目標。 若要取得資源組的列表,請執行
ibmcloud resource groups
。ibmcloud target -g <resource_group>
輸出範例
Targeted resource group default
建立專案
Code Engine "project" 會將相關工作量分組到邏輯集合中。 您可以根據對您有意義的任何準則 (例如,公司組織結構、工作量之間的相依關係,或開發與測試與正式作業環境),將工作量分組到不同的專案。 然後,您可以 配置這些專案的存取權。 請記住,單一專案內的工作量會共用專用網路,並在專案的安全界限內隔離。 專案內的所有工作負載可以彼此自由交談,而不必擔心叢集外的工作負載會看到。 如果不同專案中的工作量想要彼此通訊,則通訊必須使用網際網路或內部 IBM 專用網路。 如需相關資訊,請參閱 Code Engine 應用程式的可見性選項。
在稱為 sample-proj
的 Code Engine 中建立專案。
ibmcloud ce project create --name sample-proj
輸出範例
Creating project 'sample-proj'...
ID for project 'sample-proj' is 'abcdabcd-abcd-abcd-abcd-abcd12e3456f7'.
Waiting for project 'sample-proj' to be active...
Now selecting project 'sample-proj'.
OK
請注意,也會針對環境定義選取您的專案,因此所有後續的應用程式相關指令都在這個新的 sample-proj
專案範圍內。
部署應用程式
此範例應用程式會從 範例 GitHub 儲存庫取回程式碼。 此程式碼是簡單的使用 application create
指令將程式碼推送至 Code Engine。 您必須提供應用程式的名稱及原始碼的位置。 下列範例會建立一個稱為 myapp
的應用程式,它使用 buildpack
策略並提供原始碼在現行目錄 (.
) 中的位置。
ibmcloud ce app create --name myapp --build-source https://github.com/IBM/heroku-to-code-engine
輸出範例
Creating application 'myapp'...
Packaging files to upload from source path '.'...
Submitting build run 'myapp-run-220999-210706331'...
Creating image 'private.us.icr.io/ce--6ef04-khxrbwa0lci/app-myapp:220418-0207-askql'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myapp-run-220000-210706331' to check the build run status.
Waiting for application 'myapp' to become ready.
Configuration 'myapp' is waiting for a Revision to become ready.
Ingress has not yet been reconciled.
Waiting for load balancer to be ready.
Run 'ibmcloud ce application get -n myapp' to check the application status.
OK
https://myapp.abcdbwa0lci.us-south.codeengine.appdomain.cloud
就這樣 您現在有一個面向網際網路的應用程式。 應用程式本身的程式碼與 Heroku 應用程式所用的程式碼相同,只是 Code Engine 指令略有不同。
讓我們更深入瞭解前一個 app create
指令。 請注意,app create
指令的輸出提供在建立及部署應用程式之前建置執行進度的相關資訊。
- Code Engine 會收到從原始碼建立應用程式的要求 (而不是直接從映像檔取回)。
- Code Engine 會檢查與所選取專案相關聯的 IAM 服務 ID 及 API 金鑰。 必須授權此服務 ID 讀取及寫入 IBM Cloud Container Registry。 如果沒有服務 ID,Code Engine 會為您建立一個服務 ID。 請注意,此服務 ID 用於從相同專案執行的後續 Code Engine 建置要求。
- 此範例會從公用 GitHub 儲存庫 (
--build-source https://github.com/IBM/heroku-to-code-engine
) 建置程式碼。原始碼會壓縮成保存檔,並上傳至帳戶中 IBM Cloud Container Registry 實例內的受管理名稱空間。 請注意,您只能將 IBM Cloud Container Registry 作為本端建置的目標。 有關IBM Container Registry的更多信息,包括有關配額限制和訪問的信息,請 參閱IBM Cloud Container Registry入門。 - Code Engine 會將原始碼建置成映像檔。 來源映像檔會建立在與來源保存檔相同的名稱空間中。
- 建置完成之後,即會部署您的應用程式。 您可以從提供的 URL 存取應用程式。
使用 Code Engine,您會自動取得許多與 Heroku 相同的特性 (例如自動調整及藍綠推出更新項目),但您也會享有較新特性 (例如縮減至零) 的好處,確保在應用程式非作用中不會向您收費。
想要進一步瞭解您建置原始碼的選項嗎? 請參閱 application create
及 job create
指令。
想要進一步瞭解應用程式和工作? 請參閱 Working with apps in Code Engine and Working with jobs and jobruns。
清除
完成本指導教學之後,您可以清除使用下列指令所建立的資源。
刪除您的應用程式
ibmcloud ce app delete --name myapp
當您刪除應用程式時,也會刪除相關聯的建置檔。
最後,刪除建置從 IBM Cloud Container Registry建立的映像檔。
- 導覽至 IBM Cloud 主控台中的 登錄。
- 透過搜尋應用程式名稱,尋找與應用程式相關聯的保存檔及映像檔。
- 選取保存檔和映像檔,然後刪除。
視訊記錄
嗨,我是 JJ Asghar,我是 IBM Cloud的開發人員擁護者。 最近你可能聽說了希羅庫改變他們的免費政策-免費層級。 這對許多開發人員造成挑戰,因此我想在這裡花一些時間向您展示如何從 Heroku 移轉至 IBM Cloud 中的 Code Engine,只需幾個步驟即可。 所以讓我們繼續玩,看看你能多快讓你的系統運作起來。
首先,如果你還沒看到的話,這是 Heroku 的官方部落格中的實際內容,從 2022 年 11 月 28 日開始,我們計劃停止免費提供免費產品計劃,並計劃關閉免費的 dynos 和資料服務。 我們將向受影響的使用者傳送一系列電子郵件通訊。 對於許多初學者 Web 應用程式來說,這很有挑戰性。 我知道,事實上我在當天剛開始使用 Heroku 時,我個人曾使用過 Heroku,因此這對許多人來說是相當大的熱門,我想向您展示從 Heroku 轉換為 Code Engine有多容易。
首先,讓我們先看看我建立了一個很棒的應用程式。 如果我繼續在這裡提出我的應用程式,我們會有一個很棒的小型燒瓶應用程式。 如果您不知道 Python 是什麼或 flask,它是 Python 能夠在標準埠上執行應用程式的格式。 假設我們有這個應用程式,它會說 "Hello World!"。 我已部署它,我們可以在這裡查看我們的驚人正式作業應用程式,網址為 heroku.com。 上面寫著「你好世界」我們要去改變它 我們想要更新它,因此我將繼續並快速將它更新為 "Hello Moving from Heroku to Code Engine"。
讓我們繼續走出去吧 git add .
git commit -m “update hello line”
。 然後我就會繼續按下去就像你平常一樣把程式碼推送給希羅庫 我要向您顯示,這是 Code Engine內的完全相同處理程序。 我們要做的是,我們將建立新的 ... 我們將先登入 IBM Cloud,然後從那裡建立新的專案,然後繼續進行並部署它,以查看它是否運作。
在這裡,我們先部署到 Heroku,以確保我們都有自己的工作程式碼,我先重新載入這個程式碼,然後從 Heroku 移至 Code Engine,讓我們知道我們的程式碼可以運作。 太棒了
因此,現在實際上讓我們取得 Code Engine 作為其中一部分,因此首先,我們需要 IBM Cloud 登入。 因此,我將繼續登入 IBM Cloud。 如果您尚未設定 IBM Cloud 視訊,或者如果您尚未設定 IBM Cloud 帳戶,如果您查看上方,則應該會看到它的鏈結,我將會將它放入視訊中。
我先在這裡抄我的名字,然後我就拿我的密碼,好好登入,這是很棒的看到,完美的。 現在我要做的是 ibmcloud ce project create —name amazing product production app
。 所以這創造了我們的美好小 ... 先鎖定目標 我將取得預設資源群組,然後繼續建立專案。 好了 應該只需要片刻-完美。 現在,您可以將您的名稱變更為您喜歡的任何名稱。 這只是對您的專案的包羅永珍,非常有用。 然後我將採用下一個指令,即
ibmcloud ce app create —name pythonbackend — build-source . —strategy build packs
現在因為我已有 requirements.txt,這將是,此應用程式足夠聰明,可以瞭解:「嘿,它是 Python 應用程式! 所以讓我們繼續建造它吧! " 這很好。 正如你所看到的,它正在邁出第一步。 它正在執行建置,這很好。 它也為我們創造了一個美好的私人形象,這很有用。 這需要一些時間。 好了,現在我們看到如果我們想要在不等待的情況下執行此動作 (即 -nw
),我們可以實際將此放置在背景中等待它出現,然後透過此 build run get
實際名稱來檢查它。 因為我們將在現場看到這個,我們將繼續在這裡做這個。
太好了! 所以現在我先開啟這裡的這個 URL 然後它來到這裡,如你所見
「hello 從 Heroku 移至 Code Engine」
就這樣 我從 Heroku 那裡拿到了跟我一樣的密碼 我建立了一個新專案,然後我建立了一個應用程式,我剛剛推動了它,它就成功了,想象一下你可以為自己做些什麼。 這會顯示 Code Engine 的功能,而且在免費層級上,它真正是免費的-就像 Heroku 曾經或將會或將來不會一樣。 Code Engine 永遠免費,這是很棒的,而且希望它會讓您的生活更輕鬆。
非常感謝您的觀看,如果您有任何問題,我的 Twitter 帳號是 @jjasghar 或您非常歡迎透過 awesome@ibm.com. 我的工作是成為一個有個性的書呆子所以毫不猶豫地伸出了手
非常感謝
再見