網頁

2021/11/27

Terraform data sources簡介

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.webami屬性值設為aws_ami.webid

resource "aws_instance" "web" {
  ami           = data.aws_ami.web.id
  instance_type = "t1.micro"
}

Data source的argument若不包含參照計算項目(例如尚未建立的resource資訊),則data instance會在terraform的refresh階段(plan之前)被更新;反之會在apply後才會更新。


沒有留言:

張貼留言