The importance of IaC
基本上我學新的工具都會先做幾件事情
- 中文 google 搜尋看有哪些資源
- 乖乖把官網教學文章看過一遍,以及官網的一些重要的基礎文章看完
基本上都會先看官網文件,如果官網怎麼看都不懂,會用中文的教學文件輔助,還好,terraform 的教學文件很不錯~ 當基本資料學完之後,以我的資質一定還是很不熟,所以接著會做幾件事情
- 寫篇文件把基本型態,跟常用方式整理一下(像這篇)
- 參考別人的實戰教學
- 實作
這邊,每件都很重要,把你懂的事情記錄下來有很多好處
- 你未來遇到事情可以複習
- 如果以前觀念錯誤可以改正
- 要找人討論事情或求教,他可以透過文章先了解你的程度
參考別人實戰經驗可以減少自己踩坑機率!
最後,學東西就是要實作,不實作或導入,那有學跟沒學一樣!
IaC 常見管理項目
一個網路服務的提供,中間會經過許多關卡,這邊大致整理以下:
- 軟體開發或者更新
- 測試環境部署並測試
- 正式環境上線
- 監控環境
看幾來步驟很少,但實際上細節很多,而且隨著公司技術程度越高,這些過程會被切得越複雜.
軟體開發或者更新的過程,會被切割成,依據 github flow(每家邏輯不同)對各需求,建立不同分支,RD 的 code 推上來之後,要確保品質會經過測試階段,最後合 code,接下來就是把 code 部署到測試環境部署並測試,測試沒問題就會部署到正式環境.
code 的穩定性那段由 CI 管理,部署過程是 CD,而部署有許多方法,但討論 CD 如何做需要從根本『環境』開使談起,要怎麼選擇你的運算資源這個問題很常見,aws 官方提供的講解如以下
這邊紀錄第二項,關於運算選項:虛擬機器、容器或是無伺服器?他給了三個應用案例
AWS Lambda:想將專注力放在商業邏輯,且執行的任務沒有密集型運算或執行時間過長(超過 15min),又懶得管負載平衡、彈性擴展、聯網或編寫連接代碼 (例如用於使用者身分驗證、記錄日誌、擷取例外情況等) 之類的基礎設施問題,可以用 AWS Lambda,配合 S3,CloudFront,API Gateway,Amazon Cognito 和 AWS AppSync.
ECS or EKS: 單項任務需要密集型運算,或者執行時間超過 15 分鐘。它還可能需要跨越雲端和其他環境,可以考慮用 ECS,EKS.而 ECS 跟 EKS 怎麼選擇?如果您已經擁有 Kubernetes 的現有技能和偏好設定,則 EKS 是最好的選擇,如果不熟 EKS,就乖乖先用 ECS.
EC2: 巨型應用程式,願意完全存取底層基礎架構,以進行診斷和調整之類的操作,也熟悉 nginx 類,可以從 AWS Elastic Beanstalk 上大獲裨益,其將透過協助部署和佈建資源 (例如負載平衡、Auto Scaling 和運作狀態監控) 來加速在 EC2 上建立 Web 應用程式.
基本上,對於工程師來說,你可能使用 VM,container(docker),k8s, 而要學哪一種,跟如何做到該環境的 CD 的這個問題,我的想法是先全學,之後工作遇到的時候比較好回答,要進一步了解也更快.
接著,來想一下一個封包怎麼由使用者端進到你的環境!這邊用一般 TLS 網路服務有使用憑證跟買網域的正常情況.
使用者 request 域名->DNS 解析域名對應的 IP-> request 經過 CDN 到目的 ip ->防火牆允許封包通過-> Server 跟 client 做 TCP 三項交握 -> TLS 憑證驗證交握,驗證 TLS 憑證的有效性 -> web server 對封包加解密 -> 應用程式處理封包中的請求->紀錄 log -> 將回應封包加密後再通過 TLS 協議傳送回 client -> 使用者 get response
簡單整理,IaC 常會需要管理以及設定以下東西:
而 IaC 精神就是把這整個過程的建置,用程式的方式建立,也就是發生了什麼事情,怎麼建立的,都是用程式去控制,如果某段掛掉或被看你不順眼的工程師砍掉,可以迅速地用程式執行備援方案把這段掛掉的補上. 以下的小節,會去討論每階段 IaC 有哪些工具可以使用.
域名
DNS 記錄管理
Terraform:Terraform 是一個基礎設施即代碼工具,支持管理多種域名註冊商和 DNS 解析服務商,例如 AWS Route 53、Cloudflare、GoDaddy 等。
Ansible:Ansible 是一個自動化 IT 工具,可以透過各種模組管理 DNS 記錄,支持的服務商包括 AWS Route 53、Cloudflare 等。
OctoDNS:OctoDNS 是一個由 GitHub 開發的開源 DNS 工具,支持自動化管理多種 DNS 解析服務商,例如 AWS Route 53、Cloudflare、Dyn、Google Cloud DNS 等。
憑證
將憑證的管理納入到設施即代碼 (Infrastructure as Code, IaC) 中。這樣做的好處是可以讓憑證的管理自動化、可追蹤,同時也可以確保憑證的使用符合政策和安全要求
- AWS Certificate Manager:如果你的服務有過 cloudfront,你的網站的憑證可以用 ACM 申請憑證,然後掛到 cloudfront 上面去,這樣你就可以用 https 連線,且 aws 會定期幫你 renew 憑證.
- Certbot:Certbot 是一個由 Let's Encrypt 提供的自動化憑證管理工具,支持自動化生成和更新 TLS/SSL 憑證。可以在你的 nginx 上面使用該套件省去換憑證困擾.
網路及伺服器環境
AWS CloudFormation:AWS 提供的官方 IaC 工具,可用於創建和管理 AWS 資源,包括 VPC、子網、路由表、安全組等。
Terraform:是一款跨雲平台的 IaC 工具,支持多個雲端提供商和各種不同的資源類型。可以用來定義並管理 VPC、子網、路由表、安全組,開機器等。
雖然 Ansible 可以做到類似的事情,不過因為它主要用於在多台主機之間進行配置、軟體安裝,的工具,跟 Terraform 比較的話 ,Terraform 的設定文件格式比較直觀,而且它可以幫助管理資源狀態,從而實現基礎設施的可靠性和可維護性
應用程式部署
自動化部署應用程式到目標伺服器或容器,並確保應用程式配置和運行環境一致。主要有四大套件 Puppet、SaltStack、Chef 和 Ansible.
因為看 104 裡面最常會問的就是 ansible,所以建議先從 Ansible 看.
Ansible:
- 使用 YAML 編寫,具有高可讀性和易於學習。
- 以推送模式工作,無需安裝代理程序。
- 適用於各種規模的基礎設施,易於上手。
- 與其他工具集成良好,廣泛應用於自動化部署和持續集成/持續交付(CI/CD)。
監控程式
在監控 VM 上面的數據,用 Zabbix 或 Prometheus 可以達到同功能,不過在監控 Kubernetes 和 Docker,會比較推薦使用 Prometheus.
在使用 Zabbix 時,因為他圖不太好看,所以會搭配其他套軟體,ex.Grafana 可以將 zabbix 資料匯入他的介面,做圖表美化.
日誌管理
使用 IaC 工具,可以配置和整合日誌管理工具,如 Amazon CloudWatch Logs 或 ELK Stack(Elasticsearch、Logstash、Kibana),以收集、分析和儲存應用程式和基礎設施的日誌。
為什麼要學 IaC
現實問題是,不管是面試 DevOps 還是 SRE,每家公司去面試都會先問你用過的 IaC 工具,在找工作被問到不會就是扣分,有些人的第一間公司就把這些工具用遍了,有些人則不是,所以如果自認沒有比別人有更多的幸運,天份或背景,那能做的就是比別人有更多的耐心跟努力.