terraform/website/source/intro/examples/cross-provider.markdown

1.8 KiB

layout page_title sidebar_current
intro Cross Provider 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}"
}