(Photo by Sincerely Media on Unsplash)
iT邦幫忙鐵人賽系列書之一,Clarence 的新書【AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC】上架了,很高興有機會為這華文第一本 AWS CDK 主題書撰寫推薦序,在這裡紀錄一下序文。
內容大綱
推薦序
2019 年甫剛正式釋出 (general availability) 的 AWS CDK (AWS Cloud Development Kit),2020 年 Clarence 就非常熱情且勇敢地,以連續三十天鐵人賽挑戰這個每天都在飛速進步的雲端瑞士刀,並且榮獲「第 12 屆 iT 邦幫忙鐵人賽」DevOps 主題 – 冠軍,如此可見 AWS CDK 這把雲端瑞士刀在 DevOps 領域所受到的重視,佐以 Clarence 精心的內容規劃、非常白話易懂的編排撰寫,深得讀者與評審們的青睞,實至名歸。
為了讓大家體驗 Clarence 白話易懂的編排撰寫風格,這篇推薦序將特別以沒那麼白話搭配沒那麼易懂的風格來撰寫,相信這樣可以讓各位同時感受到 Clarence 與推薦序的兩種用心(大誤 XDD
自從 2006 年 AWS 發布 Amazon S3 (簡單生活節?! 喔不,是簡單雲端儲存) 和 Amazon EC2 (簡單運算?! 喔不,是彈性雲端運算 (嗯嗯所以彈性但不簡單?!)) 以來,時至今日 (2021) AWS 已經陸續發布超過 200 個產品與服務 [1]。以往在大型組織或特定產業才能接觸到的複雜技術架構,也陸續經由經驗的累積、社群的分享,逐步地將這些複雜的技術架構與昂貴的網通設備,拆解成各種雲服務,這些分散式系統的知識、大型系統維運的建構經驗也紛紛往各行各業、甚至中小企業、新創團隊擴散。中小型團隊成員要處理如此龐大的訊息量,加上拆解多元、每年會自己長出來的各種雲服務,以致約莫 2014 年時,開始了 DevOps 這個結合 開發 (Development) 和 營運 (Operation) 的文化與運動。
整個 DevOps 的討論中,「溝通」是大家經常談論到的一項重要環節,溝通的內容多半牽涉到「流程」、「架構」或稱「軟體」,而溝通目的是期望能使建構、測試、發布產品的過程能夠既有效率、又很可靠,這當中會隨著組織與社群的發展與經驗累積,最後藉由各種各樣的自動化工具來輔助 DevOps 達成這樣的目的與期望。
若我們先將文化這個比較廣泛的層面放旁邊,來看動手實作持續整合、持續交付的過程中,穿插出現軟體交付的四大支柱 [2]:產出物 (Artifacts)、設定 (Configurations)、環境 (Environments)、管線 (Pipelines),這四者之間若能透過合適的作業流程與工具的輔助,使之能相互整合,那將會是相當美妙的一趟旅程。
本書的主角 - AWS CDK - 就是串起這趟美妙旅程的靈魂工具。
想當年 (2008) 剛接觸 AWS 的時候,跟大家初接觸開始學習 AWS 的時候相似,先從 AWS 管理主控台 (Management Console) 開始摸索,搭配官方文件一頁一頁閱讀、一步一步操作(曾與一群朋友自組讀書會時,EC2 使用手冊才七百多頁,現在已經增長兩倍有餘來到了一千六百頁),一來視覺化的介面有助於剛開始學習雲端架構的我們能夠加速理解,眼睛看到一個一個拆解、定義乾淨的服務與元件,透過滑鼠與鍵盤的敲擊而逐一建立起來;二來省卻了較為複雜繁瑣的指令列工具 (AWS CLI) 權限設定。
這在學習期間中,沒什麼大問題。但到了真槍實彈(真金白銀)要部署各種開發環境、測試環境、量產環境提供給同事、廠商、客戶時,我們常聽到,有一就有二、有二就有三,正所謂接二連三,連三拉三,喂,扯遠了回來。當我們面對需要重複部署多個環境,且每個環境中的特定環境參數會因環境不同而不同(例如機器大小不同、部署的地理位置不同),若使用 AWS 管理主控台來進行如此接二連三的部署,先是「可靠度」讓人存疑,接著是「可維護度/效率」也是備受挑戰,似乎如此「純手工打造」較難達成剛才聊到的「既有效率、又很可靠」如此目的性。
AWS CDK 問世之前,若要將「純手工打造 雲基礎設施」自動化,常見的兩個途徑是透過 AWS CloudFormation 這個服務、或是更深層地自己組合 AWS API/CLI 指令成為腳本 (script)。這當中遭遇幾項困難,其一 AWS 各項服務都有著豐富且彈性的屬性供我們自由設定,需藉由詳讀文件、實測或討論來決定該選擇何種設定值比較適合這次的軟體部署場景;其二 不直覺、不易閱讀,AWS CloudFormation 搭配的是適合電腦解析(但不那麼適合人腦解析)的 YAML 或 JSON 語法來做描述,告訴 AWS 我們想要打造的雲基礎設施長什麼樣子;其三 測試、檢驗不易。
這對於開發出身的同事來說,打造雲基礎設施的門檻變得相當高。
而對於營運出身的同事來說,維護雲基礎設施的不直覺也易失誤。
這時候 AWS CDK 出來解救大家了,AWS CDK 讓大家使用自己常用的程式語言 (TypeScript, JavaScript, Python, Java, C#, Go) 來打造(而不只是描述)自己的雲基礎設施。對應方才的三「其」,其一 該讀的文件還是要讀,但是可以透過整合編輯器 (e.g. Visual Studio Code) 的套件,直覺瀏覽這個雲服務或元件有哪些參數、哪些選項可供設定、有哪些方法可以做動作,與平常撰寫物建程式相仿;其二 直覺、想紀錄想法就加註解、想使用外部環境變數或引入設定值都很有彈性;其三 可供測試,而且使用大家自己熟悉常用的程式語言來撰寫測試。
雖說「解救大家」,但是 AWS CloudFormation 的各種限制條件,仍是存在基於其上的 AWS CDK,例如不支援部分細節參數、往年 AWS 新服務發布 GA 上線時還未支援 AWS CloudFormation,但已經陸續看到 AWS CDK 的力量正在使得各種改變陸續發生,例如可預期接下來 AWS 新服務發布 GA 時很有可能同時公告支援 API、管理主控台、CLI、以及 AWS CloudFormation,意味著新服務發布時,我們就可以拿 AWS CDK 開始動手把玩,並透過整合編輯器 (e.g. Visual Studio Code) 的套件,快速瀏覽新服務有哪些參數可供設定,這代表著更有效率的學習與上手過程。
這對於開發出身的同事來說,打造雲基礎設施的門檻變得相當低。
而對於營運出身的同事來說,維護雲基礎設施可上測試可防可控。
同時 AWS CDK 也帶來了更多彈性與想像空間,例如 AWS CDK 帶來了 constructs 概念,可以將 constructs 想像成積木,這個積木有各種顏色的最小單元(一塊積木),也有由前人先組合好的範例積木組(現成模組稍加組合一下就可以拿來玩),或是由前人組合好的超完整實例積木組(馬上可以拿來玩的超級懶人包)。
參加 CDK 社群活動時也聽到前端開發者分享說他們超愛 AWS CDK,極低門檻即可上手,將自己的前端作品部署到 AWS 環境中進行測試,加速整個產品開發過程,也提升工作效率,最後完成一定進度後,還可以與後端團隊或基礎設施團隊分享 CDK 程式碼,加速經驗分享。
在 AWS CDK 的世界,所有東西都是 Construct。
類似 Flutter 的世界,所有東西都是 Widget。
Clarence 在本書中由簡入深、逐一搭配一個個的場景案例,且細心繪製情境架構圖、配合著場景案例整理範例程式碼,帶大家一步一步上手 AWS CDK。不論您是 AWS 新手或是老手,都能享受這本書從 CDK 簡介、第一個 CDK 範例程式、進而一個個挑戰使用 CDK 實作 Serverless、靜態網站、可自動擴展的伺服器叢集、然後往容器服務 (Amazon ECS, Amazon EKS) 前進,最後加碼教你如何打造自己的積木火力展示館,喔我是說,CDK Construct Library,配合團隊或組織的技術管理架構,除了有效地重複使用已驗證過的經驗與知識,並且可與其他部門、其他公司、甚至以開放 CDK 原始碼的形式與全世界分享你創造的大大小小各種積木 (Constructs)。
推薦新手朋友們,可以先閱讀本書第 1,2 章,並馬上開電腦動手玩看看(可搭配參考附錄設定開發環境),接著第 3,4,5 章時間夠的話就逐一實作、累積手感,或挑選自己有興趣的主題閱讀,第 6,7 章可選擇自己或團隊所使用的容器環境來做閱讀,然後將自己手邊的專案嘗試以 AWS CDK app 的方式實作看看,這個階段可能會遇到一些卡關,可以回頭看看書中提到的範例複習,或是到 CDK 社群 Telegram 頻道 [3] 發問、或找人討論。稍微上手後,回頭檢視第 8,9 章,創造自己的 CDK constructs 增進效率。
若您已是 AWS 豐富經驗老手,已對各種常見 AWS 產品及其元件不陌生,可以像我收到這本書一樣,花個一、兩個小時快速翻閱第 1~7 章,結合您自身的知識與經驗,取其 CDK, IaC 之精要,然後動手將手邊的 AWS CloudFormation 改寫看看,相信立刻會感受到 AWS CDK 所帶來的美妙,而與我們一起踏上這趟 CDK 之旅。接著動手玩玩第 8,9 章,將自己累積的知識與經驗,整理成 CDK construct,發布到 Construct Hub [4],讓全世界的社群都感受到台灣社群滿滿的技術能量。
也歡迎各位 AWS 同好們、愛好者們,加入 AWS User Group Taiwan 社團 [5],在社團中歡迎分享採坑經驗、發問、討論,社團也會定期不定期舉辦 AWS 相關主題討論與聚會,歡迎大家一起交流、一起學習、一起成長。
這篇特別以沒那麼白話搭配沒那麼易懂風格撰寫的推薦序,若能讓你感受到 Clarence 的白話易懂而順利學習 CDK 的話,也可以考慮順手多帶一本給你身邊同事、朋友,將這中文世界第一本 CDK & 鐵人賽 DevOps 主題冠軍好書推薦給更多人,讓我們一起實現「既有效率、又很可靠」(握拳。
Ernest Chiang, AWS Community Hero
購書連結
- AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC(iT邦幫忙鐵人賽系列書)| 天瓏網路書店
- AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC(iT邦幫忙鐵人賽系列書)| 博客來
- AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC(iT邦幫忙鐵人賽系列書)| 金石堂
- AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC(iT邦幫忙鐵人賽系列書)| momo購物網
參考資料
- [1] https://aws.amazon.com/what-is-aws/
- [2] https://rickhw.github.io/2019/04/04/DevOps/Four-Pillars-of-Software-Delivery/
- [3] https://t.me/AWSCDK
- [4] https://constructs.dev/
- [5] https://www.facebook.com/groups/awsugtw/
延伸閱讀
- 我的 AWS 雲端產品清單 學習筆記 - 可以從這裡開始尋找各種觀察角度,或尋找新產品。
- 我的 AWS Cloud Development Kit (AWS CDK) 學習筆記 - 包含「歷史考古」、「名詞定義」、「細節概念」、「冷知識」等內容。
- 準備 AWS CDK Pull Request 所需的環境
- 如何 20 分鐘部署靜態網站,並使用 OAuth 2.0 授權、CloudFront CDN 加速?