從零到完整架設雲端服務網站的自學程式資源

如何更有效率的學習新事物,關鍵有兩個:第一,要找到最好的學習材料。第二,根據程度和學習進度依序使用這些學習材料。
評論
評論

本文作者 Vincent Li,很喜歡創業,踩過很多坑之後不斷吸收矽谷的創新產品、創業方法和行銷相關知識,因此期望透過部落格把所習得的技術知識和個人經驗分享出去。目前他的團隊提供服務的對象包括台灣的大型企業和政府機構,亦有在資策會數位教育研究所和工業局所屬單位授課,原文刊登於 NovaPoints,INSIDE 獲授權刊登。

我在 2017 年 1 月 6 日看到 Facebook 跳出一年前的貼文,這貼文是發佈用 Ruby on Rails 做出的易經創業卜卦網站(因只是練習作品故已關閉)。而在這卜卦網站發布後的一年,我和共同創辦人 Joanne(負責產品設計和規格制定)打造的譯者雲端服務網站 Termsoup.com 已經公布兩個個月了,這網站從訪談、功能規劃到陸續改版也花了五個月時間,目前已有數千人註冊,而且越來越多譯者已經完全從 Word 轉移到 Termsoup 工作了,因為在這裡可以節省 50% 以上的查詢詞彙和資料時間,飛快地完成翻譯文件,而不需要開啟 Word 和一堆瀏覽器頁面辛苦的查詢資料。

一年前貼文:

yi_jing_site

一年後的譯者雲端服務:

feature-explain

 

由於網路學習資源非常豐富,尤其是線上付費課程已經越來越流行(歐美國家更是如此),許多厲害的線上課程老師已獲得好幾萬名學生,且獲得極高分數評價,現在要學習新技術的門檻和時間已經比以前降低很多。

我自己之前在美國唸博士班最大的收穫,就是學到如何更有效率的學習新事物,關鍵有兩個:

第一,要找到最好的學習材料。

第二,根據程度和學習進度依序使用這些學習材料。

如果有極佳的老師提點,可以明顯加快學習速度,減少摸索時間。但如果沒有好老師就寧可自學,不要浪費任何時間在二流的學習教材和課程上。學到錯誤觀念或一知半解的觀念比沒學更糟,因為要花額外的力氣移除錯誤觀念並塞進正確觀念,等於要重整自己的腦袋。

我自己在建置 Termsoup 之前,主要會的是 HTML5、CSS3、非常簡單的 jQuery 和 javascript,以及部落格等級的 Ruby on Rails 技術。我花了約半年到一年時間陸續在線上學習 Ruby on Rails,也在 五倍紅寶石 上過幾次免費課和付費課(這裏也有每週定期聚會可以參加)。

我花在線上課程的時間不少,但自己做一個「認真的專案」才能極大化進步幅度,因為碰到問題會被強迫要去解決它、在網路上找答案,甚至有三次在 Codementor 上付費找厲害的工程師協助,節省我一堆找答案時間。在這種較為痛苦的過程才能真正提升等級。如果只是做一個練習作品,很容易碰到問題就繞過去用簡單的方式解決,進步會相當有限。

以下列出我的自學清單,而且是從基礎和進階的學習材料,希望可以幫助到想要學習建立網站卻不知從何開始的人。但這裡講的網站建立技術主要以 Ruby 材料為主,不包含像是 Python 或 PHP 等網站技術。大部份都是英文學習材料,但不用害怕英文閱讀和英文聽力,逐漸習慣就好,而且功力要提升,勢必要一直接觸英文內容。

從零開始:HTML5 & CSS3

要學習網站技術,就一定要先了解 HTML5 和 CSS3,嚴格來說 HTML 和 CSS 算是語法,而不是程式。學會這兩種語法,至少也能做出漂亮的自適應的靜態網頁(responsive webpage),嵌入一些簡單的第三方服務,就能自製 landing page。

  • Web design | Treehouse:Treehouse 是一個付費的學習程式的平台,是很適合初學者的地方,每個月$25 美金,可以下載課程影音供日後複習。Web design 的 track 包括 CSS、HTML 的課,還有 Adobe Photoshop 和 Illustrator 的基礎課程。
  • HTML & CSS | Codecademy:Codecademy 是國外知名免費學習程式的網站,主要以非常基礎的知識為主,也有線上練習機制,每講一段就會出一個練習題。雖然很基礎,有時候練習題不一定很好做,但不必覺得受挫,被練習題難倒是很正常的事情。出有難度的考題重點不是要考倒學生,而是強迫學生去思考背後的邏輯。
  • HTML/CSS | CodeSchool:Code School 也是付費學習程式平台,每個月 $29 美金,看可以下載課程影音供日後複習。Code School 有些課程難度偏進階,但 HTML/CSS 這門課還好,如果上述兩個還不夠,可以考慮這門課。

前端基礎:jQuery、Bootstrap 框架

在學會 HTML/CSS 後,可以開始了解簡單的 jQuery。jQuery 可以做出不錯的網頁動態效果,例如一個區塊或文字的淡出、淡入等,有一些適當的動態效果會讓網站的質感提升,強化使用者體驗,尤其使用者體驗在製作網站時是很核心的元素,是一定要掌握的技巧。jQuery 其實是 Javascript 的框架,但 Javascript 較難,可以先直接用 jQuery 操作。React.js 和 Vue.js 也是竄起相當快速的 Javascript 框架,但我自己還沒深入了解,而目前 jQuery 也仍是最多數人使用的框架,免費第三方資源也最豐富,所以我覺得仍是必學的前台技術。

Bootstrap 是相當好用的前台 HTML/CSS/jQuery 框架,由 Twitter 製作和分享。由於製作 responsive webpage 非常耗時,例如製作各種狀態和情境的表單(form)、按鈕等,使用 Bootstrap 可以快速做出這些元素而且介面優雅,要變更顏色等屬性也非常方便。另一個好用的框架是 Foundation,但我自己沒用過。

  • jQuery | Codecademy:在 Codecademy 可以學習基礎 jQuery,也可以了解到他的效果和威力。
  • Try jQuery | Code School:Code School 這門課可以了解初階 jQuery,但它的下一門課 jQuery:the Return Flight 可以先不要上,等先學了 Javascript 再上這門課。
  • Frontend Web Development | Treehouse:Treehouse 這門系列課程可以學到完整的前台網頁建置。這門課程系列也包括簡單的串接第三方資料,在這個階段學習起來也不會有太大障礙。
  • Learn Bootstrap Development By Building 10 Projects| Udemy:這是在知名學習平台 Udemy 上的課程,有了 jQuery 的基礎概念後,可以先在這裡學習 Bootstrap。我學了這門課之後,建立大部份前台網頁架構就很快了。提醒一下,要購買任何 Udemy 上的課程之前,都先 Google 課程名稱加 “coupon",因為有很多 coupon 可直接使用,找打折數最多的就對了,打折後一門課現在大約台幣三百元左右。
  • Projects In JavaScript & JQuery:這也是 Udemy 的課程,雖然名稱有 Javascript,但實際上仍以 jQuery 為主,其中的 Section 6 Ajax PHP Shoutbox 可以先跳過沒關係。

後端基礎:Ruby、Ruby on Rails

要學 Ruby on Rails,還是要先對 Ruby 有一定程度的了解,畢竟 Rails 是從 Ruby 延伸出來的框架,而且在寫 ROR 時也還是經常用到 Ruby 語法和功能。

Ruby

  • Ruby | Codecademy:在 Codecademy 可以先初步了解 Ruby 的功能和語法。
  • Try Ruby | Code School:Code School 上的這門 Ruby 基礎課是免費的。
  • Ruby | Treehouse:Treehouse 上的 Ruby 課程有完整的基礎知識和技巧,上面的習題大部份是選擇題,較為簡單,挫折感會較低。
  • Ruby Bits | Code School:這門 Code School 課程也很不錯。下一堂 Ruby Bits 2 可以接著上,但是難度會提升一些,若是覺得都不太懂,就留著以後對 Ruby 有更多了解後再看也可以。

Ruby on Rails

  • Rails Development | Treehouse:學 ROR 可以先從 Treehouse 這門課開始,裡面也會講到基礎的資料庫和版本控制(Git)觀念,非常不錯,但這裡講的 Rails 非常淺,是很好的起步但不夠。
  • Rails for Zombies Redux | Code School:這門課也是免費的,把 Rails 的觀念講得很清楚,尤其是把 ROR 的一些核心觀念用圖解說是很友善也易懂的方式。但內容會比較硬,有時需要來回看或是看其他材料再回來看才能吸收得好,這算是很重要的教材。
  • Rails for Zombies Redux 2 | Code School:從上一門課接下來上這門課,其實難度會有一點跳耀,所以若覺得很挫折是很正常的。但建議把它先啃完,以後做一些練習或看其他教材後,可再回頭參考。我自己的經驗是 ROR 需要一直來回練習和學習才能逐漸消化。
  • Ruby on Rails 實戰聖經 :這是由 ihower 撰寫的很豐富的 ROR 知識和技巧,但建議當作工具書查詢,如果當成教科書唸會很累。

資料庫基礎:

雖然要做 Ruby on Rails 網站,很多資料庫工作都可透過 ROR 的方法處理,而不需要自己撰寫資料庫語法,但是了解資料庫原理還是非常有幫助。而且未來開發較複雜的網站也很容易碰到自己撰寫一些 SQL 語法。在非關連資料庫(NoSQL)如 MongoDB 的部分我比較沒辦法提供學習素材,因為自己目前還沒有用到,但這是需要學習的部分,NoSQL 很強大也越來越受歡迎。

版本控制基礎:

版本控制(version control)雖然不是程式語言,但不論是個人或團隊撰寫程式,都是很重要的工具,可以避免版本混亂,或是當程式出錯可以回復到之前版本,降低各種開發時的不確定性。

前端進階:Javascript

後端進階:Ruby on Rails、AWS

  • Ruby on Rails Tutorial:這本由 Michael Hartl 寫的免費的線上電子書,是非常有名的 ROR 教材,現在最新版是講最新的 Rails 5。需要耐心一面看一面手動練習,看完且有做實際練習之後收穫會非常大,我會列為必要教材。
  • The Professional Ruby on Rails Developer:這是 Udemy 上的課程,包含完整的 ROR 網站程式撰寫和串接 AWS 雲端伺服器資源,裡面有些部分如 AWS 若還不了解,也都還可以依樣畫葫蘆,並有初步了解。這門課的好處是除了練習建置完整的 ROR 網站,也可以先學到如何部署程式到雲端伺服器 Heroku ,以及如何使用 Github 做版本控制和備份程式。
  • AWS Certified Solutions Architect – Associate 2017 | Udemy:這門課有完整的 AWS 服務教學,比較全面。但若需要深入使用個別服務,需另外 google 找資料。AWS 的官方文件很豐富,但有些處理方式也沒辦法寫得很完整。我很推薦使用 AWS 上的 Elastic Beanstalk,它非常方便的整合 S3 儲存、EC2 運算、RDS 資料庫等資源,部署程式也很容易。這服務可以降低非常多管理伺服器成本,對於不熟悉伺服器管理的工程師是非常棒的工具。但也因為這些方便性,使得一些管理彈性較低,因為 Amazon 擔心工程師有太大權限會搞亂系統重要設定。但我覺得初期都不用太擔心這個,重點是驗證產品和營收模式,日後有錢再找工程師升級、搬遷、優化都不是問題。
  • Rails 4:Zombie Outlaws | Code School:進階 Rails 技巧,較深入。
  • Surviving APIs with Rails | Code School:進階 Rails 技巧,主要以串接 API 的技巧為主。
  • Rails 4 Patterns | Code School:進階 Rails 技巧,較深入。

繼續升級

學完這些教學之後,要繼續升級寫出更強大的程式,我覺得有幾個重點:

親手製作專案

最重要的還是自己做專案才能進步,否則只是上課練習或甚至只有聽課,幫助極為有限。可以從簡單的開始做起,例如 to-do list、部落格,之後再自己想一些服務試著做做看,做出來會很有成就感。也有的 Ruby 學習網站就是讓學習者做出一些知名網站的功能,例如 AirnBnB、Twitter 這些,一方面學得快,二方面從練習成果也比較容易獲得信心。

Google

Google 技巧其實是很重要的部分。我曾碰到某些難題,知道非得找高手幫助不可,就在 Code Mentor 上找人協助,用遠端協作看到他們如何 google 問題找答案,而且能只看前面幾筆結果就能判斷答案是否在那,如果前幾筆沒有就轉換搜尋策略。從觀察高手 google 我才學到更多技巧。

Stackoverflow

Stackoverflow 也是非常重要的網站,這裡有很多工程師回答問題。其實大部份基礎問題幾乎都已經可以在這找到了,也可以張貼問題,但這網站是有等級制度的,也就是要多發問、點擊 upvote 到一定數量才能評論、回答問題,這也才能累積出有公信力和實力的答案。

善用第三方資源

現在外部資源非常豐富,就算是免費的幾乎都用不完了,包括 API、Ruby gem、Javascript library,不需要每個功能都自己重新寫,這樣開發速度才快。

AWS

AWS 的服務種類增加非常快,現在甚至有 AI 的平台,讓開發者不必自己開發 AI 程式就能分析數據或做出有機器學習能力的功能。所以多利用和熟悉 AWS 資源也非常有幫助。


開發者享受 CI/CD 價值!運用 Amazon EKS 整合 GitLab 創建自動化部署

企業如何在 Amazon EKS(Elastic Kubernetes Services)上使用 GitLab 創建自動化部署,減輕人力負擔,提升專案服務運作效率?
評論
評論

所謂現代化智慧 IT,所有工程師最希望的境界,莫過於只要輕鬆點幾下設定,系統就會自動跑起來,管理者再也不用隨時待命在機台旁邊,從此工作悠哉又快樂!儘管這樣情境還沒到來,但隨著敏捷式開發的流行,除了 DevOps 人員,有越來越多開發者將 CI/CD 概念融入到工作流程當中,例如從 build code、執行 unit test、到部署應用程式。

打造第一個在 AWS 上的應用程式

上述種種反覆步驟自動化執行,也就能提昇服務品質、主動通知開發人員以減輕人力負擔,讓專案服務能持續運作。

其中,GitLab 是執行 CI/CD 常用的工具之一,也是開發者使用程式碼儲存庫的地方。為了讓 GitLab Runner 在雲端快速實踐 CI/CD,《AWS 開發者系列》透過影片分享,如何在 Amazon EKS(Elastic Kubernetes Services)上使用 GitLab 創建自動化部署。

以下節錄工作坊影音內容,幫助開發者快速理解如何運用 Amazon EKS 的高可用性且安全的叢集,將修補、部署節點、更新等關鍵任務,全部做到自動化設定。同時影片也會示範 Amazon EKS 搭配 GitLab 如何展開自動部署,幫助工程團隊實踐 CI/CD 價值。

Amazon EKS 對容器管理輕鬆簡單、維運省時省力

容器化服務越來越興盛,當容器(Container)越來越多,在複雜的微服務(Microservice)系統環境之下,運維團隊的管理成本可能相對會增加不少,為了有效調度容器部署, 導入Kubernetes 無疑是近年企業熱門的話題之一。

建構 Kubernetes Cluster 流主要可區分兩大塊,一是安排容器調度的Control Plane、另一則是容器運行時需要用到的 Worker Node。

Control Plane 裡面涵蓋有儲存狀態的 ETCD、CoController manager 、Scheduler 的調度管理、甚至是操作時進行互動的 APIServer,若是自己創建 的 Kubernetes Cluster ,需要自己安裝這些元件,後續仍需要對 Control Plane 進行相關管理、維護、升級工作。為了減少上述 Components 的繁複維護,在透過 AWS EKS 代管的 Kubernete Control Plane 部可以獲得以下三大好處。

透過 AWS 增加雲端技能 在組織發揮影響力

Amazon EKS 一鍵式部署,展現三大優勢

第一,Amazon EKS代管的 Control Plane實踐了跨AZ的高可用部署,使用者不需要擔心單一節點故障的風險。

第二,Amazon EKS 支持至少四個 Kubernetes版本,持續跟進每季 CNCF 的發佈,同時 EKS 也完全符合上游 CNCF 規範。

第三,部署 Amazon EKS 之後,可直接使用 AWS 平台上現成的服務工具,在安全性管理、網路設定方面,可以做到無縫整合。

最後 AWS 台灣解決方案架構師也提到,若想在容器環境進行 CI/CD 及應用程式的管理,可以進一步透過 IaC 整合部署 Amazon EKS 叢集,透過使用 Console、把 EKS 變成 Cloudformation 的模板、使用 AWS 所開發出來的 eksctl.io、或指令是採用 AWS CDK 可以讓開發者用自身熟悉的語言,在 AWS 平台整合 CI/CD 工具進行維運及部署 EKS。

了解 Amazon EKS 整合 GitLab ,獲得三面向價值

對開發者而言,想把 Amazon EKS 整合到 CI/CD 工具之一的 GitLab 平台上,可以看到那些實際的優勢?

在 DevOps 開發者示範工作坊當中,GitLab 資深解決方案架構師指出,GitLab 使用到 Kubernetes 技術,主要有三種搭配方法,包含 GitLab Server、GitLab Runner、以及創建 Deployment Environment。

本次示範教學會主要聚焦在 GitLab Runner 如何採取 Auto-scaled 方式進行 Build、Test、Package Apps;以及在 Deployment Environment 運用 Kubernetes 技術,做到 Auto Deploy、Review App。

正因為 Amazon EKS 能夠在 DevOps 過程提供所需要的彈性計算資源,幫助開發者在 GitLab 平台上面獲得以下三個層次的優勢:

  • 在 GitLab 內建的部署工作流程當中,自動生成整套 CI/CD 最佳實踐腳本。
  • Review App 過程,從 Merge Request 中可直接訪問應用程式 /App 的 UI 介面,並且根據 Git branch 名稱、專案名稱,自動生成 Review App 的 URL,以及在 Merge 前的最後防線進行 Approval 檢查。
  • 加速 CI/CD 流水線,GitLab Runner 運行時候還可藉由 Amazon EKS Cluster 進行 Auto-scaled 的支援。

Amazon EKS 整合 GitLab ,需要兩大流程

影片最後,GitLab 資深解決方案架構師示範如何把 Amazon EKS 整合至 GitLab 執行 Auto Deploy,主要可分為兩大區塊流程,第一部分聚焦在 Amazon EKS cluster 的設置,第二部分則執行 Auto Deploy 設置。

第一塊可拆分為四個階段,首先教學怎麼創建 EC2 節點的 EKS cluster,第二階段示範把 EKS Cluster 連接到開發者的 GitLab Instance、Group 或 Project,下一步則使用 Cluster Management Project Template 創建一個 Cluster Management Project,以及最後一階段透過 Cluster Management Project 自帶的 Helm Chart,安裝在 Cluster 所需要的內建 App。

第二塊執行 Auto Deploy 設置,針對需要部署的 App 創建一個 GitLab Project,接著再把 gitlab-ci.yml 添加到 Project,並從 Web IDE 選擇及導入 Auto Deploy 的 CI 模版,讓 GitLab 自動生成最佳實踐的整套流水線。

幫助開發者更了解 Amazon EKS 整合 GitLab 的 QA 系列

Q:使用 Amazon EKS 之後,如何更有效率或優化資源去配置 Worker Node 的機器數量,以及如何有效空管開發維運的成本?

A:Kubernetes 除了本身有 HPA(Horizontal Pod Autoscaling)可根據使用程度自動調整資源流量,另外也能延伸使用 AWS Auto Scaling 方案,針對可擴展資源去設定自動擴展管理。另外在成本管控,雖然 Amazon EKS 會收取額外管理費用,但可透過 AWS 平台的 Calculato r計算每個 EKS 的價格,你會發現自動化部署及管理的費用,相對工程師人力的成本更加便宜。

Q:越來越多客戶考慮把現有 Application 變成容器部署,大多是爲了加快部署的效率,那麼變成容器模式之後,對 CI/CD 的工作流程有什麽影響嗎?

A:運用容器技術最直接的效果,可以讓應用程式的環境更一致化,例如 testing 環節、stage production,讓容器避開一些差異問題。至於 CD 部分要 delivery 一些 usage 不太一樣的時候,容器會幫忙做配置,所以 CI/CD 對容器的效益是相輔相成的。

Q: 客戶在開發流程漸漸會把 Infrastructure 變成代碼或文檔,是不是可以把程式碼跟現有的應用程式的 CI/CD 流水線整合在一起,達到一套完整的 CI/CD 部署流程?

A:觀察目前市場作法,主要分成兩個階段去做整體部署。如果規模比較小的團隊,會把 Infrastructure 代碼跟 App 代碼分開,在管理上會比較靈活;如果企業規模比較大,會有另外一個 Infrastructure 團隊來控制部署事情,這種情况之下,APP 的項目會生成一個 APP package,主要做到 delivery 這個階段爲止。而 Infrastructure 的項目會指定把需要版本的文檔,部署到他們的 Kubernetes Cluster。

填寫表單 找到適合的快速上雲服務與工具!