Wie verwende ich cloud-init mit Terraform?

24

Ich arbeite mit Digital Ocean und Terraform und kann bereits die Domain, Subdomain, Netzwerkeinstellungen und den Host automatisieren, aber es gibt einen Abschnitt User data, der so aussieht:

Benutzerdaten

Die Beschreibung dieses Feldes sagt Allows the use of Cloud-init to configure your droplet. Als ich mich umsah, fand ich die Dokumentation .

Meine Frage ist, wie Sie dies bei der Verwendung von Terraform nutzen können .

Gepser
quelle

Antworten:

21

Cloud-Init-Dateien sind im Wesentlichen Bootstrap-Codes, die vor jedem Start ausgeführt werden und unter anderem Dateien ändern, Dienste einrichten, Benutzer erstellen usw. können.

Nicht alle Arten von Tröpfchen unterstützen alle Funktionen von Cloud-Init. Beispielsweise verwendet CoreOS eine eigene Implementierung mit einer sehr begrenzten Teilmenge gültiger Werte.

Um dies in terraform zu verwenden, geben Sie einfach die Cloud-Init-Datei während der Droplet-Erstellung an:

main.tf:

resource "digitalocean_droplet" "web" {
  image              = "coreos-stable"
  name               = "web"
  region             = "lon1"
  size               = "2gb"
  private_networking = true
  ssh_keys           = ["${digitalocean_ssh_key.dodemo.id}"]
  user_data          = "${file("web.conf")}"
}

web.conf:

#cloud-config
coreos:
  units:
    - name: "etcd2.service"
      command: "start"
    - name: "fleet.service"
      command: "start"

Dadurch wird beispielsweise ein Droplet erstellt, in dem CoreOS während des Startvorgangs etcd2 und fleet ausführt

Weitere Beispiele finden Sie in diesem Repository . Dort zeige ich, wie man mit diesen Konfigurationsoptionen einige einfache Docker-basierte Dienste auf CoreOS einrichten kann

SztupY
quelle
5

Wenn Sie mit Terraform eine Auto Scaling-Gruppe erstellen, können Sie angeben user_data, welche Instanzen von dieser ASG erstellt werden sollen. Dokumentiert hier - https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#user_data

Sie können auch eine einzelne EC2-Instanz erstellen und user_datazur Verwendung bereitstellen - https://www.terraform.io/docs/providers/aws/r/instance.html#user_data

In der AWS EC2-Dokumentation wird erläutert, wie user_datader cloud-initDienst, der auf den meisten Linux-Distributionen ausgeführt wird, als AMIs in AWS verfügbar ist - http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user- Datenwolke-Init

Evgeny
quelle