天天看點

一文掌握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 的大部分服務,我相信你在面試時肯定能夠回答很多實操性的問題。