目錄

Heroku 是什麼?與 AWS 的差異在哪?

在本地端把應用程式寫完之後,下一步通常是讓其他人也能用到你做出來的服務,而這代表你得把它部署到伺服器上。麻煩也是從這裡開始的:伺服器硬體要自己維護嗎?網路安全怎麼顧?使用者的資料又要怎麼保護?

Google 這些問題的過程中,你多半會撞見 Heroku。它看起來能讓你很快地把應用程式丟上線,同時省掉上面那一整串維護的雜事。這篇文章會用比較白話的角度說明三件事:Heroku 是什麼、Dyno 是什麼,以及既然應用程式最後還是跑在 AWS 上,為什麼不乾脆直接用 AWS 就好。

Heroku 是一個能讓你快速部署應用程式的平台。說到「平台」你一定不陌生:Medium 是文章平台,你把自己寫的文章發布上去,其他人就能讀到;Shopee 是購物平台,你把商品上架,其他人就能買。

Heroku 的角色也一樣。當你辛辛苦苦開發出一個軟體,希望大家都能用到,你可以把它放到 Heroku 上。之後別人就像瀏覽一般網站那樣,在瀏覽器輸入 URL,就能存取到你提供的服務。

在你自己的電腦上,滑鼠移到應用程式圖示點兩下,程式就開起來了。開啟速度、執行效率、用起來順不順,很大一部分取決於電腦效能。如果你的機器是台老古董,用起來一定不快樂。

同樣的道理,為了讓你的應用程式在雲端上正常運作,Heroku 也必須準備一台「電腦」,只是那是虛擬的,Heroku 稱之為 Dyno。你可以把 Dyno 想成一台虛擬機器,它負責提供運算資源,讓你的應用程式跑得起來。

當使用者變多、應用程式開始卡頓,你有兩個方向可以調整:把每一個 Dyno 的規格拉高,或是開更多 Dyno 一起服務。而 Heroku 的計費方式,正是看你用了多少 Dyno、用了多久。(2022 年當時 Heroku 還有免費的 Dyno 方案,這個免費層在同年底已經取消,現在跑任何應用程式都需要付費方案。)

這裡有個很多人不知道的事實:我們以為自己是把應用程式部署在 Heroku 上,但實際上,程式最後是跑在 AWS (Amazon Web Services) 的機器上。

既然應用程式最後還是跑在 AWS 上,那何不一開始就直接用 AWS,何必多繞 Heroku 這一層?

要回答這個問題,得先知道 AWS 是什麼。AWS 是一家「基礎設施即服務」(Infrastructure as a Service, IaaS) 的供應商。這類供應商會在世界各地買下大片土地、蓋起「資料中心」(Data Center),而資料中心就是我們口中的「雲端」(Cloud)。當你把檔案上傳到 Google 雲端硬碟,實際上就是把資料存進 Google 的資料中心裡。

有了這些 IaaS 供應商,我們要存檔案時就不必自己買硬碟、自己顧機房,「上傳到雲端」就解決了。

但問題在於,AWS、Google Cloud、Azure 這些供應商的業務重點,是把底層硬體資源管好、供應穩定,而不是讓開發者用得舒服。結果就是,開發者想「親自」使用這些 IaaS,往往得先補齊一堆先備知識:VPC 怎麼切、IAM 權限怎麼設、EC2 該選哪個機型,光是把一個服務安全地開起來就是一門功課。

AWS 官方認證體系的總覽圖,列出各個層級與領域的證照名稱
AWS 的相關證照 [source: AWS]

從上圖就看得出來,AWS 光是為自家服務就開了多項證照與課程。可想而知,要把這些服務用得好,得花上不少時間學習。

Heroku 扮演的正是開發者與 IaaS 之間的橋樑。當我們把應用程式部署到 Heroku 上(你現在知道實際上是部署到 AWS 了),可以透過相對簡單的 CLI 指令與一個做得很清楚的 Dashboard 來管理它,而不用直接面對底層那一整套基礎建設的設定。

Heroku 網頁版管理介面的畫面,顯示應用程式的管理選項
Heroku Dashboard [source: Heroku]

換句話說,Heroku 是一群精通 AWS 的軟體工程師,打造給軟體工程師用的平台。因為它是架在 AWS (IaaS) 之上的一層平台,我們把 Heroku 稱為「平台即服務」(Platform as a Service, PaaS) 的供應商。

Heroku (PaaS) 的價值,在於幫我們擋掉直接操作 AWS (IaaS) 的複雜度,讓部署應用程式這件事變得更簡單、更快。代價則是彈性與價格:底層規格能調的幅度有限,成本也比自己開 EC2 高一些。對還在驗證想法、不想被基礎建設拖住的專案來說,這筆交易通常是划算的。

了解 Heroku 之後,接下來可以看同系列的另一篇文章在 M1 Mac 上將 Django 部署到 Heroku,實際把一個 Django 專案部署上去。