2014-07-28 19:43:00 +02:00
|
|
|
---
|
|
|
|
layout: "intro"
|
|
|
|
page_title: "Cross Provider"
|
|
|
|
sidebar_current: "examples-cross-provider"
|
|
|
|
---
|
|
|
|
|
|
|
|
# Cross Provider Example
|
|
|
|
|
|
|
|
This is a simple example of the cross-provider capabilities of
|
|
|
|
Terraform.
|
|
|
|
|
|
|
|
Very simply, this creates a Heroku application and points a DNS
|
|
|
|
CNAME record at the result via DNSimple. A `host` query to the outputted
|
|
|
|
hostname should reveal the correct DNS configuration.
|
|
|
|
|
|
|
|
## Command
|
|
|
|
|
|
|
|
```
|
|
|
|
terraform apply \
|
|
|
|
-var 'heroku_email=YOUR_EMAIL' \
|
|
|
|
-var 'heroku_api_key=YOUR_KEY' \
|
|
|
|
-var 'dnsimple_domain=example.com' \
|
|
|
|
-var 'dnsimple_email=YOUR_EMAIL' \
|
|
|
|
-var 'dnsimple_token=YOUR_TOKEN'
|
|
|
|
```
|
|
|
|
|
|
|
|
## Configuration
|
|
|
|
|
|
|
|
```
|
|
|
|
variable "heroku_email" {}
|
|
|
|
variable "heroku_api_key" {}
|
|
|
|
|
|
|
|
# The domain we are creating a record for
|
|
|
|
variable "dnsimple_domain" {}
|
|
|
|
|
|
|
|
variable "dnsimple_token" {}
|
|
|
|
variable "dnsimple_email" {}
|
|
|
|
|
|
|
|
|
|
|
|
# Specify the provider and access details
|
|
|
|
provider "heroku" {
|
|
|
|
email = "${var.heroku_email}"
|
|
|
|
api_key = "${var.heroku_api_key}"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Create our Heroku application. Heroku will
|
|
|
|
# automatically assign a name.
|
|
|
|
resource "heroku_app" "web" {
|
|
|
|
}
|
|
|
|
|
|
|
|
# Create our DNSimple record to point to the
|
|
|
|
# heroku application.
|
|
|
|
resource "dnsimple_record" "web" {
|
|
|
|
domain = "${var.dnsimple_domain}"
|
|
|
|
|
|
|
|
name = "terraform"
|
|
|
|
|
|
|
|
# heroku_hostname is a computed attribute on the heroku
|
|
|
|
# application we can use to determine the hostname
|
|
|
|
value = "${heroku_app.web.heroku_hostname}"
|
|
|
|
|
|
|
|
type = "CNAME"
|
|
|
|
ttl = 3600
|
|
|
|
}
|
|
|
|
|
|
|
|
# The Heroku domain, which will be created and added
|
|
|
|
# to the heroku application after we have assigned the domain
|
|
|
|
# in DNSimple
|
|
|
|
resource "heroku_domain" "foobar" {
|
|
|
|
app = "${heroku_app.web.name}"
|
|
|
|
hostname = "${dnsimple_record.web.hostname}"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Output the hostname of the newly created record
|
|
|
|
output "address" {
|
|
|
|
value = "${dnsimple_record.web.hostname}"
|
|
|
|
}
|
|
|
|
```
|