Top

Terraform

Ein Tool um eine allgemeine Konfiguration zu erstellen die eine Infrastruktur aufbaut.
Es werden alle Konfigurationsdateien innerhalb eines Verzeichnis gesammelt und zusammengestellt.
Die Dateien werden in HCL (Hashicorp Configuration Language) geschrieben, was sich an JSON orientiert.

Eine einfach Konfiguration simpleapp.tf für eine Heroku Applikation.

# Heroku provider
provider "heroku" {
    email = "<email>"
    api_key = "<apikey>"
}
# Create a new app
resource "heroku_app" "default" {
    name = "my-app243234234234"
    region = "us"
}

Es wird ein Kommando geboten um die Konfigurationsdateien zu formatieren.

$ terraform fmt

Man hat die Möglichkeit mit der Konfiguration zu planen und diesen Plan zu speichern.

$ terraform plan
$ terraform plan -out=heroku.plan

Mit apply wird basierend auf der Konfiguration die Infrastruktur aufgebaut. Soll ein gespeicherter Plan ausgeführt werden wird dieser angehängt.

$ terraform apply
$ terraform apply heroku.plan
heroku_app.default: Creating...
all_config_vars.%:    "" => "<computed>"
config_vars.#:        "" => "1"
config_vars.0.%:      "" => "1"
config_vars.0.FOOBAR: "" => "baz"
git_url:              "" => "<computed>"
heroku_hostname:      "" => "<computed>"
name:                 "" => "my-app243234234234"
region:               "" => "us"
stack:                "" => "<computed>"
web_url:              "" => "<computed>"
heroku_app.default: Creation complete

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

The state of your infrastructure has been saved to the path
below. This state is required to modify and destroy your
infrastructure, so keep it safe. To inspect the complete state
use the `terraform show` command.

State path: terraform.tfstate

Die Infrastruktur kann mit destroy und einer Bestätigung wieder entfernt werden.

$ terraform destroy
Do you really want to destroy?
Terraform will delete all your managed infrastructure.
There is no undo. Only 'yes' will be accepted to confirm.

Enter a value: yes

heroku_app.default: Refreshing state... (ID: my-app243234234234)
heroku_app.default: Destroying...
heroku_app.default: Destruction complete

Destroy complete! Resources: 1 destroyed.

Es können zusätzliche Ausgaben mit Outputs definiert werden.

output "web_url" {
    value = "${heroku_app.default.web_url}"
}

Die Outputs werden ausgegeben wenn Terraform durchgelaufen ist.

Outputs:

web_url = https://my-app243234234234.herokuapp.com/

Terraform merkt sich den Status der Infrastruktur und speichert diesen in der Datei terraform.tfstate.
Mit dem state Kommando kann man sich eine Liste der Namen oder weitere Informationen anzeigen lassen.

$ terraform state list
$ terraform state show