AWS 基礎設施即代碼(五)

基礎設施即代碼

概述

  • 手動配置的挑戰:可能由於人爲錯誤致使缺少可靠性,環境沒法徹底再現,同時須要額外文檔
  • 基礎設施即代碼,是軟件開發中用於建立可重用、可維護、可擴展及可測試基礎設施的技術、實踐和工具,而不降基礎設施定義爲捆綁硬件的組件。
  • 基礎設施即代碼的好處:
    • 可靠性
    • 可再現性 - 可重複性、可重用性
    • 可維護性
    • 一致性
    • 並行化
    • 文檔性

AWS 基礎設施即代碼(五)

環境自動化

  • 只要可能,都應該自動對資源執行預置、終止和配置操做,經過取消手動流程,提升系統的穩定性和一致性、以及組織的效率
  • 使用可釋放的資源
    • 利用雲計算的動態配置特性,將服務器和其餘組件視爲臨時資源
  • 自動部署相同配置的新資源
    • 終止未使用的資源
    • 自動切換到新的IP地址
    • 測試新資源的更新,而後用更新的資源替代舊資源

AWS 基礎設施即代碼(五)

AWS Lambda

概述

  • 無需配置和管理任何服務器和應用程序就能運行代碼。
  • 只須要上傳代碼,Lambda就會處理運行而且根據須要自動進行橫向擴展
  • Lambda 是徹底託管的計算服務,在響應事件或以事件間隔運行無狀態代碼
  • Lambda支持的代碼語言
    • Python
    • Java
    • Node.js (JavaScript)
    • C#
    • Go
  • Lambda 能夠支持:
    • 服務器
    • 容量需求
    • 部署
    • 擴展和容錯
    • 操做系統和語言更新
    • 指標和日誌記錄
  • Lambda 能夠實現:
    • 使用本身的代碼甚至原生庫
    • 並行運行代碼
    • 建立後端、事件處理程序和數據處理系統
    • 始終沒必要爲閒置資源付費
  • 使用Lambda進行擴展
    • 擴展事件觸發Lambda,使用Lambda函數自動向其餘AWS服務發起API調用
    • 擴展基於容器的實例,如Docker 、ECS等
    • 經過函數實現更智能的擴展,如經過分析性能數據來查找,而不只僅是事件
    • 由於Lambda能夠自動擴展,可使用Lambda函數來替換一些EC2

AWS 基礎設施即代碼(五)

使用AWS Lambda 解耦基礎設施

  • Lambda由於其可用性高,佔用成本有限,是處理數據的理想解決方案
  • Lambda 能夠用簡單的微服務來取代傳統服務器,進一步解耦基礎設施
  • 當用實例便可處理的簡單功能和應用程序,而又不想爲高可用和擴展煩惱,建議使用Lambda
  • 如下事件能夠觸發 Lambda

AWS 基礎設施即代碼(五)

Lambda使用方法

  • 以.zip 格式上傳代碼,
  • 用計劃函數指定運行頻率
  • 用驅動型函數指定事件源
  • 指定所需的計算資源 - 23個級別,從128M最低CPU到1.5GB最高CPU,能夠調整計算級別
  • 指定超時時限
  • 指定所須要訪問資源的VPC
  • 啓動函數 (100ms - 5 min 運行時間,最長爲15min)
  • Lambda代碼存儲在S3中,而且靜態加密
  • Lambda僅支持無狀態函數
  • 每一個 Lambda 函數都會在本身的 /tmp 目錄中接收到 500MB 的非永久性磁盤空間。
  • Lambda 支持代碼版本控制
  • 免費套餐包括 每個月100萬個免費請求及40w內存GB-秒的計算時間
  • 能夠藉助CodePipeline 和 CodeDeploy 自動執行無服務應用程序的發佈過程,也可使用CloudFormation進行打包加載
  • Lambda@Edge
    • 響應CloudFront的請求,在全球運行代碼
  • 超出併發默認限制
    • 同步調用的 AWS Lambda 函數會返回一條限制錯誤信息(429 錯誤代碼)。
    • 異步調用的 Lambda 函數能夠承受必定範圍內的流量突增大約 15 到 30 分鐘,以後再進來的事件將會以限制爲理由遭到拒絕。
    • 若是調用的 Lambda 函數是用於響應 Amazon S3 事件,則被 AWS Lambda 拒絕的事件可能被 S3 保留 24 小時並在此期間反覆重試

Lambda的應用場景

  • 將Lambda做爲Web服務器

AWS 基礎設施即代碼(五)

  • 用Lambda能夠執行 輪詢/偵聽、排隊、處理、自動擴展、冗餘和負載均衡來替代傳統的複雜的數據處理方案

AWS 基礎設施即代碼(五)

  • 其餘案例

AWS 基礎設施即代碼(五)

AWS 基礎設施即代碼(五)

AWS 基礎設施即代碼(五)

AWS 基礎設施即代碼(五)

AWS 基礎設施即代碼(五)

AWS CloudFormation

概述

  • 自動建模和設置AWS資源,下降管理從成本
  • 支持快速啓動新的測試環境,可靠複製環境
  • 便捷的預配置機制,適用於衆多 AWS 資源。它支持許多不一樣類型的應用程序的基礎設施需求,
  • 三大組件
    • 模板- 用JSON/YAML格式文件描述建立的資源,將其視爲源代碼進行保存和管理
    • 引擎 - 利用AWS組件將模板解釋爲AWS資源堆棧
    • 堆棧 - AWS CloudFormation建立資源的集合,可在AWS管理控制檯中跟蹤和審查
  • 每一個帳戶默認只能建立200個堆棧,可申請擴展

模板

模板便是代碼

  • 在模板中完整定義應用程序堆棧(應用程序所須要的全部資源)
  • 定義模板運行時的參數(EC2大小、密鑰對等)
  • 模板的編輯方法
    • 直接用JSON/YAML文本編輯
    • 第三方VisualOps.io 模板編輯器
    • AWS CloudFormation Designer經過拖拽資源和編輯屬性而生成JSON模板
  • CloudFormation 模板組織
    • 模板能夠在不一樣區域被重複使用以實現部署的一致性
    • 應基於全部權和應用程序生命週期將資源分配到不一樣的 CloudFormation 模板中
    • 不建議在一個模板內構建應用程序的全部環境,至少將網絡資源、安全資源和應用程序資源分開到不一樣的模板中
    • 即使是對於相同類型的資源,也應該避免不一樣的應用程序共享同一個模板
    • 共享模板,某些特定環境部分常亮依舊不會工做,須要用輸入參數等變量進行定義,如EC2祕鑰對,安全組名稱,子網ID,EBS快照ID等

AWS 基礎設施即代碼(五)

CloudFormation 模板剖析

AWS 基礎設施即代碼(五)

  • Description:
    • 描述模板的文本字符串
    • 不能使用參數或者函數
  • Metadata
    • 提供關於模板其餘詳細信息的JSON對象
    • CloudFormation 的一些功能須要檢索的設置或配置信息
    • 能夠在模板或資源級別指定,例如
      • AWS::CloudFormation::Init - 爲cfn-init幫助程序腳本定義配置任務
      • AWS::CloudFormation::Interface - 在控制檯中顯示輸入參數時,定義的參數分組和排序
      • AWS::CloudFormation::Desinger - 描述資源在 CloudFormation Designer 是如何佈局的
  • Resource
    • 要在堆棧中啓動的服務及其設置
    • 必須對每一個資源進行單獨聲明
    • 能夠指定同種類型的多個資源,但須要用逗號分隔開
    • 資源聲明中須要包含資源屬性
  • DependsOn
    • 指定只有在建立另外一個資源後才能建立特定資源
    • 例如AutoScaling,EC2,ELB,彈性IP等須要關聯公有IP地址並處於一個VPC時,須要依賴於VPC網關鏈接
    • 等待條件 AWS::CloudFormation::WaitCondition
      • 可暫停建立堆棧並等待,直到收到信號後方繼續
    • 建立策略 CreationPolicy
      • 爲不一樣操做設置執行策略,如等待特定時間或特定數量的信號等
  • Parameters
    • 可在運行是傳入模板的變量值
    • 容許在啓動模板時自定義堆棧
    • 可爲每一個參數指定容許值和默認值
    • 每模板最多60個參數
  • Mapping
    • 指定條件參數值的密鑰及其關聯值
    • 基於特定條件來自定義資源屬性
  • Condition
    • 控制在堆棧創立或更新期間是建立特定資源仍是爲特定屬性分配值
    • 經過定義資源或屬性定義的語句,比較兩個值是否相等等前提下進行有條件的建立資源
    • 好比利用同一模板完成對測試和生產環境進行不一樣Size的資源部署
  • Outputs
    • 查看堆棧的屬性時返回的值
    • 聲明要從 CloudFormation 控制檯查看的輸出值,或者是響應調用時返回的輸出值
    • 每模板最多60個

自定義資源管理

  • 爲了處理不受 CloudFormation 直接支持的資源和功能,能夠在建立堆棧是加入本身的邏輯
  • 支持WaitCondition,確保應用程序或管理系統等外部資源收到完成信號前,阻止其餘資源建立
  • 如配置第三方訂閱,將身份認證祕鑰返回給須要的EC2實例
  • 使用Lambda將新的VPC與其餘VPC創建對等關係
  • 使用模板建立堆棧時,如有任一資源建立失敗,因此已經建立的資源都會被回滾和刪除
  • 能夠經過提交原始模板的修改版原本建立更改集以更新堆棧和資源
  • 默認狀況下,刪除堆棧會刪除全部資源,但能夠經過設置刪除策略來保留某些資源
  • 當任一資源刪除失敗,剩餘未刪除資源都將被暫時保留,直到成功刪除整個堆棧

AWS Elastic Beanstalk

概述

  • 適用於Web應用程序和Worker process 環境的 一項自動部署和擴展服務, 是最快速最簡單的方式
  • 開發人員只需上傳應用程序,Elastic Beanstalk 將自動處理容量預配置、負載均衡、Auto Scaling 和應用程序運行情況監控的部署細節
  • 支持 Docker
  • 支持多種語言,包括 PHP、Java、Python、Ruby、Node.js、.Net、Go等直接上傳運行
  • 在Apache、Nginx、Passenger 和 IIS服務器上部署
  • Beanstalk建立的環境是獨立的
  • Beanstalk 是一個包括環境、版本和環境配置的邏輯組合,概念上與文件夾相似
  • 能夠自動部署和處理負載均衡、運行情況監控、自動擴展、應用程序平臺管理、代碼部署等
  • 大多數現有的應用程序容器或平臺即服務解決方案在減小所需的編程量的同時,會大大下降開發人員的靈活性和控制。使用 AWS Elastic Beanstalk,開發人員可保留對支持其應用程序的 AWS 資源的徹底控制。若是開發人員決定要管理基礎設施的某些(或所有)元素,可以使用 Elastic Beanstalk 的管理功能無縫操做。
  • 能夠輕鬆爲每個應用程序版本建立一個獨立的運行環境,因爲是一次運行的,因此完成會就會自動刪除
  • 能夠運行Docker環境

特性

  • 能夠內置CloudWatch監控指標對基礎架構進行監控和管理,而且經過SNS發佈通知
  • 開發人員能夠徹底控制支持其應用程序的AWS資源
  • 選擇最合適的EC2實例類型
  • 選擇合適的存儲和數據庫
  • 啓用對EC2實例的登陸訪問
  • 經過ELB啓用HTTPS來加強安全性
  • 調整應用服務器設置並傳遞變量
  • 調整Auto Scaling設置
  • 默認狀況下應用程序是公開的,可使配置VPC、設置安全組和nACL設置爲私有。
  • 底層平臺建議設置每週兩個小時的維護時段進行新平臺版本的發佈和更新

使用場景

  • 很是適用於藍綠部署的場景
  • 在全規模生產和最小規模預生產切換
  • 使用兩個ELB保持預熱狀態
  • 出現錯誤時能夠實現快速回滾
  • 實際上 CloudFormation 也能夠實現藍綠部署

AWS OpsWorks

概述

  • 利用Chef 和 Puppt 實現的配置管理服務,幫助配置和操做各類形態和規模的應用程序
  • 能夠定義應用程序的總體架構和規範,包括軟件包安裝、軟件配置、資源等
  • 利用OpsWorks 生命週期工具能夠簡化應用程序管理、減小部署週期數
  • 支持對Linux和Windows服務器的管理
  • 支持DevOps持續集成

管理

  • 有組織的方式對堆棧、層和應用程序進行建模和可視化
  • 堆棧
    • AWS將應用程序所須要的包括EC2,EBS,ELB等資源組稱爲堆棧
    • OpsWorks 採用簡單和靈活地方式來建立、配置、管理和監視堆棧及應用程序
    • AWS可使用OpsWorks 和 IAM來管理用戶權限,且二者不排斥能夠共同工做。
  • 層 Layer
    • 能夠將整個應用程序分爲多層來定義堆棧元素,每層服務於特定目的
    • 每層經過Chef任務列表來處理任務能夠經過修改默認配置或添加任務來自定義或擴展圖層
    • 用戶能夠徹底控制安裝哪些軟件包,部署哪些應用程序,如何配置他們。
  • 應用程序
    • OpsWorks能夠運行生命週期事件,每一個應用程序能夠在合適的事件自動運行一組指定的任務

AWS 基礎設施即代碼(五)

監控

  • OpsWorks能夠將全部資源的指標發送給CloudWatch,以即可視化和設置警報
  • 支持各類自定義指標

AWS EC2 Run Command

概述

  • 提供簡單的方法自動執行常見的管理任務,包括
    • Linux Shell
    • Windows PowerShell
    • 安裝軟件或補丁
    • 能夠跨多個實例執行命令
    • 使結果具備可見性
  • AWS 上還支持包括Chef、Puppt、Ansible 和 Salt等其餘第三方自動化解決方案

Amazon API Gateway

概述

  • 能夠在AWS上建立API,做爲後端服務訪問數據、業務邏輯或功能的接口
  • 徹底託管並接受處理高達數萬併發API調用時涉及的全部任務
  • 能夠處理如下工做負載
    • Lambda
    • 使用AWS Step Function狀態機調用EC2,ECS, Beanstalk, Web應用程序
    • 能夠與其餘AWS服務集成,如Kinesis
  • 支持建立HTTP/REST API 和 WebSocket API
    • HTTP/REST API 是一組資源和方法,或者是終端節點。HTTP/REST API 能夠部署到不一樣階段,並可克隆到新版本。
    • WebSocket API 能夠在互連客戶端之間維持永久鏈接,以啓用實時消息通訊。
  • 能夠託管和使用不一樣版本和階段的API
  • 建立API祕鑰並分配給開發人員
  • 利用簽名v4授予API訪問權限
  • 限制並監控請求以保護後端系統
  • 與AWS Lambda高度集成
  • 若是使用JavaScript/AJAX來跨域訪問資源,必須在API Gateway上啓用CORS功能已肯定能夠調用非本站點資源

好處

  • 計量
    • 計量和限制第三方開放人員訪問API的計劃
  • 安全
    • 支持多種受權訪問工具
    • 保護系統免受DDOS***
  • 彈性
    • 默認提供託管緩存以存儲API響應
    • 經過Amazon CloudFront下降延遲
    • 一種低成本的無服務方案,能夠自動彈性伸縮
  • 操做監控
    • 經過指標監控面板,監控服務調用狀況
    • 包括調用次數、延遲數據和錯誤率
    • 收集錯誤日誌、訪問日誌和調試日誌
  • 生命週期管理
  • 專爲開發人員設計
    • 適用於iOS,Android和Java的新一×××發工具包
    • 支持OpenAPI規範(Swagger)
  • 實時雙向通訊
    • 維持用戶間永久鏈接,支持消息傳輸
    • 請求/響應數據轉換

      API管理臺配置

  • 資源
    • 資源是一種類型化對象,屬於您的 API 的域。
    • 每一個資源可能都關聯了一個數據模型,或與其餘資源相關,而且能夠響應不一樣的方法。
    • 您也能夠將資源定義爲變量來攔截對多個子資源的請求。
    • 資源策略
      • 資源策略是一種 JSON 策略文檔,您能夠將其附加到某個 API 來控制指定的主體(一般是 IAM 用戶或角色)是否能夠調用該 API。
      • 您可使用資源策略讓來自其餘 AWS 帳戶的用戶安全訪問您的 API,或者只容許從指定的源 IP 地址範圍或 CIDR 塊調用該 API
      • 資源策略能夠與 Amazon API Gateway 中的 REST API 配合使用。
  • 方法
    • REST API 中的每種資源能夠支持一個或多個標準 HTTP 方法。
    • 您將定義應每種資源應支持的動詞(GET、POST、PUT、PATCH、DELETE、HEAD 和 OPTIONS)及其實施方法。
  • 階段
    • 階段相似於標籤,定義了部署訪問路徑。例如,您能夠定義開發階段,您還能夠設置直接指向階段的自定義域名,這樣您就無需使用其餘路徑參數了。
      • 生命週期
        • 藉助 Amazon API Gateway,每一個 REST API 均可以有多個階段。
      • 階段
        • 用於劃分 API 的開發生命週期,例如,在您構建了 API 並將其部署到開發階段後,或者當您準備好進行生產時,您能夠將其部署到生產階段。
      • 階段變量
        • 階段變量可定義與某個階段相關的配置值的密鑰/值對。這些值與環境變量類似,可用於配置您的 API。
    • 使用計劃
      • 使用計劃可幫助您聲明針對第三方開發人員的計劃,即將訪問限制到特定 API、定義限制以及請求配額限制,並將這些限制與 API 密匙關聯。
      • 您還能夠基於每一個 API 密匙提取使用數據,以分析 API 使用狀況並生成帳單單據。

選擇合適的解決方案

實際上實在便利性和控制性上尋找平衡數據庫

AWS 基礎設施即代碼(五)

相關文章
相關標籤/搜索