當前位置:
首頁 > 科技 > 一文掌握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/


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 InfoQ 的精彩文章:

我想開發一款小程序,怎樣才能快速上手並上線?
這12張數據治理內涵圖,你看懂了嗎?

TAG:InfoQ |