website: Initial documentation about data sources
This will undoubtedly evolve as implementation continues, but this is some initial documentation based on the design doc.
This commit is contained in:
parent
6cd22a4c9a
commit
64f2651204
|
@ -0,0 +1,103 @@
|
||||||
|
---
|
||||||
|
layout: "docs"
|
||||||
|
page_title: "Configuring Data Sources"
|
||||||
|
sidebar_current: "docs-config-data-sources"
|
||||||
|
description: |-
|
||||||
|
Data sources allow data to be fetched or computed for use elsewhere in Terraform configuration.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Data Source Configuration
|
||||||
|
|
||||||
|
*Data sources* allow data to be fetched or computed for use elsewhere
|
||||||
|
in Terraform configuration. Use of data sources allows a Terraform
|
||||||
|
configuration to build on information defined outside of Terraform,
|
||||||
|
or defined by another separate Terraform configuration.
|
||||||
|
|
||||||
|
[Providers](/docs/configuration/providers.html) are responsible in
|
||||||
|
Terraform for defining and implementing data sources. Whereas
|
||||||
|
a [resource](/docs/configuration/resource.html) causes Terraform
|
||||||
|
to create and manage a new infrastructure component, data sources
|
||||||
|
present read-only views into pre-existing data, or they compute
|
||||||
|
new values on the fly within Terraform itself.
|
||||||
|
|
||||||
|
For example, a data source may retrieve artifact information from
|
||||||
|
Atlas, configuration information from Consul, or look up a pre-existing
|
||||||
|
AWS resource by filtering on its attributes and tags.
|
||||||
|
|
||||||
|
Every data source in Terraform is mapped to a provider based
|
||||||
|
on longest-prefix matching. For example the `aws_ami`
|
||||||
|
data source would map to the `aws` provider (if that exists).
|
||||||
|
|
||||||
|
This page assumes you're familiar with the
|
||||||
|
[configuration syntax](/docs/configuration/syntax.html)
|
||||||
|
already.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
A data source configuration looks like the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
// Find the latest available AMI that is tagged with Component = web
|
||||||
|
data "aws_ami" "web" {
|
||||||
|
state = "available"
|
||||||
|
tags = {
|
||||||
|
Component = "web"
|
||||||
|
}
|
||||||
|
select = "latest"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
The `data` block creates a data instance of the given `TYPE` (first
|
||||||
|
parameter) and `NAME` (second parameter). The combination of the type
|
||||||
|
and name must be unique.
|
||||||
|
|
||||||
|
Within the block (the `{ }`) is configuration for the data instance. The
|
||||||
|
configuration is dependent on the type, and is documented for each
|
||||||
|
data source in the [providers section](/docs/providers/index.html).
|
||||||
|
|
||||||
|
Each data instance will export one or more attributes, which can be
|
||||||
|
interpolated into other resources using variables of the form
|
||||||
|
`data.TYPE.NAME.ATTR`. For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
resource "aws_instance" "web" {
|
||||||
|
ami = "${data.aws_ami.web.id}"
|
||||||
|
instance_type = "t1.micro"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Multiple Provider Instances
|
||||||
|
|
||||||
|
Similarly to [resources](/docs/configuration/resource.html), the
|
||||||
|
`provider` meta-parameter can be used where a configuration has
|
||||||
|
multiple aliased instances of the same provider:
|
||||||
|
|
||||||
|
```
|
||||||
|
data "aws_ami" "web" {
|
||||||
|
provider = "aws.west"
|
||||||
|
|
||||||
|
// etc...
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
See the "Multiple Provider Instances" documentation for resources
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
## Data Source Lifecycle
|
||||||
|
|
||||||
|
If the arguments of a data instance contain no references to computed values,
|
||||||
|
such as attributes of resources that have not yet been created, then the
|
||||||
|
data instance will be read and its state updated during Terraform's "refresh"
|
||||||
|
phase, which by default runs prior to creating a plan. This ensures that the
|
||||||
|
retrieved data is available for use during planning and the diff will show
|
||||||
|
the real values obtained.
|
||||||
|
|
||||||
|
Data instance arguments may refer to computed values, in which case the
|
||||||
|
attributes of the instance itself cannot be resolved until all of its
|
||||||
|
arguments are defined. In this case, refreshing the data instance will be
|
||||||
|
deferred until the "apply" phase, and all interpolations of the data instance
|
||||||
|
attributes will show as "computed" in the plan since the values are not yet
|
||||||
|
known.
|
|
@ -29,6 +29,10 @@
|
||||||
<a href="/docs/configuration/resources.html">Resources</a>
|
<a href="/docs/configuration/resources.html">Resources</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li<%= sidebar_current("docs-config-data-sources") %>>
|
||||||
|
<a href="/docs/configuration/data-sources.html">Data Sources</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li<%= sidebar_current("docs-config-providers") %>>
|
<li<%= sidebar_current("docs-config-providers") %>>
|
||||||
<a href="/docs/configuration/providers.html">Providers</a>
|
<a href="/docs/configuration/providers.html">Providers</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
Loading…
Reference in New Issue