【編者按】時下,Vagrant 被 DevOps 軟件開發商廣泛作為開發階段的本地軟件開發環境,而在本文,CERT Division高級研究員介紹的 Otto 則是 Vagrant 開發團隊 Hashicorp 的又一力作。本文系 OneAPM 工程師翻譯。
在搭建運行在筆記本之上的開發環境時,Vagrant 的表現非常優秀。不過在將程序遷往生產環境之時,在 Vagrant 的配置文件中所存儲的配置環境 Vagrantfile 就不能直接用在生產服務器之上了。Otto 在 Vagrant 基礎上進行了有效的拓展,允許使用單個配置文件對開發與生產環境進行定義、配置與部署。
Otto 在管理基于微服務的應用時,解決了服務依賴關系上的重大挑戰。在微服務架構中,系統被拆分為許多獨立可展開的部件,而不是作為單個龐大的應用。也就是說,我們必須部署許多小型應用,而不是單個的大型應用,這樣一來管理復雜性也增加了。圖一展示了有多個依賴的應用。要加速本地開發環境,開發人員必須了解所有的依賴,并配置相應的 Vagrant 環境。通過遍歷依賴層次結構,構建適應所有依賴關系的 Vagrant 環境,Otto 簡化了基礎設置配置。如果程序所依賴的服務有依賴,Otto 會自動解決、獲取與構建這些依賴。

擴展Otto以解支撐代理
Otto 的入門指南包括工具的安裝,構建簡單 Ruby web 應用的開發環境,配置與部署 AWS 環境的方法。Otto 底層使用了 Vagrant,自動生成用來配置本地開發環境的 Vagrantfile。生成的 Vagrantfile 是一個運行時構件,用戶無法修改。只有創建自定義程序,并與主要的 Vagrantfile 合并,用戶才能對 Vagrantfile 的生成產生影響。
根據入門指南,在配置本地開發環境時,由于所有出站流量必須通過公司的代理服務器,這里遭遇了瓶頸。所有在開發 VM 上的 apt-get 安裝都失敗了。根據下面這些步驟,可以設法利用 Otto 所產生的 Vagrantfile 來解決代理配置。
第一步:首先,創建一個名為 otto-proxy 的目錄,包括定義 vagrant-proxyconf 配置的 Vagrantfile 片段,參見圖二。
if Vagrant.has_plugin?("vagrant-proxyconf")
config.proxy.http = "http://proxy.cmu.edu:8080"
config.proxy.https = "http://proxy.cmu.edu:8080"
config.proxy.ftp = "http://proxy.cmu.edu:8080"
config.proxy.no_proxy = "localhost,127.0.0.1,localaddress"
end
圖二:Vagrantfile 片段的內容定義了 vagrant-proxyconf 配置。
第二步:接下來,我創建了定義自定義程序的 Otto Appfile,如圖三所示,自定義部分定義了一個可合并的Vagrantfile片段。
application {
name = "otto-proxy"
type = "custom"
}
customization "dev-dep" {
vagrantfile = "./Vagrantfile"
}
圖三:這個 appfile 定義了一個簡單的自定義程序,簡單指出了配置開發環境時需要合并的 Vagrantfile。
第三步:最終,修改了 Otto 入門指南中樣例項目的 appfile。修改后的 appfile 見圖四。增加的代碼以黃色標出。
application {
name = "otto-getting-started"
type = "ruby"
dependency {
source = "../otto-proxy"
}
}
project {
name = "otto-getting-started"
infrastructure = "otto-getting-started"
}
infrastructure "otto-getting-started" {
type = "aws"
flavor = "simple"
圖四:修改后的 otto-getting-started appfile,包括 otto-proxy 應用。
目前,在運行 otto 開發命令來配置本地開發環境時,Vagrant 虛擬機上的軟件包管理器通過公司代理服務器搭建了出站連接。
點擊這里查看 otto-proxy 項目的源代碼,點擊這里查看修改后的 otto-getting-started 項目。
需要注意的是:Otto 在現有的 infrastructure-as-code 工具之上增加了新一層抽象。但是通過 appfile 中自定義的依賴關系與自定義標簽,如果必要的話,開發者可以控制底層工具的運作方式。Otto 還處于初始階段,目前是 0.1 版本,除了特殊情況,一般可能無法滿足生產環境使用,不過很有希望成為自動化環境配置與部署的一線工具。
原文鏈接:Developing with Otto: A First Look
OneAPM 是應用性能管理領域的新興領軍企業,能幫助企業用戶和開發者輕松實現:緩慢的程序代碼和 SQL 語句的實時抓取。想閱讀更多技術文章,請訪問 OneAPM 官方博客。