閱讀649 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Terraform中DataSource的深度分析

一、DataSource功能介紹

DataSource是Terraform官方提供的插件功能,各個Provider可以實現自己的DataSource能力,目的是通過DataSource中的定義過濾需要的數據,一是簡化模板編寫時數據過濾的複雜性,二是各個資源對Data源的引用保持一致,比如想要知道“華北2”下CPU為1核,內存為1G的ECS實例類型是什麼,就可以用DataSource,如果想引用這個數據源,就可以這樣使用"${data.alicloud_instance_types.1c1g.instance_types.0.id}"。

二、阿裏雲DataSource的功能增強

阿裏雲的DataSource在Terraform原生的功能上做了增強:

  • 不僅可以作為資源引用過濾使用,還支持導出過濾結果;
  • 並且在"plan"時就可以看到文件(原生的功能隻能在實"apply"時才可使用,很不方便);
  • 更強大的是在過濾ECS實例類型時如果入參沒有可選的資源,會提示支持的類型都有哪些;

DataSource目前支持Region、可用區、鏡像、ECS實例類型、VPC、keyPair,如果有用戶想知道都有哪些鏡像ID,就可以通過DataSource執行後查看導出的文件獲取數據,即便是不用於Terraform中也可以做為一個小工具使用。源碼詳見 https://github.com/alibaba/terraform-provider/tree/master/alicloud 中以data_source開頭的文件。

三、例子

下麵以ECS實例類型為例,深度講解如何使用:

需求場景:想要創建一台ECS,條件:Region是華北2,CPU為1核,內存1G,想要知道有哪些實例類型可用。

datasource的代碼如下:

data "alicloud_instance_types" "1c1g" {
    cpu_core_count = 1
    memory_size = 1
    "output_file" = "instance_type.json"  //重點是這句,指明導出的文件名
}

執行“terraform plan”,即可看到輸出的文件 instance_type.json的文件,我們查看文件內容如下:
image

返回字段說明如下:

  • 除了入參"cpu_core_count"和"memory_size"外,我們看到還有兩個返回參數,一個是family,一個是id,family即是ECS實例類型家族,id即是具體的實例類型。

在創建ECS時可以如下引用
image

怎麼樣,是不是很簡單?
如果你曾經被阿裏雲的ECS複雜約束而困擾,如果你不知道去哪裏找實例類型、鏡像、可用區,如果你輸入的實例類型不符合要求,但又不知道怎麼寫是正確的,快快用起DataSource功能吧。

最後更新:2017-07-21 15:02:43

  上一篇:go  首款基於 DynamIQ 的高性能 嵌入式處理器Cortex-A75
  下一篇:go  物聯網普而不及 仍缺殺手級應用