網易雲terraform實踐
此文已由作者王慎為授權網易雲社群釋出。
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。
一、terraform介紹
隨著應用上雲的常態化,資源棧動態管理的需求對使用者也變得更加急切。資源編排(Resource Orchestration Service, ROS)能夠簡化雲端計算資源管理和自動化運維,達到基礎設施即程式碼的目標(Infrastructure as Code, IaC)。使用資源編排,通過一個資源模版管理資源棧方式對使用者而言,提升了資源棧的建立、更新和刪除了效率。
terraform是業界流行的資源編排工具。通過實現雲平臺相關的terraform provider外掛,terraform支援多雲平臺下的資源編排。
NCE組目前實現了網易雲terraform provider外掛,初步支援以下資源的編排能力
雲主機、雲硬碟、硬碟繫結
vpc、子網
路由表,安全組
二、使用示例
註冊網易雲賬號, https://www.163yun.com/
註冊完成後,登陸控制檯,在使用者中心建立Access Key。記錄AccessKey 和Access Secret 用於後續api訪問認證。
安裝terraform
訪問terraform官網下載terraform安裝包 https://www.terraform.io/downloads.htm
下載得到zip包 terraform_0.11.6_darwin_amd64.zip,解壓該zip檔案後得到terraform可執行檔案
根據實際規劃拷貝terraform到相應目錄,並配置PATH 環境變數
編寫資源模版
1.建立一個目錄,用於資源編排的工作目錄
2.在workspace目錄下建立並編寫資源模版 vi example.tf (資源描述模版檔案以.tf為字尾)
在模版檔案中編寫以下內容:
provider "neteasecloud" { access_key = “your access key" access_secret = “your access secret" }resource "neteasecloud_nvm" "tf_nvm"{ instance_name = "mynvm" description = "simple nvm" image_id = "aec95c0c-29ff-4172-a8fa-5641163e13a0" spec_type = "nvm.n2.small4" keypairs = [ { name = “your key pair name" fingerprint = “your key pair finger print" } ] vpc_id = "d6d0777e-9748-4eea-b44e-4d6291799473" subnet_id = "a572a392-3630-449a-90fd-8d9884ea2fce" security_group_ids = ["4712b273-4a56-4a29-81d6-0db07be5e20d"] associate_public_ip_address = true internet_max_bandwidth = 20 network_charge_type = "TRAFFIC" personalities = [ { path = "/terraform.txt" contents = "terraform injected" } ] }
以上模版檔案中 provider語句塊定義了訪問網易雲相關認證資訊,access_key 和 access_secret更加使用者實際情況填入。
resource 語句塊定義了一個資源,neteasecloud_nvm 為資源型別,這裡表示網易雲主機,tf_nvm為模版中唯一的資源id。resource語句內部定義了資源的相關屬性。這裡定義了雲主機名稱、映象、規格、網路資源等基本資訊,併為其分配的公網ip,指定了公網頻寬和計費型別,最後向主機注入一條使用者自定義資料。
執行資源編排流程
1.初始化工作空間
下載網易雲terrraform provider外掛,下載得到外掛terraform-provider-neteasecloud
將terraform-provider-neteasecloud 放置在一個公共目錄,如 /usr/local/bin/terraform-providers
在workspace下執行 terraform init -plugin-dir /usr/local/bin/terraform-providers 初始化工作空間
2.建立資源
執行 terraform apply 進行資源建立。terraform會輸出執行計劃,確認無誤後輸入yes,開始執行
terraform會互動式建立資源,等待建立完成後,terraform輸出簡單的統計資訊。在網易雲控制檯檢視已經建立好的雲主機。
3.更新資源
3.1 修改已有資源:更新雲主機規格,將剛才建立的主機規格從4核變更成2核
修改模版中spec_type = “nvm.n2.small4" 為 spec_type = “nvm.n2.small2" 後儲存,再次執行terraform apply 完成雲主機規格變更
變配中
規格變配完成
3.2 動態新增/刪除資源 :增加一塊雲硬碟並繫結到之前到雲主機
在模版中增加以下內容並儲存:
resource "neteasecloud_ncv" "tf_ncv"{ name = "mydisk" capacity = 30 } resource "neteasecloud_nvm_disk_attachment" "tf_attach" { instance_id = "${neteasecloud_nvm.tf_nvm.id}" disk_id = "${neteasecloud_ncv.tf_ncv.id}" }
以上模版表示建立兩個資源,一是雲硬碟,二是主機硬碟繫結關係,在建立主機硬碟繫結關係中,使用terraform變數引用分別引用了主機和硬碟的id。
再次支援terraform apply, 做資源棧更新
執行完成後,可以在網易雲控制檯檢視,新建立了一塊硬碟,並繫結到之前到雲主機上。
4.銷燬資源
當資源棧使用完成後,執行 terrafrom destroy 銷燬整個資源棧,所有資源將被刪除
以上步驟演示了一個資源棧基本的生命週期流程。
三、說明
網易雲terraform provider目前完成了雲主機、雲硬碟、vpc等IasS資源的編排能力,後續還會根據需要和OpenApi能力逐步提供其他資源和服務的編排能力。
有關網易雲terraform provider下載和使用、目前支援的資源詳細說明可以參考以下wiki
網易雲免費體驗館,0成本體驗20+款雲產品!
更多網易技術、產品、運營經驗分享請點選。
相關文章:
【推薦】 Gradletask
【推薦】 初識Continuation
【推薦】 用雙十一的故事串起碎片的網路協議(中)