Providers和Data sources

Providers

Terraform支持创建多个云厂商的基础架构。为了有权限创建云上的资源,需要给terraform权限,例如使用~/.aws/目录下的AK/SK,provider就是给terraform指明了如何获得权限。

在执行terraform init时,terraform从tf文件中提取provider,并下载对应的插件数据

例如, provider.tf

provider "aws" {
  region = "us-east-1"
}

Data Sources

Data Source是Terraform官方提供的插件功能,各个Provider可以实现自己的Data Source能力,目的是通过Data Source中的定义过滤需要的数据,一是简化模板编写时数据过滤的复杂性,二是各个资源对Data源的引用保持一致。

例如获取某个region下第三个available_zone:

data "aws_availability_zones" "available" {} # data sources使用data关键字定义

resource "aws_instance" "firstdemo" {
  ami = lookup(var.ami_type, var.region)
  instance_type = lookup(var.instance_type, var.env)
  availability_zone = data.aws_availability_zones.available.names[2]  # 获取第三个可用区
  tags = {
    Name = "demoinstance"
  }
}

参考: https://developer.hashicorp.com/terraform/language/data-sources