了解如何使用Terraform管理多云?
譯文【51CTO.com快譯】多云戰(zhàn)略可能會(huì)給企業(yè)IT團(tuán)隊(duì)帶來很多復(fù)雜性。雖然Puppet、Chef和Ansible等幾款開源端點(diǎn)管理工具有所幫助,但能夠通過單一入口點(diǎn)而不是通過典型的服務(wù)器/客戶端關(guān)系將服務(wù)部署到多個(gè)提供者來得尤其重要。
HashiCorp的Terraform是一個(gè)開源基礎(chǔ)架構(gòu)即代碼(IaC)工具,可以為管理員建立單一的工作流程,以便跨任何云提供商對基礎(chǔ)架構(gòu)進(jìn)行可預(yù)測、可重現(xiàn)的更改。除了簡化管理虛擬機(jī)和依賴項(xiàng)外,它還簡化了跨多家提供商部署服務(wù)的工作。Terraform是一種IaC工具,它還使團(tuán)隊(duì)能夠共享、重用、部署和回滾基礎(chǔ)架構(gòu)更改,就像它們使用代碼版本一樣。
開始入手
不妨看一下一個(gè)基本的Terraform配置文件,它同時(shí)配置AWS EC2實(shí)例和Google App Engine應(yīng)用程序。
- provider "aws" {
- access_key = "ACCESS_KEY_HERE"
- secret_key = "SECRET_KEY_HERE"
- region = "us-east-1"
- }
- provider "google" {
- credentials = "${file("account.json")}"
- project = "my-project-id"
- region = "us-central1"
- }
- resource "aws_instance" "example" {
- ami = "ami-123456789"
- instance_type = "t2.micro"
- }
- resource "google_project" "my_project" {
- name = "My Project"
- project_id = "your-project-id"
- org_id = "1234567"
- }
- resource "google_app_engine_application" "app" {
- project = "${google_project.my_project.project_id}"
- location_id = "us-central'
- }
上述配置定義了兩個(gè)提供者(provider)和三個(gè)資源。在Terraform中,提供者是指與某種API交互的服務(wù),本例中是AWS和谷歌云平臺(tái)(GCP)。雖然提供者指令最直觀的用途是用來配置一個(gè)或多個(gè)云平臺(tái),但也有其他許多資源可供使用,比如數(shù)據(jù)庫驅(qū)動(dòng)程序、網(wǎng)絡(luò)平臺(tái)和版本控制系統(tǒng)。
你在定義提供者后,可以為該提供者聲明資源。在上述例子中,有三個(gè)已定義的資源:AWS EC2實(shí)例、GCP項(xiàng)目和Google App Engine應(yīng)用程序。資源是某個(gè)云提供的任何工具或服務(wù),比如存儲(chǔ)、數(shù)據(jù)庫或計(jì)算。然而,資源也可以定義本地文件,甚至定義隨機(jī)數(shù)據(jù)生成器。
適應(yīng)變化
使用Terraform時(shí)要采取一切預(yù)防措施,以避免任何意外的成本。
除了能夠使用定義明確的配置文件配置應(yīng)用程序基礎(chǔ)架構(gòu)外,Terraform還可以適應(yīng)不斷變化的需求。這項(xiàng)獨(dú)特功能使管理員能夠?qū)ε渲梦募M(jìn)行更改,不用成倍增加工作或基礎(chǔ)架構(gòu)。比如說,假設(shè)我們的上述配置文件更改為以下內(nèi)容:
- provider "aws" {
- access_key = "ACCESS_KEY_HERE"
- secret_key = "SECRET_KEY_HERE"
- region = "us-east-1"
- }
- resource "aws_instance" "example" {
- ami = "ami-123456789"
- instance_type = "t2.micro"
- }
添加和刪除資源時(shí),Terraform會(huì)識(shí)別這些更改并相應(yīng)地更新你的基礎(chǔ)架構(gòu)。由于Terraform保留任何應(yīng)用的配置文件的先前狀態(tài),因此它知道刪除先前配置的GCP資源,又不嘗試重新配置AWS資源。這在更改可能隨時(shí)變化的版本控制環(huán)境中尤其有用。
面臨的挑戰(zhàn)
Terraform***的好處之一也帶來了***的風(fēng)險(xiǎn):由于它很容易使用,如果不仔細(xì)考慮,用戶可能會(huì)面臨巨大成本。只要使用一個(gè)命令,用戶就可以將任何配置文件應(yīng)用于已配置的提供者,這可能導(dǎo)致眾多資源部署到任意數(shù)量的云提供者。雖然Terraform通過計(jì)劃讀出和確認(rèn)機(jī)制有助于防范這種情況,但事故可能會(huì)發(fā)生。使用Terraform時(shí)要采取一切預(yù)防措施,以避免任何意外的成本。
此外,Terraform可以適應(yīng)針對任何已配置環(huán)境作出的更改,因?yàn)樗梢源鎯?chǔ)已配置基礎(chǔ)架構(gòu)的狀態(tài)。雖然這為創(chuàng)建、修改和刪除基礎(chǔ)架構(gòu)提供了一種快速的機(jī)制,但該工具并不在每次運(yùn)行時(shí)都檢查云資源,這意味著你從多臺(tái)計(jì)算機(jī)更改基礎(chǔ)架構(gòu)時(shí)難免增添共享狀態(tài)的開銷。
原文標(biāo)題:Learn how to use Terraform for multi-cloud management,作者:Zachary Flower
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】