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
Das aktuelle Verzeichnis initialisieren.
$ terraform init
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