Terraform data sources簡介。
Data sources用來取得Terraform以外的資訊,典型的例子為從provider如AWS取得資訊。不同的proivder提供不同的data sources。
例如下面是aws provider EC2提供的data sources。
在terraform配置檔中宣告data
block來定義data source。
data
後有兩個label,第一個<data_source>
為資料來源、第二個<name>
為data source的名稱,兩者合起來必須在module中為唯一識別,用來在配置中被其他敘述參照。Block中則為該data source的arguments。
data "<data_source>" "<name>" {
<argument = value>
...
}
例如下面宣告一個aws_ami
的data source且命名為web
,block中為aws_ami
的arguments及filter。
owners
限定AMI的owner為amazon
;
most_recent
限定若結果有多個AMI則取最新的;
第一個filter篩選state=available
的AMI;
第二個filter篩選有tag為Component=web
的AMI。
data "aws_ami" "web" {
owners = amazon
most_recent = true
filter {
name = "state"
values = ["available"]
}
filter {
name = "tag:Component"
values = ["web"]
}
}
所以上面的data source定義會返回一個owner為amazon、state為available且tag為Component=web的最新的aws_ami
資料物件(data instance),其可用的attributes參考attributes reference。
資料物件的attributes值可透過<data_source>.<name>.<attribute>
表示式取得。例如下面把resource aws_instance.web
的ami
屬性值設為aws_ami.web
的id
。
resource "aws_instance" "web" {
ami = data.aws_ami.web.id
instance_type = "t1.micro"
}
Data source的argument若不包含參照計算項目(例如尚未建立的resource資訊),則data instance會在terraform的refresh階段(plan之前)被更新;反之會在apply後才會更新。
沒有留言:
張貼留言