前言
當我們開發完一個WEB專案之後, 接下來要做的就是測試跟部屬,通常在部屬的時候, 往往都是找一台機器開始灌OS, 切partition, ...OS灌完之後還要再安裝Application Server, 像Tomcat, IIS 等等
然後設定環境, 如網路,憑證,備份,,等等
最後才開始部屬WEB application, 可是到這個時候, 差不多也浪費掉了一兩天的時間
Elastic Beanstalk(簡稱EBS)是Amazon提供的PAAS服務, 開發人員不需要考慮如何配置以及維護環境, 甚至也不需要煩惱scaling的問題, 只要專心寫程式, 然後上傳到EBS上, 所有跟環境有關的工作EBS都會幫你完成
EBS會幫我們做Heath check, 程式有問題時馬上就會知道, 如果流量增加, EBS也可以幫我們做load balancing,
除此之外, 版本管控的功能也可以讓我們隨時方便的做Roll back
Deployment policy
EBS 提供四種部屬方式All at once
直接部屬到所有的instance上, 在部屬期間服務會被停止, 部屬失敗的話需要額外再做Roll back
Rolling
選擇這個方式, EBS會一個接著一個將程式部屬到每個instance上, 對外服務不會被停止但整體的performance會下降, 對於很吃performance的WEB APP來說並不適用, 部屬失敗時也需要額外的動作去做Roll back
Rolling with additional batch policy
會額外再多建立新的instance去做部屬, 然後再一個接一個部屬下去, 好處是部屬時不會造成performance下降, 部屬失敗時也需要額外的動作去做Roll back
Immutable
所有的instance會先部屬在分身上面, 當部屬成功後分身會取代本尊成為服務的提供者, 而先前的instance會被刪除(非常適合Missions critical production), 部屬失敗時影響最小, 只要砍掉分身就好
Config
EBS允許我們使用特定的config檔案去客製化EBS上的環境, 例如安裝那些套件, 建立那些特定的使用者, 或是執行那些shell commandEBS會在Source code最上層的資料夾裡, 去找擁有特定名稱的資料夾(.ebextensions), 然後從裡面讀取所有副檔名是.config 的檔案(內容格式可以是YAML, JSON)
例如:
{ "option_settings": [ { "namespace": "aws:elasticbeanstalk:application" "option_name": "My application weather check" "value": "/weathercheck" { ] }
Database
EBS提供兩種方式讓我們整合RDS databaseEBS內部的RDS
好處是很方便, 非常適合用在開發以及測試的情況, 當EBS上的服務被終止時, 資料庫的實體也會一起被終止
EBS外部的RDS
整合外部的RDS會比較複雜一些, 但好處是可以跟EBS的環境解偶, 不會因為環境毀了而影響到資料庫, 除此之外, 另一個好處是, 外部的RDS因為不會被侷限在EBS的環境內, 所以它能夠被其他的服務共用, 而且建立時也有更多的資料庫類型可以選擇
想要整合外部的RDS, 首先必須把額外的Security Group加到EBS環境內的Auto Scaling Group裡面, 再來就是需要讓程式知道資料庫的connection string
Price
EBS本身不用錢, 但是部屬用的EC2的instance以及S3會被算錢https://stackoverflow.com/questions/38656595/difference-between-rolling-rolling-with-additional-batch-and-immutable-deployme
https://www.youtube.com/watch?v=e2W4BTR_9eA
留言
張貼留言