AWS Cloud and DevOps with the intention to bring more enterprise on to the cloud and practicing

(只提供繁体中文版本)

DevOps – Blog by John Chang

AWS Cloud and DevOps with the intention to bring more enterprise on to the cloud and practicing

DevOps是一種橫跨多種任務的工作流程,並沒有存在一個單一的”DevOps 工具”。它通常包含了幾個流程:Code, Build, Test, Package, Release, Configure, Monitor。因此一個DevOps團隊的成員通常都具備了多種技能,從程式碼的撰寫到工具的設定,互相配合達到完整的開發。

我們計畫在客戶的專案上逐漸導入自動化的過程,希望能達到全自動化的願景。以其中一個客戶為範例,目前的專案總共有四個環境,分別為UAT, DEV, PrePRD以及PRD。以前的作法是將打包好的原始碼上傳到S3 bucket,接著在本機端下指令,從S3 bucket抓取需要的檔案及版本,再放到server instance上,instance根據不同的模組及功能區分,因此數量不少。這樣的做法有幾個缺點,S3 bucket 其實只是一個物件的儲存庫,並不適合用來存放原始碼,而且也沒有分支及版本控制的功能,必須依賴操作者的判斷。再者,當server instance逐漸增加時,維護及部署的困難複雜度也大為增加,操作者必須清楚哪些機器已經部署過,同時也需要下很多次指令才能完成一次完整的部署,人為失誤的可能性也非常高。

我們首先將原始碼轉移到AWS CodeCommit,它是一個完整個資料儲存庫,可以設定Branch以及Tag,可以做完整的版本控制,push以及clone需要透過credential key才能進行,有安全性的保證。CodeCommit的程式會接著進入CodeBuild/Jenkins進行建構,在之前的環境並沒有這個過程,所有的改動都必須到UAT環境才能測試,這樣的效率其實不是非常好,透過自動編譯建構的工具,可以在部署之前就知道程式碼有無錯誤。最後使用CloudFormation更新環境,因此即使instance數量增加,我們只需要維護stack template即可,大幅降低錯誤的機率。

這些自動化的過程通常不是一次就能成功的,在每個轉移的過程必然發生許多不可預期的問題,這就是軟體開發常見的情況。而團隊的成員在解決這些問題的過程中也能學習到不同的經驗,互相合作讓開發的過程更有效率,這就是DevOps的精神。

Posted in ICG日志.