05.30 一文掌握AWS,成為雲計算工程師

一文掌握AWS,成為雲計算工程師

作者 | u/SpectralCoding

譯者 | 安翔

本文循序漸進地對 AWS 做了全方位的介紹,即使是零基礎的開發人員,通過閱讀本文也可掌握 AWS,開啟雲計算工程師之路。

如今,越來越多的人通過 AWS 來入門雲計算。很多初學者都迫切地想要知道如何才能成為一名 Linux 管理員,於是我想通過本文詳細介紹一下雲計算的相關知識,希望能夠藉此來解答開發者心中的疑問。本文既包括 AWS 的基礎知識,又包括複雜架構的自動化部署這樣的高級操作。讀者可以根據自己的背景和基礎,選擇自己感興趣的部分閱讀。

開始之前,我先假設你具備以下能力:

  • 擁有初級或者中級的 Linux 系統管理技能。

  • 至少熟悉一門編程語言或者腳本語言。不必特別精通,但是要有實際的編程經歷。

  • 願意花時間去解決一些複雜的問題。

  • 需要花費一點錢購買 AWS 服務,從而提高自己的技能。

本指南使用須知:

  • 首先,本指南不會一步一步手把手地教你如何操作。

  • 我會循序漸進地引導你。因此,你需要真正理解每一部分,然後再閱讀下一部分。

  • 遇到問題時你要善用谷歌搜索、AWS 文檔以及 Stack Overflow 網站去尋找答案。

  • 使用最正確的方式,不要只顧圖快。當然,先用快速的方法完成,然後再進行重構也未嘗不可。

  • 在學習過程中充分理解之後再去服務器上進行實際操作。使用不到 50 美元的 AWS 版本即可完成本指南中的所有工作。重新構建的過程能夠幫助你加深理解。

  • 跳過開頭先去閱讀“成本分析”和“自動化”兩部分的內容,閱讀其他部分的時候保證這兩部分的內容瞭然於胸。

  • 最後,一定要多動手進行實際操作。此時不做,更待何時。

項目概況

本指南不是教你如何在 AWS 上開發網站。而是通過一個網站示例來介紹 AWS 提供給你的所有技術服務。通過概念的學習和實際操作,你能夠對 AWS 有非常全面的瞭解。

本指南將從最基本的網頁開始,最後使用極其便宜的 ASW 構建 Web 應用程序。雖然網站很小,但是無所謂。它可以做任何你想做的事情,可謂麻雀雖小,五臟俱全。

示例網站名為“每日財富”,每次加載頁面隨機顯示一個財富值,在頁面底部提供一個輸入框和一個按鈕,通過這兩個組件向隨機財富列表中添加新的財富數據。

帳戶相關的基礎知識

  • 創建一個 IAM 用戶供你個人使用。

  • 為 root 用戶設置 MFA,關閉所有 root 用戶的 API 密鑰。

  • 設置帳單提醒,以便超過指定的價錢後你能夠及時知道。

  • 使用 API 憑證為你的用戶配置 AWS CLI。

  • 本階段目標:你可以使用 AWS CLI 查詢你的 AWS 賬戶信息。

虛擬主機的基礎知識

  • 部署 EC2 虛擬機並顯示一個簡單的靜態網頁,頁面上呈現“每日財富網站即將推出”的字樣。

  • 拍攝虛擬機快照,接著刪除虛擬機,然後從快照中部署一個新的虛擬機,並選中基本的磁盤備份和磁盤還原功能。

  • 本階段目標:你可以查看 EC2 實例提供的簡單 HTML 頁面。

彈性伸縮配置

  • 從虛擬機中創建一個 AMI 並將其放入彈性伸縮組中,確保至少有一個虛擬機在運行。

  • 給虛擬機添加彈性負載均衡器,並在兩個可用區域之間實行負載均衡。

  • 本階段目標:你可以查看來自兩個 EC2 實例的簡單 HTML 頁面。你任意關閉其中一個,網站仍然可以訪問。

數據庫訪問

  • 創建一個 DynamoDB 數據庫表,並手動執行數據插入和檢索操作,然後通過本地計算機上的腳本執行相同的操作。

  • 將你的靜態頁面重構為每日財富網站,使用 Node、PHP 或者 Python 都可以,對 AWS DynamoDB 數據表中的財富數據執行讀取和更新操作。

  • 本階段目標:你的網站現在可以在用戶和會話之間將數據加載並保存到數據庫中。

虛擬主機 PaaS

  • 將這個簡單的網站重新部署到 Elastic Beanstalk 上。

  • 創建一個靜態的 S3 Bucket,上傳一些靜態的頁面文件和圖片,並將這些資源添加到你的 Elastic Beanstalk 網站。

  • 註冊一個域名,或者使用現有的域名,總之你得有一個。然後配置 Route53 域名服務。把 www..com 指向你的 Elastic Beanstalk,並配置 static..com 從 S3 Bucket 獲取數據。

  • 為你的靜態 S3 網站啟用 SSL,這很重要。

  • 為你的 Elastic Beanstalk 網站啟用 SSL。

  • 本階段目標:你的網站現在通過 HTTPS 提供所有數據。除非你不必自己管理服務器、Web 服務軟件、網站部署或者負載均衡器,否則將會與從前一樣。

微服務

  • 對你的 Elastic Beanstalk 網站進行重構,使其僅僅提供 API。只能通過 POST 和 GET 從 DynamoDB 數據庫更新和檢索特定的數據。使其成為一個簡單的 REST API,把 api..com 作為 URL 提供。

  • 將你的 Elastic Beanstalk 網站的 UI 部分移到你的靜態 S3 網站,當頁面加載時使用 Javascript 從 api..com URL 中檢索數據。將數據發送到 Elastic Beanstalk URL 以使其更新 DynamoDB 數據庫。將數據地址從 static..com 改為 www..com。

  • 本階段目標:你的 Elastic Beanstalk 部署現在只是一種從數據庫檢索數據的結構化方式。所有 UI 和應用程序邏輯均通過 S3 Bucket 提供。由於你不再使用昂貴的服務器來提供網站的靜態數據,因此你可以支持更多的用戶。

Serverless

  • 編寫一個 AWS Lambda 函數,每天晚上定時將 DynamoDB 表中的所有財富數據通過郵件發送給你。可以使用 Python 3 的 Lambda、Boto3、亞馬遜 SES 或者 CloudWatch 的預定功能都可以。

  • 將上述應用重構為無服務器應用。這有點抽象,你需要自己做很多研究和實驗。

    • 架構:靜態 S3 網站前端調用 API 網關,它執行 Lambda 函數來讀取和更新 DyanmoDB 表中的數據。

  • 使用啟用了 SSL 的存儲區作為包含靜態內容的主域名登錄頁面。

  • 創建一個 AWS API 網關,使用它將 HTTP 請求轉發到 AWS Lambda 函數,該函數從 DynamoDB 查詢與 Elastic Beanstalk 微服務相同的數據。

  • 你的 S3 靜態內容應該使用 Javascript 調用 API 網關,然後使用檢索到的數據更新頁面。

  • 首先提供“Get Fortune”API 網關並確保 Lambda 函數能夠工作,然後提供“New Fortune”API。

  • 本階段目標:你的 API 網關和 S3 Bucket 由 CloudFront 通過 SSL 進行配置。你沒有部署 EC2 實例。所有工作均由 AWS 服務完成,根據使用情況計費。

成本分析

  • 熟悉 AWS 的定價方式,瞭解滿足自己服務的最低價。

  • 當你構建服務時,問問自己下列問題:

    • 每個月大概會花費多少錢?

    • 將會進行怎樣的擴展,成本會如何變化?

  • 明確架構

  • 基本虛擬主機:靜態網頁使用 HA EC2 實例即可

  • 微服務:Elastic Beanstalk SSL 僅適用於 API + S3 的靜態網站,所有靜態內容的靜態網站還需 DynamoDB 數據庫表 + Route53 + CloudFront SSL

  • 本階段目標:使用 API網關 + Lambda 函數的無服務器網站 + 針對所有靜態內容的 DynamoDB + Route53 + CloudFront SSL + S3 靜態網站

自動化

  • 這些技術在自動化時最為強大。你可以在幾分鐘內創建一個開發環境,體驗之後可以隨意拋棄。這並不容易,只有真正熟練的人才擅長這樣做。

  • 將上述系統進行自動化部署。使用任何你想要的工具。比較流行的是 AWS CloudFormation 或者 Teraform。將代碼存儲在 AWS CodeCommit 或者 GitHub 上。是的,你可以使用原生 AWS 工具將上述所有內容進行自動化部署。

  • 我的建議是,當你手動完成與應用程序相關的部分時,就會返回並自動執行基礎架構的配置。比如,自動配置你的 EC2 實例。在啟用靜態網站託管的情況下自動創建 S3 Bucket。這並不容易,但當你看到它工作時,這一切都是值得的。

持續交付

  • 當你對自動化部署足夠熟悉之後,你應該去探索並實施持續交付。

  • 開發一個 CI/CD 管道,以便在新代碼發佈時自動更新基礎架構的開發部署,然後構建一個工作流程以在批准時更新生產版本。Travis CI 是一款強大的 SaaS 工具,Jenkins 的關注度也很高,如果你想堅持使用 AWS 特有的技術,可以試試 CodePipeline。

其他

以下內容也是 AWS 的重要主題,值得你探索:

  • IAM:你應該真正瞭解如何創建複雜的 IAM 策略。為 EC2 實例角色和 Lambda 執行角色執行基本的角色和策略當然是必不可少的,但實際上這裡還有許多更加高級的功能。

  • 網絡:從頭開始創建一個新的 VPC,其中包含多個子網,當其正常工作之後,再創建一個 VPC 並將它們放在一起。在每個子網中獲取一個虛擬機,互相使用其私有 IP 地址來通信。

  • KMS:重做早期的 EC2 實例,在磁盤上啟用加密。學習如何加密 AMI。

最後的想法

我最近一直在負責雲系統工程師和雲系統管理員的招聘工作。我們面試了幾十個具有相關經驗的求職者。一開始,我都會和他們聊一聊 DynamoDB 或者彈性伸縮。我發現很少有人真的會動手操作。許多人對這些概念很熟悉,但是當涉及到細節的時候,他們都不太瞭解。實際動手,你會學到很多。

如果你在工作中沒有機會學習,我建議你構建一個小巧而華麗且令人印象深刻的個人項目,你可以通過這個項目來提升自己的技能。將它開源到 GitHub 上,編寫專業的文檔,儘可能獲得更多的評論,並提供網站的演示。將項目鏈接添加到你的 LinkedIn 上,在你的簡歷中引用它,並在求職過程中展示給面試官答案。如果你完成了這個任務並熟悉了 AWS 的大部分服務,我相信你在面試時肯定能夠回答很多實操性的問題。

參考鏈接:

https://www.reddit.com/r/sysadmin/comments/8inzn5/so_you_want_to_learn_aws_aka_how_do_i_learn_to_be/


分享到:


相關文章: