Terraform入門 - 2. 構(gòu)建基礎(chǔ)設(shè)施

感謝光顧,簡書停更诉位,遷移至sengmentfault: https://segmentfault.com/a/1190000018145618

原文地址:https://www.terraform.io/intro/getting-started/build.html

Terraform安裝完成以后,我們直接開始創(chuàng)建一些基礎(chǔ)設(shè)施逊彭。

我們在AWS上創(chuàng)建一些基礎(chǔ)設(shè)施來開始入門指南瓦戚,因為它最流行且通常可以被理解摸吠,但是Terraform可以管理許多provider空凸,包含在單個配置文件中管理多個provider。在使用案例中有一些例子寸痢。

如果你沒有AWS賬號呀洲,就創(chuàng)建一個。在入門指南中啼止,我們將只會用AWS免費試用的資源道逗,也就是說它是免費的。如果你已經(jīng)有一個AWS賬號献烦,你可能要充一些錢憔辫,但是最多不會超過幾美元。

警告仿荆!如果你使用的不是一個AWS免費試用賬號贰您,你可能需要充值來執(zhí)行這些例子。你最多需要充值幾美元拢操,但是我們不對任何可能產(chǎn)生的費用負(fù)責(zé)锦亦。

配置

Terraform中用來描述基礎(chǔ)設(shè)施的的文件被叫做Terraform配置文件。現(xiàn)在我們將寫下我們第一個配置文件來啟動一個AWS的EC2實例令境。

配置文件的文檔在這里杠园。配置文件也可以是一給json文件,但是我們建議只在機(jī)器生成配置文件時使用json格式舔庶。

整個配置文件內(nèi)容如下所示抛蚁。我們將在隨后的每一步逐步講解陈醒。將下面內(nèi)容保存到一個名為example.tf的文件中。確認(rèn)在你的目錄中沒有其他*.tf文件瞧甩,因為Terraform將加載所有的*.tf文件钉跷。

provider "aws" {
  access_key = "ACCESS_KEY_HERE"
  secret_key = "SECRET_KEY_HERE"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}

注意:上面的配置工作于大部分AWS賬戶,將訪問默認(rèn)VPC肚逸。EC2經(jīng)典網(wǎng)絡(luò)用戶請為instance_type指定t1.micro爷辙,并為ami指定ami-408c7f28。如果你使用一個非us-east-1的region你將需要指定該region的ami因為每個region的ami都是特定的朦促。

用你的access key和secret key替換ACCESS_KEY_HERESECRET_KEY_HERE膝晾,可從此頁面獲取。我們現(xiàn)在將他們硬編碼务冕,但是在入門指南后面的將會將他們提取到變量里血当。

注意:如果你僅僅遺漏了AWS憑證,Terraform將自動從已保存的API憑證中搜索(如:在~/.aws/credentials中)禀忆〈跬牵或者IAM實例配置文件憑據(jù)。對于將文件簽入源代碼管理或者有多個管理員的情況油湖,該選擇要干凈很多巍扛。到這里查看細(xì)節(jié)。將憑據(jù)信息遺留到配置文件以外乏德,使你可以將憑據(jù)信息放在源代碼管理之外撤奸,并且也可以為不同的用戶使用不同的IAM憑據(jù)而不需要修改配置文件。

這是一個完整的可執(zhí)行的Terraform配置文件喊括。一般結(jié)構(gòu)應(yīng)該直觀并且直接胧瓜。

provider塊用于指定provider名稱,在我們的實例中叫"aws"郑什。provider負(fù)責(zé)創(chuàng)建和管理資源府喳。如果一個Terraform配置文件由多個provider組成,可以有多個provider塊蘑拯,這是常見的情況钝满。

resource塊定一個基礎(chǔ)設(shè)施中存在的資源。一個資源可能是物理組件申窘,如:EC2實例弯蚜,或也可以是一個邏輯資源比如Heroku應(yīng)用。

resource塊開始前有兩個字符串:資源類型和資源名稱剃法。在我們的實例中資源類型是"aws_instance"碎捺,資源名為"example"。資源類型的前綴映射到provider。在我們的實例中收厨,"aws_instance"自動告知你Terraform被"aws"provider管理晋柱。

resource塊內(nèi)部是該資源的配置。它獨立于每個資源provider并且在provider參考完全列出來诵叁。對于我們的EC2實例雁竞,我們?yōu)閡buntu指定一個AMI,然后請求一個"t2.micro"的實例因為我們有免費資格黎休。

安裝

為一個新配置文件或從版本控制工具中檢出的已存在的配置執(zhí)行的第一個命令是terraform init浓领,它將初始化各種本地配置和數(shù)據(jù)為后面的命令使用玉凯。

Terraform使用基于插件的結(jié)構(gòu)來支持眾多的基礎(chǔ)設(shè)施和服務(wù)提供商势腮。從Terraform"0.10.0"起,每個提供商有他們自己封裝和發(fā)型的二進(jìn)制文件漫仆,從Terraform分離出來捎拯。terraform init將自動為下載配置文件中包含provider下載插件。在該實例中只包含"aws"插件盲厌。

$ terraform init
Initializing the backend...
Initializing provider plugins...
- downloading plugin for provider "aws"...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.aws: version = "~> 1.0"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your environment. If you forget, other
commands will detect it and remind you to do so if necessary.

aws provider插件與其他薄記文件一起被下載安裝到當(dāng)前目錄子目錄署照。

輸出信息會顯示所安裝插件的版本,以及建議在配置文件中指定版本以確保terraform init在未來安裝一個兼容的版本吗浩。對于后面步驟來說這一步不是必須的建芙,因為該配置文件后面將會被廢棄。

應(yīng)用變更

注意:本指南中列出的命令適用于terraform0.11及以上版本懂扼。更早版本需要在應(yīng)用前使用terraform plan命令查看執(zhí)行計劃禁荸。使用terraform version命令確認(rèn)你當(dāng)前terraform版本。

在當(dāng)前目錄中你創(chuàng)建的example.tf為例阀湿,執(zhí)行terraform apply赶熟。你將看到以下類似輸出,我們刪節(jié)了部分輸出以節(jié)省空間:

$ terraform apply
# ...

+ aws_instance.example
    ami:                      "ami-2757f631"
    availability_zone:        "<computed>"
    ebs_block_device.#:       "<computed>"
    ephemeral_block_device.#: "<computed>"
    instance_state:           "<computed>"
    instance_type:            "t2.micro"
    key_name:                 "<computed>"
    placement_group:          "<computed>"
    private_dns:              "<computed>"
    private_ip:               "<computed>"
    public_dns:               "<computed>"
    public_ip:                "<computed>"
    root_block_device.#:      "<computed>"
    security_groups.#:        "<computed>"
    source_dest_check:        "true"
    subnet_id:                "<computed>"
    tenancy:                  "<computed>"
    vpc_security_group_ids.#: "<computed>"

該輸出顯示執(zhí)行計劃陷嘴,描述terraform將根據(jù)配置文件執(zhí)行那些動作來改變基礎(chǔ)設(shè)施映砖。輸出格式與工具輸出的diff產(chǎn)生的格式類似,比如git灾挨。輸出內(nèi)容在 aws_instance.example 有個 + 意味著Terraform將會創(chuàng)建該資源邑退。在那些之下,顯示將會被設(shè)置的屬性劳澄。當(dāng)值為<computed>時瓜饥,意味著資源被創(chuàng)建后才能知道。

terraform apply執(zhí)行失敗報錯時浴骂,讀取錯誤信息并修復(fù)所報錯誤乓土。在這一步,它可能是配置文件中的語法錯誤。

如果計劃被成功創(chuàng)建趣苏,Terraform將在執(zhí)行前暫停并等待確認(rèn)狡相。如果計劃中有任何不對或危險信息,在這里終止很安全食磕,它不會對你的基礎(chǔ)設(shè)施做任何改變尽棕。這是如果計劃看起來可接受,在確認(rèn)終端輸入yes執(zhí)行彬伦。

執(zhí)行該計劃會花幾分鐘時間滔悉,直到EC2實例可用:

# ...
aws_instance.example: Creating...
  ami:                      "" => "ami-2757f631"
  instance_type:            "" => "t2.micro"
  [...]

aws_instance.example: Still creating... (10s elapsed)
aws_instance.example: Creation complete

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

# ...

在此之后Terraform執(zhí)行完成,你可以到EC2終端查看創(chuàng)建號的EC2實例单绑。(確保你在查看與配置文件中相同的可用區(qū)回官!)Terraform也會寫一些數(shù)據(jù)到terraform.tfstate。該狀態(tài)文件極其重要搂橙;它追蹤創(chuàng)建的資源ID歉提,所以Terraform知道它管理的是什么資源。該文件必須被保存并分發(fā)給可能使用terraform的任何人区转。通常建議在使用Terraform時設(shè)置遠(yuǎn)程狀態(tài)苔巨,來自動分享狀態(tài),但是針對像入門指南這樣簡單的環(huán)境這不是必須的废离。

你可以使用terraform show檢查當(dāng)前狀態(tài):

$ terraform show
aws_instance.example:
  id = i-32cf65a8
  ami = ami-2757f631
  availability_zone = us-east-1a
  instance_state = running
  instance_type = t2.micro
  private_ip = 172.31.30.244
  public_dns = ec2-52-90-212-55.compute-1.amazonaws.com
  public_ip = 52.90.212.55
  subnet_id = subnet-1497024d
  vpc_security_group_ids.# = 1
  vpc_security_group_ids.3348721628 = sg-67652003

你可以看到侄泽,通過創(chuàng)建資源,我們收集了很多信息蜻韭。這些值可以被引用以配置其他資源和輸出悼尾,這些將會在入門指南后面的部分講到。

準(zhǔn)備

我們在這一節(jié)創(chuàng)建的EC2是基于已給出的AMI湘捎,但是沒有安裝額外的軟件诀豁。如果你在運行一個基于鏡像的的架構(gòu)
(或許是使用Packer創(chuàng)建的鏡像),那么這就是你所需要的窥妇。

不論如何舷胜,許多基礎(chǔ)設(shè)施都需要一些不同程度的初始化或者軟件準(zhǔn)備階段。做到這些活翩,Terraform支持provisioner這將會在稍后的入門指南中講到烹骨。

下一步

恭喜你已經(jīng)使用Terraform構(gòu)建了你的第一個基礎(chǔ)設(shè)施。你已經(jīng)看到了配置語法材泄,一個基本的執(zhí)行計劃實例沮焕,并且理解了狀態(tài)文件。

下一步拉宗,我們將繼續(xù)變更和銷毀基礎(chǔ)設(shè)施峦树。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辣辫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子魁巩,更是在濱河造成了極大的恐慌急灭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谷遂,死亡現(xiàn)場離奇詭異葬馋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肾扰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門畴嘶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人集晚,你說我怎么就攤上這事窗悯。” “怎么了甩恼?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵蟀瞧,是天一觀的道長沉颂。 經(jīng)常有香客問我条摸,道長,這世上最難降的妖魔是什么铸屉? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任钉蒲,我火速辦了婚禮,結(jié)果婚禮上彻坛,老公的妹妹穿的比我還像新娘顷啼。我一直安慰自己,他們只是感情好昌屉,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布钙蒙。 她就那樣靜靜地躺著,像睡著了一般间驮。 火紅的嫁衣襯著肌膚如雪躬厌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天竞帽,我揣著相機(jī)與錄音扛施,去河邊找鬼。 笑死屹篓,一個胖子當(dāng)著我的面吹牛疙渣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堆巧,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼妄荔,長吁一口氣:“原來是場噩夢啊……” “哼泼菌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啦租,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤灶轰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刷钢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笋颤,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年内地,在試婚紗的時候發(fā)現(xiàn)自己被綠了伴澄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡阱缓,死狀恐怖非凌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荆针,我是刑警寧澤敞嗡,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站航背,受9級特大地震影響喉悴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玖媚,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一箕肃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧今魔,春花似錦勺像、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姆涩。三九已至哄尔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留辰狡,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓垄分,卻偏偏與公主長得像宛篇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薄湿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. 前言 目前IT設(shè)備對于大多數(shù)企業(yè)公司來說是必不可少的基礎(chǔ)設(shè)施叫倍,由于云計算的按需付費偷卧,便捷配置計算資源(資源包...
    liewuweifeng閱讀 9,011評論 0 6
  • 利用亞馬遜AWS搭建個人服務(wù)器 注冊 注冊地址:https://portal.aws.amazon.com/bil...
    恪晨閱讀 20,117評論 0 19
  • 人相處規(guī)律跳不出8個字:緣聚則成,緣盡則滅吆倦!
    灣灣yunyi閱讀 131評論 0 0
  • 感賞兒子今早精神不錯 今天和兒子聊起周末作業(yè)拖到周日晚再做好不好听诸,他說不好,我說我預(yù)計了你做作業(yè)要4小時蚕泽,你認(rèn)為安...
    輝_0495閱讀 129評論 2 1
  • 緩緩的季節(jié)晌梨,沒有寒冷,沒有燥熱须妻。 沿途跑步仔蝌,風(fēng)景很美,
    尖娃閱讀 268評論 0 0